更新时间:2024-01-26 GMT+08:00

容器引擎

容器引擎介绍

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

CCE当前支持用户选择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

docker

Kubernetes CRI支持

原生支持

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

Pod 启动延迟

kubelet CPU/内存占用

运行时CPU/内存占用

Containerd和Docker组件常用命令对比

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

表2 镜像相关功能

序号

Docker命令

Containerd命令

备注

1

docker images [选项] [镜像名[:标签]]

crictl images [选项] [镜像名[:标签]]

列出本地镜像列表

2

docker pull [选项] 镜像名[:标签|@DIGEST]

crictl pull [选项] 镜像名[:标签|@DIGEST]

拉取镜像

3

docker push

上传镜像

4

docker rmi [选项] 镜像...

crictl rmi [选项] 镜像ID…

删除本地镜像

5

docker inspect 镜像ID

crictl inspecti 镜像ID

检查镜像

表3 容器相关功能

序号

Docker命令

Containerd命令

备注

1

docker ps [选项]

crictl ps [选项]

列出容器列表

2

docker create [选项]

crictl create [选项]

创建容器

3

docker start [选项] 容器ID...

crictl start [选项] 容器ID...

启动容器

4

docker stop [选项] 容器ID...

crictl stop [选项] 容器ID...

停止容器

5

docker rm [选项] 容器ID...

crictl rm [选项] 容器ID...

删除容器

6

docker attach [选项] 容器ID

crictl attach [选项] 容器ID

连接容器

7

docker exec [选项] 容器ID 启动命令 [参数...]

crictl exec [选项] 容器ID 启动命令[参数...]

进入容器

8

docker inspect [选项] 容器NAME|ID...

crictl inspect [选项] 容器ID...

查看容器详情

9

docker logs [选项] 容器ID

crictl logs [选项] 容器ID

查看容器日志

10

docker stats [选项] [容器ID...]

crictl stats [选项] [容器ID]

查看容器的资源使用情况

11

docker update [选项] 容器ID...

crictl update [选项] 容器ID...

更新容器资源限制

表4 Pod相关功能

序号

Docker命令

Containerd命令

备注

1

crictl pods [选项]

列出Pod列表

2

crictl inspectp [选项] POD-ID...

查看Pod详情

3

crictl start [选项] POD-ID...

启动Pod

4

crictl runp [选项] POD-ID...

运行Pod

5

crictl stopp [选项] POD-ID...

停止Pod

6

crictl rmp [选项] POD-ID...

删除Pod

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被认为更加节省资源且更安全