containerd管理命令介绍

使用docker作为容器运行时需要经过多层转换(kubelet <-> dockershim <-> docker <-> containerd),这会导致连接不稳定和性能下降。K8s从v1.24版本开始,不再支持docker容器运行时,而是默认使用containerd

切换到containerd之后,有以下几种替代docker的管理命令:

  • 使用k8s自带的crictl命令。crictl是一个符合CRI接口规范的命令行工具,可以用它来检查和管理kubelet节点上的容器运行时和镜像。
  • 使用containerd自带的ctr命令。ctr是一个本地CLI工具,可以用它来管理镜像、容器、任务、快照等。因为containerd支持多个命名空间,所以ctr命令需要指定命名空间。要管理k8s创建的容器,需要使用k8s.io名字空间,即ctr -n k8s.io。
  • 使用containerd额外提供的nerdctl工具。nerdctl是一个与docker兼容的containerd的命令行工具,需要额外安装。它支持一些docker没有的功能,比如延迟拉取镜像、镜像加密等。
  • 使用其他第三方管理容器的开源工具。

docker、crictl和ctr命令对比

命令 docker crictl(k8s) ctr(containerd) nerdctl(containerd)
查看运行的容器 docker ps crictl ps ctr task ls/ctr container ls nerdctl ps
查看镜像 docker images crictl images ctr image ls nerdctl images
查看容器日志 docker logs crictl logs nerdctl logs
查看容器信息 docker inspect crictl inspect ctr container info nerdctl inspect
查看容器资源使用 docker stats crictl stats nerdctl stats
启动/关闭已有的容器 docker start/stop crictl start/stop ctr task start/kill nerdctl start/stop
运行一个新的容器 docker run 比较麻烦,因为它的最小单元为 Pod ctr run nerdctl run
创建一个新的容器 docker create 比较麻烦,因为它的最小单元为 Pod ctr container create nerdctl create
在容器内部执行命令 docker exec crictl exec nerdctl exec
删除容器 docker rm crictl rm ctr container rm nerdctl rm
删除镜像 docker rmi crictl rmi ctr image rm nerdctl rmi
导入镜像 docker load ctr image import nerdctl load
导出镜像 docker save ctr image export nerdctl save
拉取镜像 docker pull ctictl pull ctr image pull nerdctl pull
给镜像打标签 docker tag ctr image tag nerdctl tag
推送镜像 docker push ctr image push nerdctl push
构建镜像 docker build nerdctl build

(需要额外安装buildkit服务)

注意:ctr和nerdctl命令需要指定名字空间,管理k8s创建的容器,需要使用k8s.io名字空间,即ctr/nerdctl -n k8s.io。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐