容器引擎
容器引擎介绍
容器引擎是Kubernetes最重要的组件之一,负责管理镜像和容器的生命周期。Kubelet通过Container Runtime Interface (CRI) 与容器引擎交互,以管理镜像和容器。
CCE当前支持用户选择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 |
容器运行时 |
---|---|---|---|---|
EulerOS 2.9 |
4.x |
Docker 1.23起支持Containerd |
OverlayFS |
runC |
EulerOS 2.10 |
4.x |
Docker 1.23起支持Containerd |
OverlayFS |
runC |
Huawei Cloud EulerOS 2.0 |
5.x |
Docker Containerd |
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:
其中Docker虽增加了swarm cluster、docker build、docker API等功能,但也会引入一些bug,并且与Containerd相比,多了一层调用,因此Containerd被认为更加节省资源且更安全。