深究Kubernetes源码-Kubelet-3 Pod处理主流程分析
基于kubernetes1.26
Kubelet启动后主协程中通过Handler处理Pod的生命周期,以Channal的方式触发,如图包含以下7个Channal:
ConfigChan,Kube-apiserver和静态Pod的增删改
PlegChan,Runtime级Pod生命周期变化反向同步到Kubelet
SyncChan,1s的定时器,定时同步需要同步的Pod
HouseKeepingChan,2s的定时器,定时清理Pod
Startup/Readiness/LivenessProbe,Pod定义的三种类型探针检测到Pod状态变化

最终所有的逻辑都会分发到PodWorker。PodWorker会启动一个协程继续处理Pod,主要分为三个分支:
TermintatedPodWork,处理已删除的Pod,等待Pod Volume Unmount,注销secretManager/configMapManager等,更新Pod状态
TerminatingPodWork,处理正在删除的Pod,如果Pod存在运行的容器,执行KillPod删除其Runtime中的Sandbox/Container,停止Liveness/Readiness/Startup等,更新Pod状态
default,默认其他情况,即创建和更新Pod

syncPod流程核心是更新Pod状态,针对新建Pod,为其创建MirrorPod,PodContainerManager,PodStatus,PodDataDir,注册到Configmap/SecretManager,Startup/Liveness/ReadinessProbe,等待Volume挂载完成等,最后调用containerRuntime.SyncPod,准备调用CRI实现Runtime层的Pod/Containerd同步。

kubeGenericRuntimeManager实现了ContainerRuntime.SyncPod接口,这个函数逻辑代码注释对核心步骤给出了较为清晰的概括