更新时间:2024-09-24 GMT+08:00
分享

容器引擎说明

容器引擎介绍

容器引擎是Kubernetes最重要的组件之一,负责管理镜像和容器的生命周期。Kubelet通过Container Runtime Interface (CRI) 与容器引擎交互,以管理镜像和容器。

CCE当前支持用户选择Containerd和Docker容器引擎,其中Containerd调用链更短,组件更少,更稳定,占用节点资源更少

Kubernetes在v1.24版本中移除了Dockershim,并从此不再默认支持Docker容器引擎,详情请参见Kubernetes即将移除Dockershim。CCE计划未来移除对Docker容器引擎的支持,建议您将节点容器引擎从Docker迁移至Containerd,详情请参见将节点容器引擎从Docker迁移到Containerd

表1 容器引擎对比

对比

Containerd

Docker

调用链

kubelet --> CRI plugin(在containerd进程中) --> containerd

  • Docker(Kubernetes 1.23及以下版本):

    kubelet --> dockershim (在kubelet 进程中) --> docker --> containerd

  • Docker(Kubernetes 1.24及以上版本社区方案):

    kubelet --> cri-dockerd (kubelet使用CRI接口对接cri-dockerd) --> docker --> containerd

命令

crictl/ctr

docker

Kubernetes CRI支持

原生支持

需通过dockershim或cri-dockerd提供CRI支持

Pod 启动延迟

kubelet CPU/内存占用

运行时CPU/内存占用

节点操作系统与容器引擎对应关系

v1.23及以上的VPC网络集群都支持Containerd,容器隧道网络集群从v1.23.2-r0开始支持Containerd。

表2 CCE集群节点操作系统与容器引擎对应关系

操作系统

内核版本

容器引擎

容器存储Rootfs

容器运行时

CentOS 7.6

3.x

Docker

1.23起支持Containerd

1.19.16以下版本集群使用Device Mapper

1.19.16及以上版本集群使用OverlayFS

runC

EulerOS 2.3

3.x

Docker

Device Mapper

runC

EulerOS 2.5

3.x

Docker

Device Mapper

runC

EulerOS 2.9

4.x

Docker

1.23起支持Containerd

OverlayFS

runC

Ubuntu 18.04

4.x

Docker

1.23起支持Containerd

OverlayFS

runC

Ubuntu 22.04

4.x

Docker

1.23起支持Containerd

OverlayFS

runC

Huawei Cloud EulerOS 1.1

3.x

Docker

Containerd

OverlayFS

runC

Huawei Cloud EulerOS 2.0

5.x

Docker

Containerd

OverlayFS

runC

表3 CCE Turbo集群节点操作系统与容器引擎对应关系

节点类型

操作系统

内核版本

容器引擎

容器存储Rootfs

容器运行时

弹性云服务器-虚拟机

CentOS 7.6

3.x

Docker

Containerd

OverlayFS

runC

Ubuntu 18.04

4.x

EulerOS 2.9

4.x

Huawei Cloud EulerOS 1.1

3.x

Huawei Cloud EulerOS 2.0

5.x

弹性云服务器-物理机

EulerOS 2.9

4.x

Containerd

Device Mapper

Kata

表4 鲲鹏节点操作系统与容器引擎对应关系

操作系统

内核版本

容器引擎

容器存储Rootfs

容器运行时

Huawei Cloud EulerOS 2.0

5.x

Docker

Containerd

OverlayFS

runC

EulerOS 2.9

4.x

Docker

Containerd

OverlayFS

runC

EulerOS 2.8

4.x

Docker

OverlayFS

runC

Containerd和Docker组件常用命令对比

Containerd不支持dockerAPI和dockerCLI,但是可以通过cri-tool命令实现类似的功能。

表5 镜像相关功能

操作

Docker命令

Containerd命令

docker

crictl

ctr

列出本地镜像列表

docker images

crictl images

ctr -n k8s.io i ls

拉取镜像

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

检查镜像

docker inspect

crictl inspecti

表6 容器相关功能

操作

Docker命令

Containerd命令

docker

crictl

ctr

列出容器列表

docker ps

crictl ps

ctr -n k8s.io c ls

创建容器

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 attach

crictl attach

进入容器

docker exec

crictl exec

查看容器详情

docker inspect

crictl inspect

ctr -n k8s.io c info

查看容器日志

docker logs

crictl logs

查看容器的资源使用情况

docker stats

crictl stats

更新容器资源限制

docker update

crictl update

表7 Pod相关功能

操作

Docker命令

Containerd命令

docker

crictl

ctr

列出Pod列表

crictl pods

查看Pod详情

crictl inspectp

启动Pod

crictl start

运行Pod

crictl runp

停止Pod

crictl stopp

删除Pod

crictl rmp

Containerd创建并启动的容器会被kubelet立即删除,不支持暂停、恢复、重启、重命名、等待容器,Containerd不具备docker构建、导入、导出、比较、推送、查找、打标签镜像的能力,Containerd不支持复制文件,可通过修改containerd的配置文件实现登录镜像仓库。

调用链区别

  • Docker(Kubernetes 1.23及以下版本):

    kubelet --> docker shim (在kubelet 进程中) --> docker --> containerd

  • Docker(Kubernetes 1.24及以上版本社区方案):

    kubelet --> cri-dockerd (kubelet使用cri接口对接cri-dockerd) --> docker --> containerd

  • Containerd

    kubelet --> cri plugin(在containerd进程中) --> containerd

其中Docker虽增加了swarm cluster、docker build、docker API等功能,但也会引入一些bug,并且与Containerd相比,多了一层调用,因此Containerd被认为更加节省资源且更安全

容器引擎版本说明

  • Docker
    • EulerOS/CentOS:docker-engine 18.9.0,CCE定制的Docker版本,会及时修复安全漏洞。
    • Ubuntu:docker-ce: 24.0.9,开源社区版本。Ubuntu节点建议使用containerd引擎。

      Ubuntu下开源docker-ce在并发exec(如配置了多个exec探针时)可能触发社区bug,建议使用http/tcp的探针。

  • Containerd:1.6.14

    集群版本为v1.28.8-r0、v1.29.4-r0、v1.30.1-r0及以上时,Containerd版本升级至1.7.16。

相关文档