標籤:

Docker?Rkt?Lxd?細說K8S容器進行時的又一選項Containerd

器運行時是執行容器並在節點上管理容器鏡像的軟體,目前,最廣為人知的容器運行時是Docker,但在生態系統中還有其他容器運行時軟體,比如Rkt、Containerd和Lxd。Docker是現在於Kubernetes環境中使用的最常見的容器運行時,今天數人云給大家推薦一個Docker的組件——Containerd,它可能是更好的選擇。

本文是由谷歌的軟體工程師Lantao Liu和IBM的開源開發者Mike Brown基於自身相關實踐,共同編寫。

Kubernetes 1.5引入了一個名為容器運行時介面(CRI)的內部插件API,以方便地訪問不同的容器運行時,CRI允許Kubernetes使用各種容器運行時,而不需要重新編譯。從理論上說,Kubernetes可以使用任何實現CRI的容器運行時管理容器和容器鏡像。

在過去的6個月中,來自Google、Docker、IBM、中興和ZJU的工程師們一直在努力為CRI For Containerd,這個項目被稱為cri-containerd,用戶可以使用容器作為底層運行時運行Kubernetes集群,並且無需安裝Docker。

Containerd

Containerd是一個兼容OCI的核心容器運行時,它被設計為嵌入到更大的系統當中,提供了在一個節點上執行容器和管理鏡像的最小功能集,它是由Docker公司發起,並於2017年3月加入了CNCF,Docker引擎本身是建立在早期版本的容器之上,並且很快將更新到最新版本。

與Docker相比,Containerd的規模要小得多,提供了Golang客戶端API,而且更專註於可嵌入,較小範圍會導致一個更小的代碼庫,隨著時間的推移,其更容器維護以及匹配Kubernetes的需求,如下圖所示:

綜上所述,從技術的角度來看,Containerd是Kubernetes的容器進行時比較好的選擇。

Cri-Containerd

Cri-Containerd是對於容器的一個實現,它在與Kubelet和 Containerd相同的節點上運行,在Kuberntes和Containerd之間的分層中,Cri-Containerd處理來自Kubelet的所有國際服務請求,並使用Containerd管理容器和容器鏡像,Cri-Containerd管理這些服務請求,在一定程度上是通過形成Containerd服務請求,同時添加足夠的附加功能來去支持CRI需求。

與當前的Docker CRI實現(Dockershim)相比,Cri-Containerd消除了棧中的額外跳轉,使堆棧更加穩定和高效。

體系結構

可以通過下面這個例子來演示當Kubele創建一個單一容器的時候,如何使用Cri-Containerd。

  • Kubelet通過國際運行時服務API調用了Cri-Containerd,用以創建一個Pod;
  • Cri-Containerd使用Containerd創建和啟動一個特殊的暫停容器(沙箱容器),並將該容器放在Pod的Cgroups和名稱空間中;
  • Containerd使用CNI配置了Pod的網路名稱空間;
  • Kubelet隨後通過國際服務API調用了「容器」,以拉出應用程序的容器的鏡像;
  • 如果鏡像不存在於節點,則Cri-Containerd將進一步使用Containerd來拉出鏡像;
  • 然後,Kubelet通過「CRI」服務API調了「Cri-Containerd」通過拉取容器的鏡像來創建和啟動應用程序容器;
  • Cri-Containerd最終調用Containerd來創建應用程序容器,將其放入Pod的Cgroups和命名空間中,然後啟動該容器的新應用程序容器。

在這些步驟之後,將創建並運行一個Pod及其相應的應用程序容器。

現階段狀態

Cri-Containerd V1.0.0-alpha.0是在2017年9月25日發布的。

其功能完備,所有的Kubernetes的特性都得到了支持。

所有的CRI validation test(CRI validation test是一種測試框架,用於驗證是否符合Kubernetes的所有要求。地址:https://github.com/kubernetes/community/blob/master/contributors/devel/cri-validation.md)

所有的 Node e2e Test都已通過(用於測試Kubernetes節點級功能的測試框架如Managing Pods、Mounting Volumes等,地址:https://github.com/kubernetes/community/blob/master/contributors/devel/e2e-node-tests.md)。

若想了解更多關於V1.0-Alpha的相關內容,請前往:github.com/kubernetes-i

延伸閱讀

對於一個多節點集群安裝程序,並使用能應用和Kubeadm啟動步驟請參見:github.com/kubernetes-i

若想在Google雲端從頭創建一個集群,請參見:github.com/kelseyhighto

對於一個自發布Tarball的自定義安裝,請參見:github.com/kubernetes-i

對於在本地VM上安裝LinuxKit,請參見:github.com/linuxkit/lin

下一階段

Containerd承諾,在下一階段將主要改進穩定性和可用性方面的問題:

穩定性:

在Kubernetes的測試基礎設施上建立一套完整的Kubernetes集成測試,包括Ubuntu、COS(容器化的OS 地址:https://cloud.google.com/container-optimized-os/docs/)等等。

積極解決用戶報告的任何測試失敗和其他問題。

可用性:

提高Crictl(https://github.com/kubernetes-incubator/cri-tools/blob/master/docs/crictl.md)的用戶體驗,Crictl是所有的CRI容器運行時的可移植命令行工具,這裡的目標是使其易於用於調試和開發場景。

集成Kube-up.sh(https://kubernetes.io/docs/getting-started-guides/gce/)幫助用戶使用Cri-Containerd來提高Kubernetes集群的生產質量。

改進文檔。

預計在2017年底發布V1.0-Beta。

提供建議

Cri-Containerd是一個Kubernetes的孵化器項目,地址:ttps://github.com/kubernetes-i。歡迎提供任何具有建設性的意見和建議,具體的使用入門指南請參見:github.com/kubernetes-i

社區

Cri-Containerd是由Kubernetes Signode社區開發和維護的,如有相關的建議,可以加入社區:

Sig-Node社區網站:github.com/kubernetes/c

Slack:Kubernetes(kubernet.slack.com)的sig-節點通道:kubernetes.slack.com/

原文作者:Kubernetes 原文鏈接:blog.kubernetes.io/2017


推薦閱讀:

容器編排之Kubernetes安裝與配置
基於 Docker for MAC 的 Kubernetes 本地環境搭建與應用部署
PPT收藏|KubeCon北美峰會幹貨直播培訓課
[資料分享]kubernetes實踐指南
Kubernetes v1.7新特性解析-CustomResourceDefinition

TAG:Docker | Kubernetes |