镜像和容器已然成为应用的打包和交付标准。Kubernetes成为了整个容器云原生应用的标准OS,越来越多的企业和用户选择在ACK中部署自己的应用。容器服务Kubernetes版(ACK)支持Containerd、Docker、安全沙箱三种运行时。本文通过对比三种运行时的实现和使用限制、部署结构,并通过对比Docker和Containerd两种容器引擎常用命令,帮助您根据需求场景选择合适的容器运行时。

容器运行时实现和使用限制的对比

特性Containerd运行时Docker运行时安全沙箱运行时说明
集群类型支持托管版、专有版和边缘托管版支持所有类型支持托管版和专有版
节点型号支持:
  • 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:仅支持非独占弹性网卡模式。
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。这两种容器引擎都有各自的命令工具来管理镜像和容器。两种容器引擎常用命令对比如下。

命令DockerContainerd
dockercrictl(推荐)ctr
查看容器列表docker pscrictl psctr -n k8s.io c ls
查看容器详情docker inspectcrictl inspectctr -n k8s.io c info
查看容器日志docker logscrictl logs
容器内执行命令docker execcrictl exec
挂载容器docker attachcrictl attach
显示容器资源使用情况docker statscrictl stats
创建容器docker createcrictl createctr -n k8s.io c create
启动容器docker startcrictl startctr -n k8s.io run
停止容器docker stopcrictl stop
删除容器docker rmcrictl rmctr -n k8s.io c del
查看镜像列表docker imagescrictl imagesctr -n k8s.io i ls
查看镜像详情docker inspectcrictl inspecti
拉取镜像docker pullcrictl pullctr -n k8s.io i pull
推送镜像docker pushctr -n k8s.io i push
删除镜像docker rmicrictl rmictr -n k8s.io i rm
查看Pod列表crictl pods
查看Pod详情crictl inspectp
启动Podcrictl runp
停止Podcrictl stop