全部產品
Search
文件中心

Container Service for Kubernetes:Docker、containerd、安全沙箱運行時的對比

更新時間:Dec 19, 2024

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

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

特性

containerd運行時

安全沙箱運行時

Docker運行時(已停止維護)

叢集類型

  • ACK託管叢集

  • ACK專有叢集

  • ACK Edge叢集

  • ACK託管叢集

  • ACK專有叢集

所有叢集類型

叢集版本

1.31及以下版本

1.31及以下版本

1.22及以下版本

說明

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

節點型號

  • ECS

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

僅適用於ECS Bare Metal Instance執行個體規格

ECS

節點OS

Container Service for Kubernetes提供的ContainerOS、Alibaba Cloud Linux 3、Ubuntu、Windows等作業系統的公用鏡像。詳細資料請參見作業系統

Alibaba Cloud Linux定製版

  • Alibaba Cloud Linux

  • CentOS

容器引擎

containerd

containerd

Docker

監控

支援

支援

支援

容器記錄檔採集

支援

手動支援(Sidecar)

支援

容器標準輸出採集

支援

支援

支援

RuntimeClass

不支援

支援(runV)

不支援

Pod調度

無需配置

配置如下:

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

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

無需配置

HostNetwork

支援

不支援

支援

節點資料盤

可選

必選(不小於200 GiB)

可選

網路外掛程式

  • Flannel

  • Terway(ACK Edge叢集除外)

  • Flannel

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

  • Flannel

  • Terway

kube-proxy代理模式

  • iptables

  • IPVS

  • iptables

  • IPVS

  • iptables

  • IPVS

儲存外掛程式

CSI Plugin(ACK Edge叢集除外)

CSI Plugin

CSI Plugin

容器RootFS

OverlayFS

配置磁碟Quota的OverlayFS

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,各自具有獨特的命令列工具來管理鏡像和容器。兩種容器引擎常用命令對比如下。

命令

containerd

Docker

crictl(推薦)

ctr

docker

查看容器列表

crictl ps

ctr -n k8s.io c ls

docker ps

查看容器詳情

crictl inspect <container>

ctr -n k8s.io c info <container>

docker inspect <container>

查看容器日誌

crictl logs <container>

N/A

docker logs <container>

容器內執行命令

crictl exec <container>

N/A

docker exec <container>

掛載容器

crictl attach <container>

N/A

docker attach <container>

顯示容器資源使用方式

crictl stats <container>

N/A

docker stats <container>

建立容器

crictl create <container>

ctr -n k8s.io c create <container>

docker create <container>

啟動容器

crictl start <container>

ctr -n k8s.io run <container>

docker start <container>

停止容器

crictl stop <container>

N/A

docker stop <container>

刪除容器

crictl rm <container>

ctr -n k8s.io c del <container>

docker rm <container>

查看鏡像列表

crictl images

ctr -n k8s.io i ls <image>

docker images

查看鏡像詳情

crictl inspecti <image>

N/A

docker inspect <image>

拉取鏡像

crictl pull <image>

ctr -n k8s.io i pull <image>

docker pull <image>

推送鏡像

N/A

ctr -n k8s.io i push <image>

docker push <image>

刪除鏡像

crictl rmi <image>

ctr -n k8s.io i rm <image>

docker rmi <image>

查看Pod列表

crictl pods

N/A

N/A

查看Pod詳情

crictl inspectp <pod name>

N/A

N/A

啟動Pod

crictl runp <pod name>

N/A

N/A

停止Pod

crictl stopp <pod name>

N/A

N/A