kubelet 初识 状态上报 健康上报通过lease对象

kubelet 架构
kubelet 初识 状态上报 健康上报通过lease对象_第1张图片

kubelet这个组件,安装在每个Node上,负责上报node到相关信息,提供了自身探活到api 同时也包含以下组件:
probemanager(livenessProbe readnessProbe)
OOM Manager 监测哪些节点出现异常上报给kubelet
cadvisor 是kubelet的一部分通过cgroup技术上报容器相关信息。
EvictionManager 驱逐的进程,当不可压缩资源出现瓶颈,会根据优先级来驱逐,会将低优先级的先驱逐掉
volumemanager volume的挂载操作
mage GC container GC 负责垃圾回收
imageManger是负责镜像的管理。
syncLoop watch node pod 对象,接收到pod对象的变更,podworker就会去干活。

kubelet 是维护pod的生命周期,通过监听apiserver的event,获取当前节点pod清单(event),podworker会处理这些事件 ,podworker会call cri接口

然后底层有一个container runtime interface,一种是call cri grpcserver ->container network plugin->docker shim ->docker 创建容器
remotecontainer runtime,call containerd 无需在用这个docker daemon,这样会比较节省资源。

kubelet管理pod的核心流程
apiserver-> pod update->syncLoop->worker1->syncpod->computePodActions(增删改)然后call cri是执行操作,同时这个woker跟PLEG 是call cri接口获取一个relist pod lifecycle events状态信息上报到syncloop,如果这个cri坏了那么kubelet就认为这个node有问题的。
kubelet 初识 状态上报 健康上报通过lease对象_第2张图片
sanbox是就是pause container生成网络配置,生成pod ip,然后再拉取容器的镜像,创建出容器,开始容器。

kubelet 初识 状态上报 健康上报通过lease对象_第3张图片
1.检查准入 检查网络插件状态 更新cgroup信息 创建pod的data和dir,挂载相关volume(csi), 走到syncpod,计算container以及pause container信息,判断信息是否有变化,并删除pod中不存在的container,执行initcontainer操作,创建sandbox,然后call cri创建container,最后调用cni。

注:参照极客时间课件图片。

Lease对象定时更新,如果没更新则说明这个node存在问题。

root@master:~# kubectl get lease -n kube-node-lease -oyaml node1


apiVersion: coordination.k8s.io/v1
kind: Lease
metadata:
  creationTimestamp: "2022-08-01T12:53:13Z"
  name: node1
  namespace: kube-node-lease
  ownerReferences:
  - apiVersion: v1
    kind: Node
    name: node1
    uid: 20ff7bcc-3bf4-4d1c-b333-d03bd06231cd
  resourceVersion: "901950"
  uid: 991b770e-ae8a-4d28-aaaf-888b68156408
spec:
  holderIdentity: node1
  leaseDurationSeconds: 40 #如果40秒内没有更新则会报错
  renewTime: "2022-10-29T08:39:14.100037Z"

你可能感兴趣的:(k8s,pod高可用,kubelet,docker,运维)