容器引擎
容器引擎介绍
容器引擎是Kubernetes最重要的组件之一,负责管理镜像和容器的生命周期。Kubelet通过Container Runtime Interface (CRI) 与容器引擎交互,以管理镜像和容器。
CCE当前支持用户选择Containerd和Docker容器引擎,其中Containerd调用链更短,组件更少,更稳定,占用节点资源更少。
对比 |
Containerd |
Docker |
---|---|---|
调用链 |
kubelet --> CRI plugin(在containerd进程中) --> containerd |
|
命令 |
crictl |
docker |
Kubernetes CRI支持 |
原生支持 |
需通过dockershim或cri-dockerd提供CRI支持 |
Pod 启动延迟 |
低 |
高 |
kubelet CPU/内存占用 |
低 |
高 |
运行时CPU/内存占用 |
低 |
高 |
Containerd和Docker组件常用命令对比
Containerd不支持dockerAPI和dockerCLI,但是可以通过cri-tool命令实现类似的功能。
序号 |
Docker命令 |
Containerd命令 |
备注 |
---|---|---|---|
1 |
docker images [选项] [镜像名[:标签]] |
crictl images [选项] [镜像名[:标签]] |
列出本地镜像列表 |
2 |
docker pull [选项] 镜像名[:标签|@DIGEST] |
crictl pull [选项] 镜像名[:标签|@DIGEST] |
拉取镜像 |
3 |
docker push |
无 |
上传镜像 |
4 |
docker rmi [选项] 镜像... |
crictl rmi [选项] 镜像ID… |
删除本地镜像 |
5 |
docker inspect 镜像ID |
crictl inspecti 镜像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... |
更新容器资源限制 |
序号 |
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:
其中Docker虽增加了swarm cluster、docker build、docker API等功能,但也会引入一些bug,并且与Containerd相比,多了一层调用,因此Containerd被认为更加节省资源且更安全。