找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2895

积分

0

好友

413

主题
发表于 4 天前 | 查看: 17| 回复: 0

ctr 是 containerd 提供的用于直接管理 containerd 容器的命令行工具。它有一个非常重要的特性:Namespace(命名空间)。这与你熟悉的 Docker 命令有着显著区别。

ctr 预设了三个特殊的 namespace:

  • default:使用 ctr 命令创建容器时默认使用的命名空间。
  • k8s.io:这是 Kubernetes 调度 Pod 到节点时,通过 containerd 创建的容器所属的命名空间。
  • moby:这是 Docker 引擎(当使用 containerd 作为后端时)创建的容器所属的命名空间。

因此,当你在 Kubernetes 的工作节点上使用 ctr 查看容器却一无所获时,很可能是因为你忘记了指定 -n k8s.io 这个命名空间参数来进行查询。

namespace 命令

管理命名空间的基础命令如下:

ctr ns ls
ctr ns create test
ctr ns rm test

image

镜像相关的操作。你可以使用 ctr image,也可以简写为 ctr i

ctr -n test image ls
ctr image pull    # 拉取镜像
ctr image tag     # 为镜像打标签
ctr image rm      # 删除镜像
ctr image export     # 将镜像导出为压缩包
ctr image import     # 从压缩包导入镜像

容器

以下是容器的基本管理命令:

# 创建容器
ctr container create docker.io/library/nginx:alpine nginx

# 列出容器
ctr container ls

# 查看容器详情
 ctr container info nginx

 # 删除容器
 ctr container rm nginx

这里需要特别注意ctr 命令中的 container 概念与 Docker 命令中的 container 有所不同。

在 Docker 中,一个 container 通常对应一个正在运行的进程。而在 ctr 中,执行 ctr container create 后创建的只是一个“容器对象”,它并非处于运行状态。在 ctr 的语境里,真正运行中的容器实例被称为 task

task

task 命令用于管理容器的运行时状态。

# 启动容器
ctr task start -d nginx  

# 列出运行中的容器
 ctr task ls

 # 查看容器的运行时指标
 ctr task metrics nginx

 # 查看容器内所有进程在宿主机上的 PID
 ctr task ps nginx

 # 进入容器执行命令。--exec-id 是附加的进程ID,可以任意指定(如0),但需确保在当前容器内唯一。
 ctr task exec --exec-id 0 -t nginx sh

 # 暂停容器
 ctr task pause nginx

 # 恢复已暂停的容器
ctr task resume nginx

#停止容器
ctr task kill nginx

# 删除容器运行实例(task)
ctr task rm nginx

crictl

crictl 是一个兼容 CRI(容器运行时接口)的命令行工具,由 Kubernetes 社区提供。它与 containerd 本身没有直接绑定关系,主要用于检查和调试 Kubernetes 节点上的任何 CRI 兼容的容器运行时(如 containerd、CRI-O)及其上的应用。这对于 Kubernetes 集群的 运维与调试 至关重要。

ctr 不同,crictl 在设计上没有命名空间(namespace)的概念,它会直接列出通过 CRI 接口管理的所有资源。

pod命令

由于面向 Kubernetes 环境,crictl 提供了一些与 Pod 相关的操作命令。

# 打印所有 Pod 的清单
crictl pods

# 根据名称过滤打印 Pod
crictl pods --name nginx-xxxxxxxxxx

# 根据标签过滤打印 Pod
 crictl pods --label run=nginx

镜像命令

镜像管理命令与 Docker 类似。

# 列出镜像
crictl images

# 根据镜像仓库名过滤
crictl images nginx

# 拉取镜像
crictl pull busybox

容器命令

容器管理命令也与 Docker 命令高度相似。

crictl ps -a  # 列出所有容器

crictl ps     # 列出运行中的容器

# 在容器内执行命令
crictl exec -i -t 容器id ls

# 查看容器日志
crictl logs 容器id

# 启动容器
crictl start 容器id

总结

总而言之,ctrcrictl 都是容器运行时层面的管理工具,因此它们都不具备构建(build)镜像的功能。构建镜像属于研发阶段,你可以参考另一篇关于 nerdctl + buildkit 的文章,或者直接使用 Docker。

简单来说,ctr 是 containerd 的“原生”管理工具,更底层,包含 namespace 隔离概念;而 crictl 是 Kubernetes 生态的调试工具,专为查看和操作通过 CRI 接口管理的 云原生 资源(Pod、容器等)设计。理解两者的定位和区别,能帮助你在不同场景下选择更合适的工具。如果你想了解更多容器技术和实践,欢迎到 云栈社区 与其他开发者交流探讨。




上一篇:CAP理论深度解析:淘宝、支付宝、微信的业务场景权衡与面试实战
下一篇:Coding Agent内部工作原理深度解析:从核心机制到开发实践
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-24 04:07 , Processed in 0.384948 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表