歡迎光臨
每天分享高質量文章

Containerd給Kubernetes帶來了更多容器運行時的可選方案

容器運行時是在某個節點上執行容器並且管理容器鏡像的軟體。如今,最廣為人知的容器運行時是Docker,但是,生態系統內也有一些別的容器運行時,比如rkt,containerd和Ixd。Docker是目前為止在Kubernetes生產環境里使用最多的容器運行時,不過Docker的近親,containerd,可能將被證明是一種更好的方案。本文介紹在Kubernetes上使用containerd。
Kubernetes 1.5引入了一種內部插件API,名為Container Runtime Interface(CRI),它提供簡單的訪問接口,去訪問不同的容器運行時。CRI讓Kubernetes可以使用多種容器運行時,而無需重新編譯。理論上,Kubernetes可以使用任意實現了CRI的容器運行時,來管理pod,容器和容器鏡像。
在過去的6個月里,來自Google,Docker,IBM,ZTE和ZJU的工程師一起為containerd實現了CRI。該專案稱為cri-containerd[1],在2017年9月25號發佈了功能完備的v1.0.0-alpha.0版本[2]。使用cri-containerd,用戶可以使用containerd作為底層運行時來運行Kubernetes集群,而無需安裝Docker。


Containerd

Containerd是滿足OCI規範的核心容器運行時,從設計上就是為了嵌入大型系統的。它提供了要支持執行容器,並且在某個節點上管理鏡像所需功能的最小集合。它由Docker Inc公司啟動,並且在2017年3月份捐贈給了CNCF。Docker引擎本身是在containerd的早期版本上構建的,並將很快升級到最新版本。Containerd幾乎可以稱得上是功能完備且穩定的版本,目前可用的是1.0.0-beta.1。
Containerd的範圍比Docker小得多,它提供golang的客戶端API,更加關註於可嵌入化。更小的範圍意味著更小的代碼基,更易於維護和支持,和Kubernetes的需求匹配見下表:

總的來說,從技術角度看,Containend是Kubernetes上很好的容器運行時的替代方案。


Cri-containerd

Cri-containerd[3]是:containerd的CRI的一種實現。它在Kubelet和containerd所在的相同節點上操作。在Kubernetes和containerd之間,cri-containerd處理來自Kubelet的所有CRI服務請求,並且使用containerd來管理容器和容器鏡像。Cri-containerd管理這些服務請求,部分是通過在containerd的服務請求上添加足夠的額外信息來支持CRI的要求。

和當前的Docker的CRI實現(dockershim)相比,cri-containerd去掉了stack里的額外hop,讓stack更為穩定和高效。


架構

Cri-containerd使用containerd來管理完整的容器生命周期和所有容器鏡像。正如下圖所示,Cri-containerd通過CNI(另一個CNCF的專案)管理pod網絡。

讓我們使用一個示例來說明當Kubelet創建一個但容器pod時,Cri-containerd是如何工作的:
  1. Kubelet呼叫Cri-containerd,通過CRI運行時服務API,來創建pod;

  2. Cri-containerd使用containerd創建並且啟動一個特定的pause容器(沙箱容器),並且將該容器放到pod的cgroup和命名空間里(簡化起見跳過這裡的詳細步驟);

  3. Cri-containerd使用CNI配置pod的網絡命名空間;

  4. Kubelet接下來通過CRI鏡像服務API呼叫Cri-containerd,來拉取應用程式容器鏡像;

  5. 如果該鏡像不在這個節點上,Cri-containerd就會使用containerd來拉取鏡像;

  6. Kubelet隨後通過CRI運行時服務API來呼叫Cri-containerd,在pod內部,使用拉取下來的容器鏡像,創建並且啟動應用程式容器;

  7. Cri-containerd最終呼叫containerd創建出應用程式容器,將其放入pod的cgroup和命名空間里,並且啟動pod的全新的應用程式容器。

這些步驟之後,一個pod及其對應的應用程式容器就被創建了出來,並運行著了。


狀態

Cri-containerd v1.0.0-alpha.0在2017年9月25號發佈。
它特性完備。支持所有Kubernetes特性。
所有CRI驗證測試都已經通過了。(CRI驗證是驗證某一CRI實現是否滿足Kubernetes所需的所有要求的測試框架)
所有常規的節點e2e測試也都通過了。(Kubernetes測試框架用來測試Kubernetes節點級別的功能的,比如管理pod,mount捲等等。)
要想瞭解v1.0.0-alpha.0版本的更多信息,請查看專案repository[2]。

試一試

多節點集群安裝器,以及使用ansible和kubeadm搭建步驟,查看repo鏈接[4]。
在Google Cloud上從頭創建一個集群,請看Kubernetes the Hard Way[5]。
自定義安裝,查看repo鏈接[6]。
在本地VM上使用LinuxKit安裝,請看repo鏈接[7]。

下一步

接下來會關註於穩定性和可用性上的改進。
穩定性
  • 在多種OS發行版,比如Ubuntu,COS(容器優化OS)等上,在Kubernetes測試基礎架構上搭建完整的Kubernetes集成測試。

  • 積極解決所有測試失敗以及其他用戶彙報的問題。

可用性
  • 改進crictl的用戶體驗。Crictl是所有CRI容器運行時的便攜的命令列工具。這裡的標的是讓它更易於除錯和開發。

  • 將Cri-containerd和kuber-up.sh集成,幫助用戶使用Cri-containerd和containerd搭建滿足生產環境質量要求的Kubernetes集群。

計劃在2017年末發佈v1.0.0-beta.0版本。


貢獻

Cri-containerd是Kubernetes的孵化專案,位於https://github.com/kubernetes-incubator/cri-containerd。歡迎貢獻任何想法,問題,或者解決方案。想要貢獻的人可以從開發者開始指南[8]開始。
相關鏈接:
  1. https://github.com/kubernetes-incubator/cri-containerd

  2. https://github.com/kubernetes-incubator/cri-containerd/releases/tag/v1.0.0-alpha.0

  3. https://github.com/kubernetes-incubator/cri-containerd

  4. https://github.com/kubernetes-incubator/cri-containerd/blob/master/contrib/ansible/README.md

  5. https://github.com/kelseyhightower/kubernetes-the-hard-way

  6. https://github.com/kubernetes-incubator/cri-containerd/blob/master/docs/installation.md

  7. https://github.com/linuxkit/linuxkit/tree/master/projects/kubernetes

  8. https://github.com/kubernetes-incubator/cri-containerd#getting-started-for-developers

原文鏈接:http://blog.kubernetes.io/2017/11/containerd-container-runtime-options-kubernetes.html

Kubernetes 實戰培訓

本次培訓內容包括:Docker容器的原理與基本操作;容器網絡與儲存解析;Kubernetes的架構與設計理念詳解;Kubernetes的資源物件使用說明;Kubernetes 中的開放接口CRI、CNI、CSI解析;Kubernetes監控、網絡、日誌管理;容器應用的開發流程詳解等,點擊識別下方二維碼加微信好友瞭解具體培訓內容

3月23日開始上課,點擊閱讀原文鏈接即可報名。
赞(0)

分享創造快樂