ctr推送或拉取镜像有几个好处:不需要用仓库名重新命名镜像、不需要使用docker登录(直接指定凭证),免去安装docker。

(crictl不支持镜像推送,但使用起来非常接近docker,拉取镜像或其他操作适合使用)

-n :指定命名空间,不指定默认ctr查看不到k8s镜像,ctr原生和k8s是隔离开来的,要不就使用circtl查看,但是circtl不能推送镜像

# 查看本地是否存在要推送的镜像
ctr -n k8s.io images ls | grep nginx
#k8s容器推送镜像到阿里云/或者自己的私有库
ctr -n k8s.io images push   --platform linux/amd64   crpi-xxxx-xxx.aliyuncs.com/namespace/nginx:latest   docker.io/library/nginx:latest   --user xxx:password

详细的参数含义:crictl不能推镜像,目前只能使用docker和ctr推送镜像

ctr   #containerd 原生工具,containerd是k8s从docker分离出来的容器核心技术,更快

-n k8s.io   #指定镜像k8s隔离的命名空间

--platform  #指定架构版本,不设置架构版本,私有仓库是不支持直接推送索引的

xxxx.com.rep/namespace/nginx:latest    #目标地址aliyun仓库地址/命名空间(推送aliyun镜像必须)/镜像名称 (可以自己命名)

docker.io/library/nginx:latest     #源镜像名称

--user   username:password   #阿里云凭证

附带:ctr  🆚  crictl  核心区别概览

维度ctrcrictl
全称containerd CLICRI CLI
设计目标containerd 的通用命令行工具Kubernetes CRI 接口的调试工具
遵循标准containerd 原生 APIKubernetes CRI (Container Runtime Interface)
主要用途管理 containerd 本身(镜像、容器、快照等)调试 Kubernetes 节点上的 Pod、容器、镜像
命名空间默认 default,需手动指定 -n k8s.io自动使用 k8s.io 命名空间
是否支持 Pod❌ 不直接支持(实验性 ctr pods)✅ 完全支持
适用环境任何使用 containerd 的环境主要用于 Kubernetes 节点
兼容性仅 containerd任何 CRI 运行时(containerd, CRI-O)

 使用场景建议

场景推荐工具原因
调试 Kubernetes Pod 启动失败✅ crictl能看 Pod 状态、事件、日志、沙箱容器
查看 kubelet 拉取了哪些镜像✅ crictl images直接对应 Kubernetes 视角
手动推送镜像到私有仓库✅ ctrcrictl 不支持 push
导出/导入镜像(类似 save/load)✅ ctrcrictl 不支持
直接管理 containerd(无 Kubernetes)✅ ctr更通用,功能更全
查看容器运行时统计信息✅ crictl stats提供 CPU、内存、网络实时数据

总结

ctrcrictl
定位containerd 的“瑞士军刀”Kubernetes 节点的“诊断仪”
类比就像 docker 之于 Docker就像 kubectl 之于 API Server
何时用管理镜像、推送、底层调试排查 Pod 问题、看日志、查事件
关键参数-n k8s.io无需,自动连接 k8s.io
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐