crictl和ctr拉取镜像和存储的区别
crictl 和 ctr 都可以拉取容器镜像,但它们的存储方式和使用的命名空间不同,具体区别如下:
1. crictl pull vs ctr images pull
| 特性 | crictl pull |
ctr images pull |
|---|---|---|
| 接口 | CRI(Container Runtime Interface),用于 Kubernetes | containerd CLI |
| 默认命名空间 | k8s.io |
default |
| 镜像存储位置 | /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/ |
/var/lib/containerd/io.containerd.content.v1.content/ |
| 元数据管理 | 通过 containerd-shim,适配 Kubernetes |
直接由 containerd 管理 |
| 能否直接被 Kubernetes 使用 | 是 | 否(需要拉取到 k8s.io 命名空间) |
| 拉取方式 | crictl pull <image> |
ctr images pull <image> |
2. 拉取镜像的区别
(1)使用 crictl 拉取镜像
sudo crictl pull docker.io/library/nginx:latest
crictl通过 Kubernetes CRI 让containerd处理镜像下载。- 默认会存入
k8s.io命名空间,可以直接被 Kuberneteskubelet识别并使用。
(2)使用 ctr 拉取镜像
sudo ctr images pull docker.io/library/nginx:latest
-
ctr直接与containerd交互,默认存入default命名空间。 -
Kubernetes 不能直接使用
,除非你指定 k8s.io
命名空间:
sudo ctr -n k8s.io images pull docker.io/library/nginx:latest
3. 存储的区别
(1)查看 containerd 命名空间
查看 containerd 管理的命名空间:
sudo ctr namespaces ls
示例输出:
NAME LABELS
default
k8s.io
(2)查看 crictl 拉取的镜像
sudo crictl images
示例:
IMAGE TAG IMAGE ID SIZE
docker.io/library/nginx latest 605c77e624dd 23MB
(3)查看 ctr 拉取的镜像
sudo ctr images ls
示例:
REF TYPE DIGEST SIZE
docker.io/library/nginx:latest manifest sha256:605c... 23MB
如果 ctr images ls 看不到 crictl pull 的镜像,可能是因为 ctr 默认在 default 命名空间,而 crictl 使用的是 k8s.io。
可以指定 k8s.io 命名空间:
sudo ctr -n k8s.io images ls
4. ctr 拉取的镜像,crictl 能看到吗?
如果 ctr 拉取时 没有指定 k8s.io 命名空间,crictl 看不到 这个镜像。
要让 crictl 看到 ctr 拉取的镜像,你必须:
sudo ctr -n k8s.io images pull docker.io/library/nginx:latest
然后 crictl 就能看到这个镜像。
5. 统一镜像管理
(1)推荐 Kubernetes 用户使用 crictl
如果你使用 Kubernetes,建议 始终用 crictl pull,因为它会存入 k8s.io 命名空间,避免 ctr 造成的不兼容问题。
(2)使用 ctr 管理 k8s.io 镜像
如果你已经使用 ctr 拉取镜像,确保它存入 k8s.io 命名空间:
sudo ctr -n k8s.io images pull <image>
总结
| 特性 | crictl |
ctr |
|---|---|---|
| 默认命名空间 | k8s.io |
default |
| 能否被 Kubernetes 使用 | 是 | 否(除非指定 k8s.io) |
| 交互方式 | 通过 CRI 与 containerd 交互 |
直接与 containerd 交互 |
| 镜像查看命令 | crictl images |
ctr images ls |
| 推荐使用场景 | Kubernetes 用户 | 手动调试 containerd |
如果你是 Kubernetes 用户,建议 用 crictl 统一管理镜像,避免 ctr 造成的命名空间问题。🚀

浙公网安备 33010602011771号