全部產品
Search
文件中心

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

更新時間:Nov 22, 2024

Container Service for Kubernetes (ACK)支援containerd、Docker、安全沙箱三種運行時。本文通過對比三種運行時的實現和使用限制、部署結構,協助您根據需求情境選擇合適的容器運行時。

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

特性

containerd運行時

Docker運行時

安全沙箱運行時

叢集類型

  • ACK託管叢集

  • ACK專有叢集

  • ACK Edge叢集

所有叢集類型

  • ACK託管叢集

  • ACK專有叢集

叢集版本

1.31及以下版本

1.22及以下版本

說明

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

1.31及以下版本

節點型號

  • ECS

  • EBM

  • 使用者自有節點(ACK Edge叢集

  • ECS

  • EBM

EBM

節點OS

  • CentOS

  • Alibaba Cloud Linux

  • ACK 1.20.4版本及以上的Windows

  • Ubuntu(ACK Edge叢集

  • CentOS

  • Alibaba Cloud Linux

Alibaba Cloud Linux定製版

容器引擎

containerd

Docker

containerd

監控

支援

支援

支援

容器記錄檔採集

支援

支援

手動支援(Sidecar)

容器標準輸出採集

支援

支援

支援

RuntimeClass

不支援

不支援

支援(runV)

Pod調度

無需配置

無需配置

配置如下:

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

    alibabacloud.com/sandboxed-container: Sandboxed-Container.runv
  • Kubernetes 1.16.x以及更高版本無需額外配置。

HostNetwork

支援

支援

不支援

exec/logs

支援

支援

支援

節點資料盤

可選

可選

必選(不小於200 GiB)

網路外掛程式

  • Flannel

  • Terway(ACK Edge叢集除外)

  • Flannel

  • Terway

  • Flannel

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

kube-proxy代理模式

  • iptables

  • IPVS

  • iptables

  • IPVS

  • iptables

  • IPVS

儲存外掛程式

CSI Plugin(ACK Edge叢集除外)

CSI Plugin

CSI Plugin

容器RootFS

OverlayFS

OverlayFS

配置磁碟Quota的OverlayFS

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

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

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

運行時部署結構對比

運行時

部署結構

Docker

kubelet
└── dockerd
    └── containerd
        └── containerd-shim
            └── runC容器

containerd

kubelet
└── containerd
    └── containerd-shim
        └── runC容器

安全沙箱v2

kubelet
├── (CRI) containerd
│   ├── containerd-shim
│   │   └── runC 容器
│   └── containerd-shim-runv2
│       └── runV 安全沙箱容器

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

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

命令

Docker

containerd

docker

crictl(推薦)

ctr

查看容器列表

docker ps

crictl ps

ctr -n k8s.io c ls

查看容器詳情

docker inspect <container>

crictl inspect <container>

ctr -n k8s.io c info <container>

查看容器日誌

docker logs <container>

crictl logs <container>

N/A

容器內執行命令

docker exec <container>

crictl exec <container>

N/A

掛載容器

docker attach <container>

crictl attach <container>

N/A

顯示容器資源使用方式

docker stats <container>

crictl stats <container>

N/A

建立容器

docker create <container>

crictl create <container>

ctr -n k8s.io c create <container>

啟動容器

docker start <container>

crictl start <container>

ctr -n k8s.io run <container>

停止容器

docker stop <container>

crictl stop <container>

N/A

刪除容器

docker rm <container>

crictl rm <container>

ctr -n k8s.io c del <container>

查看鏡像列表

docker images

crictl images

ctr -n k8s.io i ls <image>

查看鏡像詳情

docker inspect <image>

crictl inspecti <image>

N/A

拉取鏡像

docker pull <image>

crictl pull <image>

ctr -n k8s.io i pull <image>

推送鏡像

docker push <image>

N/A

ctr -n k8s.io i push <image>

刪除鏡像

docker rmi <image>

crictl rmi <image>

ctr -n k8s.io i rm <image>

查看Pod列表

N/A

crictl pods

N/A

查看Pod詳情

N/A

crictl inspectp <pod name>

N/A

啟動Pod

N/A

crictl runp <pod name>

N/A

停止Pod

N/A

crictl stopp <pod name>

N/A