Kubernetes 源碼分析之 kubelet(三)
k8s 版本?v1.18.3?(后續(xù)系列都以這個(gè)版本)
syncPod
pkg/kubelet/pod_workers.go?下的?managePodLoop?函數(shù)中被調(diào)用,在觸發(fā)前會(huì)先調(diào)用?podCache.GetNewerThan?來獲取最新的?kubecontainer.PodStatus刪除 pod (updateType == SyncPodKill) 創(chuàng)建更新同步 pod
刪除 pod 的邏輯相對(duì)比較簡(jiǎn)單,暫時(shí)不深入分析了,將關(guān)注點(diǎn)集中在另一種情況時(shí)。
根據(jù) container runtime 實(shí)際情況生成期望的 api PodStatus statusManager 獲取當(dāng)前的 api PodStatus (從 apiserver) statusManager 更新 api PodStatus containerManager 處理 Cgroups 相關(guān)操作 volumeManager 處理 volume 相關(guān)功能 獲取鏡像 pullSecret, 調(diào)用 container runtime 去 SyncPod
總的來說本文關(guān)注以下幾個(gè)部分
期望的 api PodStatus 如何生成 containerManager 是什么 volumeManager 是什么 以及最重要的 container runtime 相關(guān)的功能和實(shí)現(xiàn)
期望的 api PodStatus 如何生成?

kl.generateAPIPodStatus?這個(gè)函數(shù),這個(gè)函數(shù)有兩個(gè)參數(shù),一個(gè)是當(dāng)前的 pod,一個(gè)是 podCache 中獲取的?kubecontainer.PodStatuspkg/kubelet/container/cache.go?下,可以發(fā)現(xiàn) podCache 只是一個(gè)簡(jiǎn)單的 cache 層,用于維護(hù)最新的?kubecontainer.PodStatus,而 cache 的更新操作在?pkg/kubelet/pleg/generic.go?的?relist?函數(shù)中被調(diào)用。kubecontainer.PodStatus?被更新,syncPod?就會(huì)被觸發(fā),進(jìn)而生成 api PodStatuscontainerManager 是什么?

containerManager 定義在?pkg/kubelet/cm/container_manager.go?中,整個(gè)接口的定義比較雜亂,總的來說整個(gè) manager 是用來管理一些 cgroups 相關(guān)的操作和結(jié)構(gòu)。
了解這部分代碼前可以先了解一下 kubernetes 管理下整個(gè) cgroups 的結(jié)構(gòu)樹,詳細(xì)的內(nèi)容之后再深入討論。
volumeManager

volumeManager 定義在?pkg/kubelet/volumemanager/volume_manager.go?,負(fù)責(zé) kubelet 和 volume 的交互。
整個(gè) volume 的功能實(shí)現(xiàn)也是一個(gè)非常大的模塊,也涉及到了 kubernetes 的核心擴(kuò)展 CSI(container storage interface),之后了解 CSI 的時(shí)候再深入討論這部分代碼。
container runtime

containerRuntime 定義在?pkg/kubelet/container/runtime.go?中,containerRuntime 負(fù)責(zé)和容器運(yùn)行時(shí)交互的所有操作,也就是整個(gè) kubelet 中最核心的部分。
目前 containerRuntime 的實(shí)現(xiàn)定義在?pkg/kubelet/kuberuntime/kuberuntime_manager.go
下篇文章講講 kuberuntime 如何和 kubernetes 最核心的擴(kuò)展 CRI(container runtime interface) 交互,以及 CRI 相關(guān)的內(nèi)容
最后
本次分析解決了一些問題
pleg?模塊到底做了什么syncPod?做了一些什么
帶來了如下問題
containerManager 以及 pod 的 cgroups 結(jié)構(gòu)
volumeManager 以及 CSI
containerRuntime 以及 CRI
剩余
為什么需要定時(shí)觸發(fā)? syncCh為什么需要? housekeepingcontainerManager 以及 pod 的 cgroups 結(jié)構(gòu) volumeManager 以及 CSI containerRuntime 以及 CRI

敬請(qǐng)期待 Kubernetes?源碼分析之 kubelet(四)
?點(diǎn)擊屏末?|?閱讀原文?|?即刻學(xué)習(xí)