切换容器引擎
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
在k8s平台中,为了解决与容器运行时(比如Docker)集成问题,在早起社区退出CRI(Container Runtime Interface,容器运行时接口),以支持更多的容器运行时。但是Docker实在CRI出现之前就加入了Kubernetes,k8s团队通过提供dockershim对Docker进行一对一支持,Docker本身并没有实现CRI接口。所以当我们使用docker作为容器引擎时,架构时如下这样的:
Kubernetes团队因为下面几点原因计划弃用kubelet中的dockershim组件:
去除dockershim减少代码规则和维护称根本
Docker 内部调用链复杂,多层封装和调用,导致性能降低、提升故障率、不易排查(上图)
Docker还会在宿主机创建网络规则、存储卷、也带来了安全隐患
弃用后,新版的k8s就无法与没有实现CNI的老版docker引擎相互通讯。
如何应对?
在未来的Kubernetes版本彻底放弃docker之前,引入受支持的容器运行时。出了docker之外,CRI支持很多容器运行时:
containerd:与docker完全兼容,比docker轻量,较为成熟
cri-o, podman:都是redhat项目,目前redhat主推podman
参考资料:https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/#containerd
pause镜像设置过阿里云镜像仓库地址
cgroups驱动设置为systemd
拉取Docker Hub镜像配置加速地址设置为阿里云镜像仓库地址
containerd提供了ctr命令行工具管理容器,但功能比较简单,所以一般会用crictl工具检查和调试容器。
项目地址:https://github.com/kubernetes-sigs/cri-tools/
设置crictl连接containerd:
下面是docker与crictl命令对照表:
显示本地镜像列表
docker images
crictl images
下载镜像
docker pull
crictl pull
上传镜像
docker push
无,例如buildk
删除本地镜像
docker rmi
crictl rmi
查看镜像详情
docker inspect IMAGE-ID
crictl inspecti IMAGE-ID
显示容器列表
docker ps
crictl ps
创建容器
docker create
crictl create
启动容器
docker start
crictl start
停止容器
docker stop
crictl stop
删除容器
docker rm
crictl rm
查看容器详情
docker inspect
crictl inspect
附加容器
docker attach
crictl attach
执行命令
docker exec
crictl exec
查看日志
docker logs
crictl logs
查看容器资源
docker stats
crictl stats
显示 POD 列表
无
crictl pods
查看 POD 详情
无
crictl inspectp
运行 POD
无
crictl runp
停止 POD
无
crictl stopp
可以使用Buildkit替代docker,支持构建dockerfile。