<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Kubernetes 源碼分析之 kubelet(三)

          共 2169字,需瀏覽 5分鐘

           ·

          2021-01-11 23:15

          Version

          k8s 版本?v1.18.3?(后續(xù)系列都以這個(gè)版本)

          syncPod

          syncPod 會(huì)在?pkg/kubelet/pod_workers.go?下的?managePodLoop?函數(shù)中被調(diào)用,在觸發(fā)前會(huì)先調(diào)用?podCache.GetNewerThan?來獲取最新的?kubecontainer.PodStatus
          然后 syncPod 會(huì)處理以下兩種情況
          • 刪除 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 如何生成?

          可以發(fā)現(xiàn) pod status 的生成調(diào)用了?kl.generateAPIPodStatus?這個(gè)函數(shù),這個(gè)函數(shù)有兩個(gè)參數(shù),一個(gè)是當(dāng)前的 pod,一個(gè)是 podCache 中獲取的?kubecontainer.PodStatus
          上述 podCache 定義在?pkg/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)用。
          這里可以發(fā)現(xiàn) pleg 模塊會(huì)定時(shí)從 container runtime 中獲取狀態(tài),并且和當(dāng)前 pod/container 狀態(tài)對(duì)比,然后生成一些 pod 的生命周期事件,最終觸發(fā)相關(guān)操作。
          當(dāng)?kubecontainer.PodStatus?被更新,syncPod?就會(huì)被觸發(fā),進(jìn)而生成 api PodStatus


          containerManager 是什么?

          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
          • 為什么需要?housekeeping
          • containerManager 以及 pod 的 cgroups 結(jié)構(gòu)
          • volumeManager 以及 CSI
          • containerRuntime 以及 CRI

          敬請(qǐng)期待 Kubernetes?源碼分析之 kubelet(四)



          ?點(diǎn)擊屏末?|??|?即刻學(xué)習(xí)

          瀏覽 91
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产免费成人视频 | 成人网站日皮视频 | 国产一级无码在线观看 | 欧美成人性网站 | 美日韩操逼 |