深究Kubernetes源碼-Kubelet-3 Pod處理主流程分析
基于kubernetes1.26
Kubelet啟動(dòng)后主協(xié)程中通過Handler處理Pod的生命周期,以Channal的方式觸發(fā),如圖包含以下7個(gè)Channal:
ConfigChan,Kube-apiserver和靜態(tài)Pod的增刪改
PlegChan,Runtime級(jí)Pod生命周期變化反向同步到Kubelet
SyncChan,1s的定時(shí)器,定時(shí)同步需要同步的Pod
HouseKeepingChan,2s的定時(shí)器,定時(shí)清理Pod
Startup/Readiness/LivenessProbe,Pod定義的三種類型探針檢測(cè)到Pod狀態(tài)變化

最終所有的邏輯都會(huì)分發(fā)到PodWorker。PodWorker會(huì)啟動(dòng)一個(gè)協(xié)程繼續(xù)處理Pod,主要分為三個(gè)分支:
TermintatedPodWork,處理已刪除的Pod,等待Pod Volume Unmount,注銷secretManager/configMapManager等,更新Pod狀態(tài)
TerminatingPodWork,處理正在刪除的Pod,如果Pod存在運(yùn)行的容器,執(zhí)行KillPod刪除其Runtime中的Sandbox/Container,停止Liveness/Readiness/Startup等,更新Pod狀態(tài)
default,默認(rèn)其他情況,即創(chuàng)建和更新Pod

syncPod流程核心是更新Pod狀態(tài),針對(duì)新建Pod,為其創(chuàng)建MirrorPod,PodContainerManager,PodStatus,PodDataDir,注冊(cè)到Configmap/SecretManager,Startup/Liveness/ReadinessProbe,等待Volume掛載完成等,最后調(diào)用containerRuntime.SyncPod,準(zhǔn)備調(diào)用CRI實(shí)現(xiàn)Runtime層的Pod/Containerd同步。

kubeGenericRuntimeManager實(shí)現(xiàn)了ContainerRuntime.SyncPod接口,這個(gè)函數(shù)邏輯代碼注釋對(duì)核心步驟給出了較為清晰的概括