<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(四)

          共 2195字,需瀏覽 5分鐘

           ·

          2021-01-13 16:12

          Version

          k8s 版本?v1.18.3?


          CRI

          CRI 是 Kubernetes 為了將容器運行時抽離出來而定義的接口。一開始 Kubernetes 是不支持 CRI 的,而是抽象了 dockershim,直接對接了 docker。然而隨著容器運行時的增加(主要是當時的 rkt),頻繁修改 Kubernetes 主線代碼過于麻煩,因此抽象了 CRI 去對接所有的容器運行時。

          kubelet 通過 gRPC 和實現(xiàn)了 CRI 的進程交互,以達到解耦合的目的。


          CRI 中的 gRPC 服務(wù)定義了以下幾個 interface

          (一) RuntimeService,容器運行時相關(guān)的操作

          • RuntimeVersioner,獲取版本相關(guān)信息

          • ContainerManager,定義了各種 container 相關(guān)操作

          • PodSandboxManager,定義了各種 pod 相關(guān)的操作

          • ContainerStatsManager,定義了 container 的 cpu,memory 之類的 stats

          (二)?ImageManagerService,容器鏡像相關(guān)的操作

          CRI 的具體定義可以查看?staging/src/k8s.io/cri-api/pkg/apis?下的代碼。


          dockershim

          dockershim 是 Kubernetes 內(nèi)置的 CRI 實現(xiàn),用于隔離和 docker 相關(guān)的操作,dockershim 的代碼定義在?pkg/kubelet/dockershim?下。

          Kubernetes 1.20 版本后,dockershim 將會被廢棄。

          cri-o

          cri-o 是一個實現(xiàn)了 CRI 接口的項目,用于和符合 OCI 標準的容器運行時對接。

          整個 cri-o 由以下幾個部分組成

          1. OCI compatible runtime

          2. containers/storage

          3. containers/image

          4. networking (CNI)

          5. container monitoring (conmon)

          6. security is provided by several core Linux capabilities


          OCI 標準

          OCI(Open Container Initiative) 是開放容器標準,定義了容器相關(guān)的一系列標準

          1. runtime-spec

          2. image-spec

          3. distribution-spec


          OCI runtime spec 中定義了一些容器相關(guān)的操作

          1. state

          2. create

          3. start

          4. kill

          5. delete


          同時還有一些容器相關(guān)的 hooks

          1. prestart

          2. createRuntime

          3. createContainer

          4. startContainer

          5. poststart

          6. poststop


          整個容器的生命周期如下

          1. create 命令被調(diào)用

          2. 容器的運行時環(huán)境將根據(jù)?config.json?被創(chuàng)建,此時用戶進程未運行

          3. prestart hook 被調(diào)用,如果 hook 失敗了,停止容器,跳轉(zhuǎn)到第 12 步

          4. createRuntime hook 被調(diào)用,如果 hook 失敗了,停止容器,跳轉(zhuǎn)到第 12 步

          5. createContainer hook 被調(diào)用,如果 hook 失敗了,停止容器,跳轉(zhuǎn)到第 12 步

          6. start 命令被調(diào)用

          7. startContainer hook 被調(diào)用,如果 hook 失敗了,停止容器,跳轉(zhuǎn)到第 12 步

          8. runtime 運行用戶進程

          9. poststart hook 被調(diào)用,如果 hook 失敗了,打 warning 日志,繼續(xù)運行

          10. 進程退出

          11. delete 命令被調(diào)用

          12. 容器被銷毀

          13. poststop hook 被調(diào)用,如果 hook 失敗了,打 warning 日志,繼續(xù)運行


          一系列項目

          1. runc?是 OCI runtime 的默認實現(xiàn)

          2. containerd 是 docker 剝離出來的容器相關(guān)的 runtime 實現(xiàn),containerd 也使用了 runc 作為 OCI runtime。本來 containerd 有個 CRI 實現(xiàn) containerd/cri,不過在 2020.10 月已經(jīng)被合入 containerd 主 repo 了

          3. cri-o?實現(xiàn)了 CRI 并且能夠以符合 OCI 標準 的 runtime 作為底層實現(xiàn),是 CRI 和 OCI 的中間層

          4. crun?另一個用 C 寫的 OCI runtime,之所以有這樣一個項目是因為 runc 有些比較 hack 的操作(會調(diào)用自己),然后還直接調(diào)用了 C 代碼


          最后

          本次主要還是簡單介紹了一下 CRI 和 OCI,下次再介紹一下容器中網(wǎng)絡(luò)相關(guān)的標準 CNI
          剩余
          • 為什么需要定時觸發(fā)?syncCh

          • 為什么需要?housekeeping

          • containerManager 以及 pod 的 cgroups 結(jié)構(gòu)

          • volumeManager 以及 CSI

          • CNI


          敬請期待 Kubernetes?源碼分析之 kubelet(五)



          ?點擊屏末?|??|?即刻學習

          瀏覽 101
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  欧美视频一 | 69国产精品成人 | 黄色一极视频 | 欧美熟妇乱伦视频 | 一区二区三区四区精品 |