全部產品
Search
文件中心

Container Service for Kubernetes:如何選擇Docker運行時、Containerd運行時、或者安全沙箱運行時?

更新時間:Jun 19, 2024

鏡像和容器已然成為應用的打包和交付標準。Kubernetes成為了整個容器雲原生應用的標準OS,越來越多的企業和使用者選擇在ACK中部署自己的應用。Container ServiceKubernetes版(ACK)支援Containerd、Docker、安全沙箱三種運行時。本文通過對比三種運行時的實現和使用限制、部署結構,並通過對比Docker和Containerd兩種容器引擎常用命令,協助您根據需求情境選擇合適的容器運行時。

容器運行時實現和使用限制的對比

特性

Containerd運行時

Docker運行時

安全沙箱運行時

說明

叢集類型

支援託管版、專有版和邊緣託管版

支援所有類型

支援託管版和專有版

叢集版本

支援所有叢集版本

支援1.22版本及以下

說明

建議您升級Docker運行時為Containerd運行時。詳細資料,請參見將節點容器運行時從Docker遷移到containerd

支援1.24版本及以下

節點型號

支援:

  • ECS

  • EBM

  • 使用者自有節點(邊緣託管版)

支援:

  • ECS

  • EBM

支援:

EBM

節點OS

支援:

  • CentOS

  • Alibaba Cloud Linux

  • ACK v1.20.4版本的Windows

  • Ubuntu、CentOS(邊緣託管版)

支援:

  • CentOS

  • Alibaba Cloud Linux

  • Windows

支援:

Alibaba Cloud Linux定製版

  • 不支援同一節點同時部署Docker和安全沙箱兩種運行時。

  • 叢集內可以通過建立不同節點池來實現Docker運行時節點和安全沙箱運行時節點混合部署。

容器引擎

支援Containerd

支援Docker

支援Containerd

監控

支援

支援

支援

容器記錄檔採集

支援

支援

手動支援(Sidecar)

有關Sidecar配置,請參見通過Sidecar-CRD方式採集容器文本日誌

容器標準輸出採集

支援

支援

支援

RuntimeClass

不支援

不支援

支援(runV)

Pod調度

無需配置

無需配置

配置如下:

  • Kubernetes v1.14.x版本必須為nodeSelector增加以下配置。

    alibabacloud.com/sandboxed-container: Sandboxed-Container.runv
  • Kubernetes v1.16.x以及更高版本不需要任何配置。

HostNetwork

支援

支援

不支援

exec/logs

支援

支援

支援

節點資料盤

可選

可選

必選(不小於200 GiB)

網路外掛程式

支援:

  • flannel

  • terway(邊緣託管版除外)

支援:

  • flannel

  • terway

支援:

  • flannel

  • terway-eniip:僅支援非IPvlan且非獨佔彈性網卡模式的terway-eniip。

kube-proxy代理模式

支援:

  • iptables

  • IPVS

支援:

  • iptables

  • IPVS

支援:

  • iptables

  • IPVS

儲存外掛程式

支援CSI Plugin(邊緣託管版除外)

支援CSI Plugin

支援CSI Plugin

容器RootFS

支援OverlayFS

支援OverlayFS

支援配置磁碟Quota的OverlayFS

運行時部署結構對比

運行時

部署結構

Docker

kubelet -> dockerd -> containerd -> containerd-shim -> runC容器

Containerd

kubelet ->containerd->containerd-shim->runC容器

安全沙箱v2

kubelet->(CRI)containerd
\->containerd-shim->runC容器
\->containerd-shim-rund-v2-> runV安全沙箱容器

Docker和Containerd兩種容器引擎常用命令對比

Docker運行時和安全沙箱運行時的容器引擎分別是Docker和Containerd。這兩種容器引擎都有各自的命令工具來管理鏡像和容器。兩種容器引擎常用命令對比如下。

命令

Docker

Containerd

docker

crictl(推薦)

ctr

查看容器列表

docker ps

crictl ps

ctr -n k8s.io c ls

查看容器詳情

docker inspect

crictl inspect

ctr -n k8s.io c info

查看容器日誌

docker logs

crictl logs

容器內執行命令

docker exec

crictl exec

掛載容器

docker attach

crictl attach

顯示容器資源使用方式

docker stats

crictl stats

建立容器

docker create

crictl create

ctr -n k8s.io c create

啟動容器

docker start

crictl start

ctr -n k8s.io run

停止容器

docker stop

crictl stop

刪除容器

docker rm

crictl rm

ctr -n k8s.io c del

查看鏡像列表

docker images

crictl images

ctr -n k8s.io i ls

查看鏡像詳情

docker inspect

crictl inspecti

拉取鏡像

docker pull

crictl pull

ctr -n k8s.io i pull

推送鏡像

docker push

ctr -n k8s.io i push

刪除鏡像

docker rmi

crictl rmi

ctr -n k8s.io i rm

查看Pod列表

crictl pods

查看Pod詳情

crictl inspectp

啟動Pod

crictl runp

停止Pod

crictl stop