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命令对比

命令dockercrictl(k8s)ctr(containerd)nerdctl(containerd)
查看运行的容器docker pscrictl psctr task ls/ctr container lsnerdctl ps
查看镜像docker imagescrictl imagesctr image lsnerdctl images
查看容器日志docker logscrictl logsnerdctl logs
查看容器信息docker inspectcrictl inspectctr container infonerdctl inspect
查看容器资源使用docker statscrictl statsnerdctl stats
启动/关闭已有的容器docker start/stopcrictl start/stopctr task start/killnerdctl start/stop
运行一个新的容器docker run比较麻烦,因为它的最小单元为 Podctr runnerdctl run
创建一个新的容器docker create比较麻烦,因为它的最小单元为 Podctr container createnerdctl create
在容器内部执行命令docker execcrictl execnerdctl exec
删除容器docker rmcrictl rmctr container rmnerdctl rm
删除镜像docker rmicrictl rmictr image rmnerdctl rmi
导入镜像docker loadctr image importnerdctl load
导出镜像docker savectr image exportnerdctl save
拉取镜像docker pullctictl pullctr image pullnerdctl pull
给镜像打标签docker tagctr image tagnerdctl tag
推送镜像docker pushctr image pushnerdctl push
构建镜像docker buildnerdctl build

(需要额外安装buildkit服务)

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

Logo

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

更多推荐