# 容器运行时说明
#### 容器运行时介绍
容器运行时是Kubernetes最重要的组件之一，负责管理镜像和容器的生命周期。Kubelet通过Container Runtime Interface (CRI) 与容器运行时交互，以管理镜像和容器。
CCE支持用户选择Containerd(1.23及以上版本集群支持)和Docker容器运行时，**其中Containerd调用链更短，组件更少，更稳定，占用节点资源更少**。
Kubernetes社区已在v1.24版本移除dockershim，默认不再支持Docker容器运行时。为保持与社区技术路线同步，并提升集群运行的稳定性与资源效率，CCE对容器运行时的支持策略作出如下调整：
- 新建CCE集群：Kubernetes v1.34及以上版本，不再支持选择Docker作为容器运行时。
- 现有CCE集群：升级至Kubernetes v1.34及以上版本后Docker可正常运行，但新建节点或节点池推荐使用Containerd；升级至v1.35前必须完成Docker到Containerd的切换，v1.35及以上版本不再支持Docker作为容器运行时。
强烈建议您在新建节点时选择更加轻量、安全的Containerd容器运行时，同时将存量节点的容器运行时逐步迁移至Containerd，详情请参见[将节点容器运行时从Docker迁移到Containerd](https://support.huaweicloud.com/usermanual-cce/cce_10_0601.html)。
表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/内存占用      | 低                                                       | 高                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   
 #### 节点操作系统与容器运行时对应关系
![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
v1.23及以上的VPC网络集群都支持Containerd，容器隧道网络集群从v1.23.2-r0开始支持Containerd。
表2CCE集群节点操作系统与容器运行时对应关系 
| 操作系统                       | 内核版本   | 上层容器运行时                                                  | 下层容器运行时 | 容器存储Rootfs                                                                            |
|:---|:---|:---|:---|:---|
| CentOS 7.6                  | 3.x  | Docker 1.23起支持Containerd  | runC     | 1.19.16以下版本集群使用Device Mapper 1.19.16及以上版本集群使用OverlayFS |
| EulerOS 2.3                  | 3.x     | Docker                                                  | runC   | Device Mapper                                                                         |
| EulerOS 2.5               | 3.x     | Docker                                                  | runC   | Device Mapper                                                                       |
| EulerOS 2.9              | 4.x    | Docker 1.23起支持Containerd    | runC    | OverlayFS                                                                               |
| Ubuntu 18.04                | 4.x    | Docker 1.23起支持Containerd | runC    | OverlayFS                                                                              |
| Ubuntu 22.04             | 5.x  | Docker 1.23起支持Containerd | runC    | OverlayFS                                                                            |
| Ubuntu 22.04.cgroup2        | 5.x    | Containerd                                             | runC     | OverlayFS                                                                              |
| Huawei Cloud EulerOS 1.1 | 3.x  | Docker Containerd         | runC    | OverlayFS                                                                          |
| Huawei Cloud EulerOS 2.0   | 5.x | Docker Containerd       | runC   | OverlayFS                                                                            |
   
表3CCE Turbo集群节点操作系统与容器运行时对应关系 
| 节点类型         | 操作系统                       | 内核版本  | 上层容器运行时                                     | 下层容器运行时                                 | 容器存储Rootfs |
|:---|:---|:---|:---|:---|:---|
| 弹性云服务器-虚拟机 | CentOS 7.6                | 3.x   | Docker Containerd | runC                                    | OverlayFS    |
| 弹性云服务器-虚拟机 | Ubuntu 18.04              | 4.x | Docker Containerd | runC                                    | OverlayFS    |
| 弹性云服务器-虚拟机 | Ubuntu 22.04             | 5.x  | Docker Containerd | runC                                    | OverlayFS    |
| 弹性云服务器-虚拟机 | EulerOS 2.9                | 4.x    | Docker Containerd | runC                                    | OverlayFS    |
| 弹性云服务器-虚拟机 | Huawei Cloud EulerOS 1.1   | 3.x    | Docker Containerd | runC                                    | OverlayFS    |
| 弹性云服务器-虚拟机 | Huawei Cloud EulerOS 2.0 | 5.x  | Docker Containerd | runC                                    | OverlayFS    |
| 弹性云服务器-虚拟机 | Ubuntu 22.04.cgroup2     | 5.x  | Containerd                                  | runC                                   | OverlayFS |
| 弹性云服务器-物理机 | EulerOS 2.10             | 4.x   | Containerd                                   | Kata runC | Device Mapper  |
   
表4鲲鹏节点操作系统与容器运行时对应关系 
| 操作系统                      | 内核版本 | 上层容器运行时                                           | 下层容器运行时 | 容器存储Rootfs   |
|:---|:---|:---|:---|:---|
| Huawei Cloud EulerOS 2.0 | 5.x | Docker Containerd | runC   | OverlayFS  |
| EulerOS 2.9              | 4.x  | Docker Containerd  | runC      | OverlayFS |
| EulerOS 2.8               | 4.x  | Docker                                           | runC    | OverlayFS  |
   
#### 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 inspect | 无                     |
   
表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   | 无                    |
   
表7Pod相关功能 
| 操作     | Docker命令 | Containerd命令                                         ||
| 操作     | docker  | crictl           | ctr |
|:---|:---|:---|:---|
| 列出Pod列表 | 无       | crictl pods       | 无   |
| 查看Pod详情  | 无      | crictl inspectp | 无    |
| 启动Pod  | 无     | crictl start     | 无  |
| 运行Pod  | 无       | crictl runp       | 无    |
| 停止Pod | 无      | crictl stopp      | 无   |
| 删除Pod | 无      | crictl rmp        | 无   |
   
![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
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** **被认为更加节省资源且更安全**。
#### 容器运行时版本说明
![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
[表8]中仅列出最新集群版本中各操作系统对应的容器运行时版本。历史集群版本请登录节点通过以下命令查询容器运行时版本：
- docker版本号检查命令：
  ```
  # Huawei Cloud EulerOS、EulerOS、CentOS系统
  rpm -q docker-engine
  # Ubuntu系统
  dpkg -s docker-ce
  ```
  
- containerd版本号检查命令：
  ```
  # Huawei Cloud EulerOS、EulerOS、CentOS系统
  rpm -q containerd
  # Ubuntu系统 
  dpkg -s containerd
  ```
  
 
 表8各操作系统对应的最新容器运行时版本 
| 集群版本         | 架构   | 操作系统                     | 最新Docker版本                                                                                                                               | 最新containerd版本                                       |
|:---|:---|:---|:---|:---|
| v1.36         | x86      | Huawei Cloud EulerOS 2.0    | -                                                                                                                                        | containerd-2.2.1-26.04.130941168.gitb72de14b.x86_64     |
| v1.36         | x86      | Ubuntu 22.04                | -                                                                                                                                        | 2.2.1-26.04.130941156.gitb72de14b                     |
| v1.36         | x86      | Ubuntu 22.04.cgroup2         | -                                                                                                                                        | 2.2.1-26.04.130941156.gitb72de14b                     |
| v1.36         | arm    | Huawei Cloud EulerOS 2.0  | -                                                                                                                                        | containerd-2.2.1-26.04.130941168.gitb72de14b.aarch64  |
| v1.35       | x86   | Huawei Cloud EulerOS 2.0   | -                                                                                                                                      | containerd-2.2.1-26.03.129169267.git9985da87.x86_64    |
| v1.35       | x86   | Ubuntu 22.04              | -                                                                                                                                      | containerd-2.2.1-26.03.129169267.git9985da87.x86_64    |
| v1.35       | x86   | Ubuntu 22.04.cgroup2      | -                                                                                                                                      | containerd-2.2.1-26.03.129169267.git9985da87.x86_64    |
| v1.35       | arm   | Huawei Cloud EulerOS 2.0   | -                                                                                                                                      | containerd-2.2.1-26.03.129169267.git9985da87.aarch64    |
| v1.34         | x86     | Huawei Cloud EulerOS 2.0     | 新建Kubernetes 1.34及以上版本的集群不支持Docker，详情请参见[华为云CCE集群容器运行时Docker支持策略变化通知](https://support.huaweicloud.com/bulletin-cce/cce_bulletin_0107.html) | containerd-1.7.29-25.11.121763183.git9859417d.x86_64   |
| v1.34         | x86     | EulerOS 2.9                | 新建Kubernetes 1.34及以上版本的集群不支持Docker，详情请参见[华为云CCE集群容器运行时Docker支持策略变化通知](https://support.huaweicloud.com/bulletin-cce/cce_bulletin_0107.html) | containerd-1.7.29-25.11.121763183.git9859417d.x86_64   |
| v1.34         | x86     | Huawei Cloud EulerOS 1.1 | 新建Kubernetes 1.34及以上版本的集群不支持Docker，详情请参见[华为云CCE集群容器运行时Docker支持策略变化通知](https://support.huaweicloud.com/bulletin-cce/cce_bulletin_0107.html) | containerd-1.7.29-25.11.121763183.git9859417d.x86_64   |
| v1.34         | x86     | CentOS 7.6               | 新建Kubernetes 1.34及以上版本的集群不支持Docker，详情请参见[华为云CCE集群容器运行时Docker支持策略变化通知](https://support.huaweicloud.com/bulletin-cce/cce_bulletin_0107.html) | containerd-1.7.29-25.11.121763183.git9859417d.x86_64   |
| v1.34         | x86     | Ubuntu 22.04               | 新建Kubernetes 1.34及以上版本的集群不支持Docker，详情请参见[华为云CCE集群容器运行时Docker支持策略变化通知](https://support.huaweicloud.com/bulletin-cce/cce_bulletin_0107.html) | 1.7.29-25.11.121763188.git9859417d                     |
| v1.34         | arm    | Huawei Cloud EulerOS 2.0    | 新建Kubernetes 1.34及以上版本的集群不支持Docker，详情请参见[华为云CCE集群容器运行时Docker支持策略变化通知](https://support.huaweicloud.com/bulletin-cce/cce_bulletin_0107.html) | containerd-1.7.29-25.11.121763183.git9859417d.aarch64  |
| v1.34         | arm    | EulerOS 2.9                | 新建Kubernetes 1.34及以上版本的集群不支持Docker，详情请参见[华为云CCE集群容器运行时Docker支持策略变化通知](https://support.huaweicloud.com/bulletin-cce/cce_bulletin_0107.html) | containerd-1.7.29-25.11.121763183.git9859417d.aarch64  |
| v1.28-v1.33 | x86  | Huawei Cloud EulerOS 2.0 | docker-engine-18.09.0-311.r62.48.46.hce2.x86_64                                                                                         | containerd-1.7.29-25.11.121763183.git9859417d.x86_64 |
| v1.28-v1.33 | x86  | EulerOS 2.9               | docker-engine-18.09.0.129-1.h94.43.29.eulerosv2r9.x86_64                                                                                   | containerd-1.7.29-25.11.121763183.git9859417d.x86_64 |
| v1.28-v1.33 | x86  | Huawei Cloud EulerOS 1.1 | docker-engine-18.09.0.101-1.h70.28.24.eulerosv2r7.x86_64                                                                                  | containerd-1.7.29-25.11.121763183.git9859417d.x86_64 |
| v1.28-v1.33 | x86  | CentOS 7.6                 | docker-engine-18.09.0.101-1.h70.28.24.eulerosv2r7.x86_64                                                                                 | containerd-1.7.29-25.11.121763183.git9859417d.x86_64 |
| v1.28-v1.33 | x86  | Ubuntu 22.04                | 27.5.1-25.11.121586247.git4c9b3b011a                                                                                                      | 1.7.29-25.11.121763188.git9859417d                   |
| v1.28-v1.33 | arm   | Huawei Cloud EulerOS 2.0 | docker-engine-18.09.0-311.r62.48.46.hce2.aarch64                                                                                         | containerd-1.7.29-25.11.121763183.git9859417d.aarch64  |
| v1.28-v1.33 | arm   | EulerOS 2.9              | docker-engine-18.09.0.129-1.h94.43.29.eulerosv2r9.aarch64                                                                                   | containerd-1.7.29-25.11.121763183.git9859417d.aarch64  |
| v1.27          | x86  | Huawei Cloud EulerOS 2.0   | docker-engine-18.09.0-311.r50.46.43.hce2.x86_64                                                                                         | containerd-1.6.14-25.08.114880342.gita270719c.x86_64   |
| v1.27          | x86  | EulerOS 2.9              | docker-engine-18.09.0.129-1.h91.43.27.eulerosv2r9.x86_64                                                                                  | containerd-1.6.14-25.08.114880342.gita270719c.x86_64   |
| v1.27          | x86  | Huawei Cloud EulerOS 1.1   | docker-engine-18.09.0.101-1.h70.28.24.eulerosv2r7.x86_64                                                                                | containerd-1.6.14-25.08.114880342.gita270719c.x86_64   |
| v1.27          | x86  | CentOS 7.6                 | docker-engine-18.09.0.101-1.h70.28.24.eulerosv2r7.x86_64                                                                                 | containerd-1.6.14-25.08.114880342.gita270719c.x86_64   |
| v1.27          | x86  | Ubuntu 22.04              | 27.5.1-25.05.108320057.git4c9b3b011a                                                                                                       | 1.6.14-25.05.109434323.gite7077850                    |
| v1.27          | arm | Huawei Cloud EulerOS 2.0   | docker-engine-18.09.0-311.r50.46.43.hce2.aarch64                                                                                          | containerd-1.6.14-25.08.114880342.gita270719c.aarch64 |
| v1.27          | arm | EulerOS 2.9               | docker-engine-18.09.0.129-1.h91.43.27.eulerosv2r9.aarch64                                                                                  | containerd-1.6.14-25.08.114880342.gita270719c.aarch64 |
| v1.25        | x86    | Huawei Cloud EulerOS 2.0  | docker-engine-18.09.0-311.r50.46.43.hce2.x86_64                                                                                            | containerd-1.6.14-25.08.114880342.gita270719c.x86_64   |
| v1.25        | x86    | EulerOS 2.9               | docker-engine-18.09.0.129-1.h91.43.27.eulerosv2r9.x86_64                                                                                | containerd-1.6.14-25.08.114880342.gita270719c.x86_64   |
| v1.25        | x86    | Huawei Cloud EulerOS 1.1    | docker-engine-18.09.0.101-1.h70.28.24.eulerosv2r7.x86_64                                                                                 | containerd-1.6.14-25.08.114880342.gita270719c.x86_64   |
| v1.25        | x86    | CentOS 7.6                 | docker-engine-18.09.0.101-1.h70.28.24.eulerosv2r7.x86_64                                                                                  | containerd-1.6.14-25.08.114880342.gita270719c.x86_64   |
| v1.25        | x86    | Ubuntu 22.04               | 27.5.1-25.05.108320057.git4c9b3b011a                                                                                                      | 1.6.14-25.05.109434323.gite7077850                    |
| v1.25        | x86    | Ubuntu 18.04              | 5:18.09.9\~3-0\~ubuntu-bionic                                                                                                            | 1.6.14-25.05.109434323.gite7077850                    |
| v1.25        | arm    | Huawei Cloud EulerOS 2.0 | docker-engine-18.09.0-311.r50.46.43.hce2.aarch64                                                                                           | containerd-1.6.14-25.08.114880342.gita270719c.aarch64 |
| v1.25        | arm    | EulerOS 2.9                | docker-engine-18.09.0.129-1.h91.43.27.eulerosv2r9.aarch64                                                                                 | containerd-1.6.14-25.08.114880342.gita270719c.aarch64 |
| v1.25        | arm    | EulerOS 2.8                | docker-engine-18.09.0.101-1.h69.28.24.eulerosv2r8.aarch64                                                                                   | containerd-1.6.14-25.08.114880342.gita270719c.aarch64 |
   
