容器运行时说明
容器运行时介绍
容器运行时是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。
| 对比 | Containerd | Docker |
|---|---|---|
| 调用链 | kubelet --> CRI plugin(在containerd进程中) --> containerd | |
| 命令 | crictl/ctr | docker |
| Kubernetes CRI支持 | 原生支持 | 需通过dockershim或cri-dockerd提供CRI支持 |
| Pod 启动延迟 | 低 | 高 |
| kubelet CPU/内存占用 | 低 | 高 |
| 运行时CPU/内存占用 | 低 | 高 |
节点操作系统与容器运行时对应关系
v1.23及以上的VPC网络集群都支持Containerd,容器隧道网络集群从v1.23.2-r0开始支持Containerd。
| 操作系统 | 内核版本 | 上层容器运行时 | 下层容器运行时 | 容器存储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 |
| Huawei Cloud EulerOS 1.1 | 3.x | Docker Containerd | runC | OverlayFS |
| Huawei Cloud EulerOS 2.0 | 5.x | Docker Containerd | runC | OverlayFS |
| 节点类型 | 操作系统 | 内核版本 | 上层容器运行时 | 下层容器运行时 | 容器存储Rootfs |
|---|---|---|---|---|---|
| 弹性云服务器-虚拟机 | CentOS 7.6 | 3.x | Docker Containerd | runC | OverlayFS |
| Ubuntu 18.04 | 4.x | ||||
| Ubuntu 22.04 | 5.x | ||||
| EulerOS 2.9 | 4.x | ||||
| Huawei Cloud EulerOS 1.1 | 3.x | ||||
| Huawei Cloud EulerOS 2.0 | 5.x | ||||
| 弹性云服务器-物理机 | EulerOS 2.10 | 4.x | Containerd | Kata runC | Device Mapper |
| 操作系统 | 内核版本 | 上层容器运行时 | 下层容器运行时 | 容器存储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命令实现类似的功能。
| 操作 | 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 | 无 |
| 操作 | 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 | 无 |
| 操作 | 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:
其中Docker虽增加了swarm cluster、docker build、docker API等功能,但也会引入一些bug,并且与Containerd相比,多了一层调用,因此Containerd被认为更加节省资源且更安全。
容器运行时版本说明
表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
| 集群版本 | 架构 | 操作系统 | 最新Docker版本 | 最新containerd版本 |
|---|---|---|---|---|
| v1.34 | x86 | Huawei Cloud EulerOS 2.0 | 新建Kubernetes 1.34集群不支持Docker,详情请参见华为云CCE集群容器运行时Docker支持策略变化通知 | containerd-1.7.29-25.11.121763183.git9859417d.x86_64 |
| EulerOS 2.9 | ||||
| Huawei Cloud EulerOS 1.1 | ||||
| CentOS 7.6 | ||||
| Ubuntu 22.04 | 1.7.29-25.11.121763188.git9859417d | |||
| arm | Huawei Cloud EulerOS 2.0 | containerd-1.7.29-25.11.121763183.git9859417d.aarch64 | ||
| EulerOS 2.9 | ||||
| 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 |
| EulerOS 2.9 | docker-engine-18.09.0.129-1.h94.43.29.eulerosv2r9.x86_64 | |||
| Huawei Cloud EulerOS 1.1 | docker-engine-18.09.0.101-1.h70.28.24.eulerosv2r7.x86_64 | |||
| CentOS 7.6 | docker-engine-18.09.0.101-1.h70.28.24.eulerosv2r7.x86_64 | |||
| Ubuntu 22.04 | 27.5.1-25.11.121586247.git4c9b3b011a | 1.7.29-25.11.121763188.git9859417d | ||
| 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 | |
| EulerOS 2.9 | docker-engine-18.09.0.129-1.h94.43.29.eulerosv2r9.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 |
| EulerOS 2.9 | docker-engine-18.09.0.129-1.h91.43.27.eulerosv2r9.x86_64 | |||
| Huawei Cloud EulerOS 1.1 | docker-engine-18.09.0.101-1.h70.28.24.eulerosv2r7.x86_64 | |||
| CentOS 7.6 | docker-engine-18.09.0.101-1.h70.28.24.eulerosv2r7.x86_64 | |||
| Ubuntu 22.04 | 27.5.1-25.05.108320057.git4c9b3b011a | 1.6.14-25.05.109434323.gite7077850 | ||
| 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 | |
| EulerOS 2.9 | docker-engine-18.09.0.129-1.h91.43.27.eulerosv2r9.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 |
| EulerOS 2.9 | docker-engine-18.09.0.129-1.h91.43.27.eulerosv2r9.x86_64 | |||
| Huawei Cloud EulerOS 1.1 | docker-engine-18.09.0.101-1.h70.28.24.eulerosv2r7.x86_64 | |||
| CentOS 7.6 | docker-engine-18.09.0.101-1.h70.28.24.eulerosv2r7.x86_64 | |||
| Ubuntu 22.04 | 27.5.1-25.05.108320057.git4c9b3b011a | 1.6.14-25.05.109434323.gite7077850 | ||
| Ubuntu 18.04 | 5:18.09.9~3-0~ubuntu-bionic | |||
| 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 | |
| EulerOS 2.9 | docker-engine-18.09.0.129-1.h91.43.27.eulerosv2r9.aarch64 | |||
| EulerOS 2.8 | docker-engine-18.09.0.101-1.h69.28.24.eulerosv2r8.aarch64 |