容器引擎介绍
容器引擎是Kubernetes最重要的组件之一,负责管理镜像和容器的生命周期。Kubelet通过Container Runtime Interface (CRI) 与容器引擎交互,以管理镜像和容器。
CCE当前支持用户选择Containerd和Docker容器引擎, 其中Containerd调用链更短,组件更少,更稳定,占用节点资源更少 。
Kubernetes在1.24版本中移除了Dockershim,并从此不再默认支持Docker容器引擎,详情请参见Kubernetes即将移除Dockershim。为保障用户体验,CCE 1.25版本中仍将继续维持Docker容器引擎,但在1.27版本中将不再支持Docker容器引擎,您需要将Docker节点迁移至Containerd节点。
节点操作系统与容器引擎对应关系
表 CCE集群节点操作系统与容器引擎对应关系
操作系统 | 内核版本 | 容器引擎 | 容器存储Rootfs | 容器运行时 |
---|---|---|---|---|
CentOS 7.x | 3.x | Docker1.23起支持Containerd | 1.19.16以下版本集群使用Device Mapper1.19.16及以上版本集群使用OverlayFS | runC |
EulerOS 2.9 | 4.x | Docker1.23起支持Containerd | OverlayFS | runC |
Ubuntu 18.04 | 4.x | Docker1.23起支持Containerd | OverlayFS | runC |
表 CCE Turbo集群节点操作系统与容器引擎对应关系
节点类型 操作系统 内核版本 容器引擎 容器存储Rootfs 容器运行时 弹性云主机-虚拟机 CentOS 7.6 3.x Docker
ContainerdOverlayFS runC Ubuntu 18.04 4.x EulerOS 2.9 4.x 弹性云主机-物理机 EulerOS 2.9 4.x Containerd Device Mapper Kata
表 鲲鹏节点操作系统与容器引擎对应关系
操作系统 | 内核版本 | 容器引擎 | 容器存储Rootfs | 容器运行时 |
---|---|---|---|---|
EulerOS 2.8 | 4.x | Docker | OverlayFS | runC |
Containerd和Docker组件常用命令对比
Containerd不支持dockerAPI和dockerCLI,但是可以通过cri-tool命令实现类似的功能。
表 镜像相关功能
序号 | Docker命令 | Containerd命令 | 备注 |
---|---|---|---|
1 | docker images [选项] [镜像名[:标签]] | crictl images [选项] [镜像名[:标签]] | 列出本地镜像列表 |
2 | docker pull [选项] 镜像名[:标签 | @DIGEST] | crictl pull [选项] 镜像名[:标签 |
3 | docker push | 无 | 上传镜像 |
4 | docker rmi [选项] 镜像... | crictl rmi [选项] 镜像ID… | 删除本地镜像 |
5 | docker inspect 镜像ID | crictl inspect 镜像ID | 检查容器 |
表 容器相关功能
序号 | 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... | 更新容器资源限制 |
表 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被认为更加节省资源且更安全 。
容器引擎版本说明
- Docker
- CentOS:docker-engine 18.9.0,CCE定制的Docker版本,会及时修复安全漏洞。
- Ubuntu:docker-ce: 18.9.9,开源社区版本。Ubuntu节点建议使用containerd引擎(当前CCE Turbo集群支持containerd, CCE集群后续也将提供containerd)。
说明Ubuntu下开源docker-ce在并发exec(如配置了多个exec探针时)可能触发社区bug,建议使用http/tcp的探针。
- Containerd:1.4.1