聯系
容器運行時(Container Runtime)是Kubernetes(k8s)最重要的組件之一,負責管理鏡像和容器的生命周期。Kubelet通過Container Runtime Interface (CRI) 與容器運行時交互,以管理鏡像和容器。
Containerd調用鏈更短,組件更少,更穩定,占用節點資源更少。 建議選擇containerd。
當您遇到以下情況時,請選擇docker作為運行時組件:
- 如需使用docker in docker。
- 如需在CCE節點使用docker build/push/save/load等命令。
- 如需調用docker API。
- 如需docker compose或docker swarm。
Containerd創建並啟動的容器會被kubelet立即刪除,不支持暫停、恢復、重啟、重命名、等待容器,Containerd不具備docker構建、導入、導出、比較、推送、查找、打標簽鏡像的能力,Containerd不支持拷貝文件,可通過修改containerd的配置文件實現登錄鏡像倉庫。
Containerd和Docker組件常用命令
Containerd不支持dockerAPI和dockerCLI,但是可以通過cri-tool命令實現類似的功能。
鏡像相關功能
容器相關功能
POD相關功能
調用鏈區別
Docker作為k8s容器運行時,調用關系如下:
kubelet --> docker shim (在 kubelet 進程中) --> dockerd --> containerd
Containerd作為k8s容器運行時,調用關系如下:
kubelet --> cri plugin(在 containerd 進程中) --> containerd
其中dockerd雖增加了swarm cluster、docker build、docker API等功能,但也會引入一些bug,而與containerd相比,多了一層調用。