K8s批量获取大量数据资源解决方案
K8s批量获取大量数据资源解决方案背景当使用kubelet已经无法获取到资源的级别,比如万级别
可以先直接采用client-go,去获取,这会更快,因为当我们使用kubelet get nodes|wc -l计算的时候,要先打印到出来再遍历
:star:最后最大数据可以采用NewSharedInformerFactory来获取,使用informer,former 提供了基于事件通知的只读缓存机制,可以注册资源变化的回调函数,并可以极大减少 API 的调用。
官方exampleURL
代码实例package mainimport ( "flag" "fmt" "k8s.io/apimachinery/pkg/labels" "k8s.io/client-go/informers" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/client ...
深入理解GO的GC
深入理解GO的GCGov1.3之前的标记清除法(mark and sweep)
进行STW暂停
把所有的程序可达对象标记
清除所有进行没有被标记的对象
去除暂停,进行程序,并且重复过程
缺点:
出现了SWT(stop the world)过程,程序会有卡顿(重要问题)
标记需要扫描整个heap
清除数据会产生heap碎片
Gov1.5的三色标记法
程序创建,把所有的对象标记为白色
遍历Root Set(不是递归的,直走一步)得到灰色节点
遍历灰色节点,白色标记为灰色,并且刚才的灰色变成黑色
重复以上步骤,直到灰色没有对象
收集所有的垃圾(标记为白色)
三色标记没有SWT会出现的问题:
出现对象丢失(下面是出现的条件):
一个白色对象被黑色对象引用
灰色对象与它之间的可达关系的白色对象被破坏(此时灰色对象与白色对象变成不可达)
强弱三色不变式破坏对象丢失的俩个同时成立
强三色不变式强制性不允许黑色对象引用白色对象(破坏条件1)
弱三色不变式黑色对象可以引用白色对象,白色对象存在其他灰色对象对它的引用,或者可达它的链路上游存在灰色对象(破坏条件2)
Gov1.8屏障 ...
homebrew安装redis(Mac)
homebrew安装redis(Mac)已经确保安装好brew# 安装redisbrew install redis# 启动redis#方式一:使用brew帮助我们启动软件brew services start redis#方式二redis-server /usr/local/etc/redis.conf#方式三 redis-server
配置文件安装位置
Homebrew安装的软件会默认在/usr/local/Cellar/路径下
redis的配置文件redis.conf存放在/usr/local/etc路径下
修改redis.conf设置密码( # requirepass foobared )为(
requirepass yourpassword)
Redis可视化工具推荐AnotherRedisDesktopManager
2023-10 目前已经获得27K :star:
Go-深入理解GMP
深入理解GMP为什么需要调度器
线程/进程数量越多,切换成本越大
多线程 随着 同步竞争(如 锁。资源)
进程和线程内存占用大
什么是GMPG:goroutine协程
P:processor处理器
M: thread内核级线程(machine)
调度器的设计策略复用线程:避免频繁的创建、销毁线程,而是对线程的复用
1)work stealing机制
当本线程无可运行的G时,尝试从其他线程绑定的P偷取G,而不是销毁线程
先从全局队列拿,全局没有的时候,在从其他线程绑定的P的本地队列“窃取”
执行条件
1、当前p本地队列有待执行g2、没有空闲的p和m, 全局g队列为空 (此时意味这全局繁忙)3、 需要处理网络 I/O
2)hand off机制
当本线程因为G进行系统调用阻塞时,线程释放绑定的P,把P转移给其他空闲的线程执行
3)go func()调度过程
go func()创建一个goroutine
有俩个存储G的本地,新建G优先放在P的本地队列,本地队列满就放在全局队列
G指南运行在M,一个M必须有一个P,M与P是1:1的关系。P的本地为 ...
Go 的panic与recover
Go 的panic与recoverpanic和recover调用时机
panic 能够改变程序的控制流,函数调用panic 时会立刻停止执行函数的其他代码,并在执行结束后在当前 Goroutine 中递归执行调用方的延迟函数调用 defer;
recover 可以中止 panic 造成的程序崩溃。它是一个只能在 defer 中发挥作用的函数,在其他作用域中调用不会发挥任何作用;
panic 只会触发当前 Goroutine 的延迟函数调用;
recover 只有在 defer 函数中调用才会生效;
panic 允许在 defer 中嵌套多次调用;
panic
panic不允许跨协程
panic真正的程序崩溃的过程:
编译器会将关键字 panic 转换成 runtime.gopanic,该函数的执行过程包含以下几个步骤:
创建新的 runtime._panic 结构并添加到所在 Goroutine _panic 链表的最前面;
在循环中不断从当前 Goroutine 的 _defer 中链表获取 runtime._defer 并调用 runtime.reflectcall 运行延迟 ...
Go-网络编程
Go的网络编程TCP什么是TCPTCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网际协议,是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,因为是面向连接的协议,数据像水流一样传输,会存在黏包问题。
TCP的工作流程服务端:
监听端口
接收客户端请求连接
创建goroutine处理连接
客户端:
建立与服务端的连接
进行数据收发
关闭连接
UDP什么是UDPUDP协议(User Datagram Protocol)中文名称是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,不需要建立连接就能直接进行数据发送和接收,属于不可靠的、没有时序的通信,但是UDP协议的实时性比较好,通常用于视频直播相关领域。
TCP粘包主要原因就是tcp数据传递模式是流模式,在保持长连接的时候可以进行多次的收和发。
“粘包”可发生在发送端也可发生在接收端:
1.由N ...
版本控制工具-Git
版本控制工具-Git什么是gitGit是一个版本控制工具,在编程中用于进行管理代码
安装GitGit安装
# 一些常见安装罗列# mac安装brew install git# Windows 安装https://git-scm.com/download/win# linux 安装yum install -y git
配置Git1.配置全局用户名和电子邮箱(可跳过)git config --global user.name "git账户名”git config --global user.email "注册git所用邮箱"
2.配置ssh(Mac为例)# /Users/xxx/目录cd .ssh# xxx@xxx.com 注释ssh-keygen -t rsa -C xxx@xxx.com 回车之后 输入密钥
3.添加密钥到github
# id_rsa 是上面回车输入的同名vim id_rsa.pubssh -T git@github.com
4.因为忽略了第一步(在这可以只设置当前的)git config user.name ...
只关闭chrome深色模式
只关闭chrome深色模式背景chrome会自动根据系统的深浅色模式,进行匹配。
单独关闭chrome深色模式# 单独关闭defaults write com.google.Chrome NSRequiresAquaSystemAppearance -bool YES# 重启chrome 生效# 开启深色模式defaults write com.google.Chrome NSRequiresAquaSystemAppearance -bool NO# 重启chrome 生效
部署K8s(脚本版本)
部署K8s(脚本版本)文件位置:https://github.com/Piwriw/k8s_base/tree/master/k8s-setup
分发文件(push-file.sh)#!/bin/bashset -e# 源文件路径source_file="../k8s-setup"# 目标主机列表target_hosts=( "root@10.10.103.79:/root" "root@10.10.103.80:/root" "root@10.10.103.81:/root")# 循环迭代目标主机列表,并使用 scp 命令将文件复制到每个主机for target_host in "${target_hosts[@]}"; do scp -r "$source_file" "$target_host"done
部署包括docker(set-up.sh)⚠️注意修改# 需要修改kubeadm join 10.10.101 ...
Harbor
Harbor什么是HarborHarbor 是一个开源的企业级容器镜像注册中心,用于管理和存储 Docker 镜像以及其他容器化应用的相关资源。它允许团队或组织在内部搭建自己的容器镜像仓库,以便更好地控制镜像的分发、访问和安全性。
Harbor的安装安装最小配置最低建议配置:
CPU:2 核
内存:4 GB
存储:40 GB
通过docker-compose部署Harbor离线安装# 下载安装包wget https://github.com/goharbor/harbor/releases/download/v2.8.4/harbor-offline-installer-v2.8.4.tgz
修改harbor.yaml中hostname为harborip,https/certificate和private_key为
certificate: /root/edgestack-setup/harbor/cert/cert.certprivate_key: /root/edgestack-setup/harbor/cert/key.key
生成cert.cert和ke ...