容器引擎说明
容器引擎介绍
容器引擎是Kubernetes最重要的组件之一,负责管理镜像和容器的生命周期。Kubelet通过Container Runtime Interface (CRI) 与容器引擎交互,以管理镜像和容器。
CCE当前支持用户选择Containerd和Docker容器引擎,其中Containerd调用链更短,组件更少,更稳定,占用节点资源更少。
Kubernetes在v1.24版本中移除了Dockershim,并从此不再默认支持Docker容器引擎,详情请参见Kubernetes即将移除Dockershim。CCE计划未来移除对Docker容器引擎的支持,建议您将节点容器引擎从Docker迁移至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 |
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 |
节点类型 |
操作系统 |
内核版本 |
容器引擎 |
容器存储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 |
操作系统 |
内核版本 |
容器引擎 |
容器存储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命令实现类似的功能。
操作 |
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 |
无 |
操作 |
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:
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。