摘要:基本流程 1. kube-apiserver把Pod设置为Terminating状态。2. 从Service中异步删除Endpoint。3. 异步执行preStop Hook。4. 异步发送SIGTERM信号。5. 等待terminationGracePeriodSeconds(默认值为 30 秒)
阅读全文
摘要:channel问题 channel是go协程间通信的主要方式。channel预设容量,很难评估,不支持动态扩容。k8s的client-go提供了基于切片的线程安全的并发队列,解耦生产者与消费者,提供了去重、限速、重试加入队列等功能。 k8s controller处理事件官方例子 生产者 // 创建一
阅读全文
摘要:controller选主代码实现 controller多实例可能状态1 抢锁成功,作为Leader跑业务2 抢锁失败等待3 释放锁,结束 k8s官方例子go.mod和主流程 module controller-by-leader-election go 1.19 require ( github.c
阅读全文
摘要:默认单节点部署pod数上限是110,超过时会调度失败。 vim /var/lib/kubelet/config.yamlmaxPods: 300systemctl restart kubelet
阅读全文
摘要:确认namespace下没有资源 kubectl get all -n my-namespace kubectl delete namespace my-namespace 调用kube-apiserver PUT接口去掉namespace中的finalizer kubectl proxy & PI
阅读全文
摘要:k8s v1.19.0基于scheduler framework开发插件,本质上是实现接口。 下载代码 mkdir sigs.k8s.io cd sigs.k8s.io git clone https://github.com/kubernetes-sigs/scheduler-plugins.gi
阅读全文
摘要:k8s v1.15.0 在k8s生态中,Operator是灵活管理有状态应用的解决方案。operator通过crd来描述部署的有状态应用和自定义控制器来完成部署和运维工作。 EtcdOperator部署Etcd集群,采用的是静态集群的方式。好处是不必依赖一个额外的服务发现机制来组建集群,适合本地容器
阅读全文
摘要:finalizers 终结器,存放键的列表,列表内的键为空时资源才可被删除。删除指定了Finalizer的对象时,填充.metadata.deletionTimestamp来标记要删除的对象,返回已接受202状态码使其进入只读状态。 # 创建包含finalizers的configmap cat <<
阅读全文
摘要:健康检查日志没有严格按照periodSeconds间隔时间来打印。 核心代码如下: pkg/kubelet/prober/worker.go pkg/kubelet/prober/prober.gorunProbe方法(kubelet健康检查有3种方式) httpGet发送HTTP 请求,返回码介于
阅读全文
摘要:kubeconfig默认在~/.kube/config,主要包括certificate-authority-data根证书、client-certificate-data客户端证书、client-key-data客户端私钥、context上下文、server即kube-apiserver IP和端口
阅读全文
摘要:容器拉起流程 为了避免容器频繁拉起,kubelet通过backoff来限制(backoff表示上次容器退出时间与再次创建间隔时间,lastUpdate表示上次容器创建时间,backoff和lastUpdate只会在Next函数中会更新):Pod中重启容器时(周期性执行SyncPod函数),Pod通过
阅读全文
摘要:方法1:goland+dlv远程调试kubelet Goland配置 cd到main函数所在的go文件目录 执行下面命令等待2分钟左右,等待时间长是因为资源不足,直到出现API server listening at: [::]:8033 /root/Downloads/dlv debug --he
阅读全文
摘要:httpGet 发送一个 HTTP 请求,当返回码介于 200~400 之间时,检查成功。 livenessProbe: httpGet: path: /index.html port: 80 httpHeaders: - name: X-Custom-Header value: Awesome i
阅读全文
摘要:使用service的原因 1. Pod的IP不是固定的。2. Pod实例之间需要负载均衡。 部署Service和Deploy 使用selector字段来声明这个Service只代理携带了app=hostnames标签的Pod。这个Service的80端口,代理的是Pod的9376端口。 apiVer
阅读全文
摘要:iptables的缺点和ipvs的优点 当宿主机上有大量Pod时,大量iptables规则不断被刷新,占用大量CPU。ipvs采用了hash数据结构,比iptables更加高效。当创建了Service后,kube-proxy在每个宿主机上创建一个虚拟网卡(名字是kube-ipvs0),每个网卡上配置
阅读全文
摘要:flannel Pod挂载了ConfigMap kube-flannel-cfg
阅读全文
摘要:有状态应用 实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,就被称为“有状态应用”。 Pod管理策略 通过.spec.podManagementPolicy 字段来管理 Pod。OrderedReady:严格遵循 Pod 顺序来启停,默认设置。Parallel:告诉 StatefulSet
阅读全文
摘要:Deployment控制ReplicaSet(版本),ReplicaSet控制Pod(副本数)。 更新策略 Recreate 删除所有已存在的pod,重新创建新的; RollingUpdate 滚动升级spec.minReadySeconds: 新建Pod状态保持Ready持续时间的最小值,才被认为
阅读全文
摘要:3点需求 只需要感知数据最新的状态,不担心错过数据的变化过程。需求1: 实时性(即数据变化时,相关组件越快感知越好)需求2: 保证消息的顺序性(即消息要按发生先后顺序送达目的组件。很难想象在Pod创建消息前收到该Pod删除消息时组件应该怎么处理)需求3: 保证消息不丢失或者有可靠的重新获取机制(比如
阅读全文
摘要:在内容更新且发生变化时,resourceVersion(从etcd最新版本号开始)变成etcd最新版本号+1;不同于pod,pod控制器和cr都有generation,从1开始,会加1。 创建Pod内容器 删除Pod资源 status.phase status.phase是Pod的当前状态。 Pha
阅读全文