crictl和ctr拉取镜像和存储的区别

crictlctr 都可以拉取容器镜像,但它们的存储方式和使用的命名空间不同,具体区别如下:


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 CRIcontainerd 处理镜像下载。
  • 默认会存入 k8s.io 命名空间,可以直接被 Kubernetes kubelet 识别并使用。

(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 造成的命名空间问题。🚀

posted @ 2025-03-07 19:48  蒲公英PGY  阅读(1238)  评论(0)    收藏  举报