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 核心区别概览
维度 | ctr |
crictl |
---|---|---|
全称 | containerd CLI | CRI CLI |
设计目标 | containerd 的通用命令行工具 | Kubernetes CRI 接口的调试工具 |
遵循标准 | containerd 原生 API | Kubernetes 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 视角 |
手动推送镜像到私有仓库 | ✅ ctr |
crictl 不支持 push |
导出/导入镜像(类似 save/load) | ✅ ctr |
crictl 不支持 |
直接管理 containerd(无 Kubernetes) | ✅ ctr |
更通用,功能更全 |
查看容器运行时统计信息 | ✅ crictl stats |
提供 CPU、内存、网络实时数据 |
总结
ctr |
crictl |
|
---|---|---|
定位 | containerd 的“瑞士军刀” | Kubernetes 节点的“诊断仪” |
类比 | 就像 docker 之于 Docker |
就像 kubectl 之于 API Server |
何时用 | 管理镜像、推送、底层调试 | 排查 Pod 问题、看日志、查事件 |
关键参数 | -n k8s.io |
无需,自动连接 k8s.io |