参考文档:
https://blog.csdn.net/zfw_666666/article/details/129383403
https://blog.csdn.net/justlpf/article/details/131894626
https://blog.51cto.com/flyfish225/5364379
k8s containerd查看镜像报错的解决办法:https://blog.csdn.net/just_lion/article/details/133685375
Containerd容器镜像管理
docker使用docker images命令管理镜像
单机containerd使用ctr images命令管理镜像,containerd本身的CLI
k8s中containerd使用crictl images命令管理镜像,Kubernetes社区的专用CLI工具
containerd 相比于docker , 多了 namespace概念, 每个 image和 container 都会在各自的namespace下可见。
目前k8s会使用 k8s.io 作为命名空间
单机containerd的容器镜像管理
- 查看帮助
1[root@master ~]# ctr --help
2
3[root@master ~]# ctr --version
- 查看默认命名空间中的镜像(有如下五种方式)
1[root@master ~]# ctr i ls
2
3[root@master ~]# ctr image ls
4
5[root@master ~]# ctr image list
6
7[root@master ~]# ctr i list
8
9[root@master ~]# ctr images ls
- 查看k8s命名空间中的镜像
1[root@master ~]# ctr -n k8s.io image ls
2REF TYPE DIGEST SIZE PLATFORMS LABELS
3docker.io/flannel/flannel-cni-plugin:v1.2.0 application/vnd.docker.distribution.manifest.list.v2+json sha256:ca6779c6ad63b77af8a00151cefc08578241197b9a6fe144b0e55484bc52b852 3.7 MiB linux/amd64,linux/arm/v6,linux/arm64/v8,linux/mips64le,linux/ppc64le,linux/s390x io.cri-containerd.image=managed
4docker.io/flannel/flannel-cni-plugin@sha256:ca6779c6ad63b77af8a00151cefc08578241197b9a6fe144b0e55484bc52b852 application/vnd.docker.distribution.manifest.list.v2+json sha256:ca6779c6ad63b77af8a00151cefc08578241197b9a6fe144b0e55484bc52b852 3.7 MiB linux/amd64,linux/arm/v6,linux/arm64/v8,linux/mips64le,linux/ppc64le,linux/s390x io.cri-containerd.image=managed
5docker.io/flannel/flannel:v0.24.0 application/vnd.docker.distribution.manifest.list.v2+json sha256:713dd5fb74baceb2b7e7141cb063f8bf8d7e644b3fe2d2d020200157c656b6f8 26.7 MiB linux/amd64,linux/arm/v6,linux/arm64/v8,linux/mips64le,linux/ppc64le,linux/riscv64,linux/s390x io.cri-containerd.image=managed
6docker.io/flannel/flannel@sha256:713dd5fb74baceb2b7e7141cb063f8bf8d7e644b3fe2d2d020200157c656b6f8 application/vnd.docker.distribution.manifest.list.v2+json sha256:713dd5fb74baceb2b7e7141cb063f8bf8d7e644b3fe2d2d020200157c656b6f8 26.7 MiB linux/amd64,linux/arm/v6,linux/arm64/v8,linux/mips64le,linux/ppc64le,linux/riscv64,linux/s390x io.cri-containerd.image=managed
7docker.io/jwilder/whoami:latest application/vnd.docker.distribution.manifest.v2+json sha256:c621c699e1becc851a27716df9773fa9a3f6bccb331e6702330057a688fd1d5a 4.0 MiB linux/amd64 io.cri-containerd.image=managed
8docker.io/jwilder/whoami@sha256:c621c699e1becc851a27716df9773fa9a3f6bccb331e6702330057a688fd1d5a application/vnd.docker.distribution.manifest.v2+json sha256:c621c699e1becc851a27716df9773fa9a3f6bccb331e6702330057a688fd1d5a 4.0 MiB linux/amd64 io.cri-containerd.image=managed
9docker.io/kubernetesui/dashboard:v2.7.0 application/vnd.docker.distribution.manifest.list.v2+json sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93 72.3 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed
10docker.io/kubernetesui/dashboard@sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93 application/vnd.docker.distribution.manifest.list.v2+json sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93 72.3 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed
11docker.io/kubernetesui/metrics-scraper:v1.0.8 application/vnd.docker.distribution.manifest.list.v2+json sha256:76049887f07a0476dc93efc2d3569b9529bf982b22d29f356092ce206e98765c 18.8 MiB linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed
12docker.io/kubernetesui/metrics-scraper@sha256:76049887f07a0476dc93efc2d3569b9529bf982b22d29f356092ce206e98765c application/vnd.docker.distribution.manifest.list.v2+json sha256:76049887f07a0476dc93efc2d3569b9529bf982b22d29f356092ce206e98765c 18.8 MiB linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed
13docker.io/library/mysql:8.0.35 application/vnd.oci.image.index.v1+json sha256:82b40099c780c15850690bea3a76c73fcc4834ce813313cd048468f1de7c2b06 165.7 MiB linux/amd64,linux/arm64/v8,unknown/unknown io.cri-containerd.image=managed
14docker.io/library/mysql@sha256:82b40099c780c15850690bea3a76c73fcc4834ce813313cd048468f1de7c2b06 application/vnd.oci.image.index.v1+json sha256:82b40099c780c15850690bea3a76c73fcc4834ce813313cd048468f1de7c2b06 165.7 MiB linux/amd64,linux/arm64/v8,unknown/unknown io.cri-containerd.image=managed
15docker.io/minio/minio:latest application/vnd.oci.image.index.v1+json sha256:4be3dd55a38ec706d0f21e04a332740d7ee8b72188e86f70405f9da1d85f179d 50.5 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,unknown/unknown io.cri-containerd.image=managed
16docker.io/minio/minio@sha256:4be3dd55a38ec706d0f21e04a332740d7ee8b72188e86f70405f9da1d85f179d application/vnd.oci.image.index.v1+json sha256:4be3dd55a38ec706d0f21e04a332740d7ee8b72188e86f70405f9da1d85f179d 50.5 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,unknown/unknown io.cri-containerd.image=managed
17docker.io/minio/minio@sha256:654e9aeba815c95c85fb2ea72d1a978bce14522e64386c4e541b6b29f4fec069 application/vnd.oci.image.index.v1+json sha256:654e9aeba815c95c85fb2ea72d1a978bce14522e64386c4e541b6b29f4fec069 50.5 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,unknown/unknown io.cri-containerd.image=managed
18docker.io/minio/minio@sha256:796f75ea413b883cec953cb5f0bd2b6050615e36123f36e39aa5555096a07bc1 application/vnd.oci.image.index.v1+json sha256:796f75ea413b883cec953cb5f0bd2b6050615e36123f36e39aa5555096a07bc1 50.5 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,unknown/unknown io.cri-containerd.image=managed
- 下载镜像
containerd支持oci标准的镜像,所以可以直接使用docker官方或dockerfile构建的镜像
1[root@master ~]# ctr images pull docker.io/library/nginx:1.25.3
2docker.io/library/nginx:1.25.3: resolved |++++++++++++++++++++++++++++++++++++++|
3index-sha256:4c0fdaa8b6341bfdeca5f18f7837462c80cff90527ee35ef185571e1c327beac: done |++++++++++++++++++++++++++++++++++++++|
4manifest-sha256:161ef4b1bf7effb350a2a9625cb2b59f69d54ec6059a8a155a1438d0439c593c: done |++++++++++++++++++++++++++++++++++++++|
5layer-sha256:8056d2bcf3b682573ee5b0c176c1209df285d5be0df98ec6ae08bf7421179b74: done |++++++++++++++++++++++++++++++++++++++|
6layer-sha256:2f44b7a888fa005d07c031d3cfad2a1c0344207def2ab9dbb97712425ff812c1: done |++++++++++++++++++++++++++++++++++++++|
7layer-sha256:8b7dd3ed1dc34cc1caba38bbbf22bceda5bd2e7c4e1b3c11ca64cda2ed186a2c: done |++++++++++++++++++++++++++++++++++++++|
8layer-sha256:36664b6ce66b304efa7ba48eb960133a085c2ec800a9f8887df94a82679334c1: done |++++++++++++++++++++++++++++++++++++++|
9layer-sha256:35497dd96569b9139cd388fd7107df32ccdc1449b205536bce0968b2dec3e7dc: done |++++++++++++++++++++++++++++++++++++++|
10config-sha256:a8758716bb6aa4d90071160d27028fe4eaee7ce8166221a97d30440c8eac2be6: done |++++++++++++++++++++++++++++++++++++++|
11layer-sha256:dc9c4fdb83d69ef5986ec344c6b75606b3a417c7434268cb6995962be5312f14: done |++++++++++++++++++++++++++++++++++++++|
12layer-sha256:2d455521f76cee8b8b2e21457075cc500c60373d70acb217f12838818fc3da90: done |++++++++++++++++++++++++++++++++++++++|
13elapsed: 14.4s total: 3.5 Ki (247.0 B/s)
14unpacking linux/amd64 sha256:4c0fdaa8b6341bfdeca5f18f7837462c80cff90527ee35ef185571e1c327beac...
15done: 6.838643574s
- 镜像的挂载与卸载
1# 挂载
2[root@master ~]# ctr images mount docker.io/library/nginx:1.25.3 /mnt
3sha256:8cdc90978fea2fcd2db1988760aff35f035a8a0324748925fe07e53cd7804fb4
4/mnt
5
6[root@master ~]# ls /mnt
7bin dev docker-entrypoint.sh home lib32 libx32 mnt proc run srv tmp var
8boot docker-entrypoint.d etc lib lib64 media opt root sbin sys usr
9
10# 卸载
11[root@master ~]# umount /mnt
导出镜像
1[root@node1 ~]# ctr i export nginx-1.25.3.tar docker.io/library/nginx:1.25.3
删除镜像
rm 、remove 、delete、del 四个命令都可以用来删除镜像
多个镜像也可以一起删除,只需要加到命令后面
1[root@node1 ~]# ctr images rm docker.io/library/nginx:1.25.3
导入镜像
注意:也可以从docker导出的镜像进行导入;docker 导出的命令是 :docker save REPOSITORY:TAG -o export_image_name.tar
1[root@node1 ~]# ctr images import nginx-1.25.3.tar
2unpacking docker.io/library/nginx:latest (sha256:d08d964023fe853b491e1f5eb182499653722c58cc4c294f2675f39d7c6a209d)...done
3
4###### 导入到k8s的命名空间中
5[zhangcong@master demo]$ sudo ctr -n k8s.io images import demo.tar
6unpacking registry.cn-hangzhou.aliyuncs.com/conggege325/pri-repository:demo (sha256:77254ac4e69935b12daf420849012fb6c0f35c1b00d3b41263003e4dd35c488d)...done
修改tag
语法:
ctr images tag 命令选项 源镜像tag 目标tag 目标tag ….可以跟多个目标tag
1[root@node1 ~]# ctr i tag docker.io/library/nginx:1.25.3 nginx:latest
k8s中的容器镜像管理
查看镜像
1[root@master ~]# crictl image
2IMAGE TAG IMAGE ID SIZE
3docker.io/flannel/flannel-cni-plugin v1.2.0 a55d1bad692b7 3.88MB
4docker.io/flannel/flannel v0.24.0 0dc86fe0f22e6 28MB
5docker.io/jwilder/whoami latest 89be8564e6506 4.18MB
6docker.io/kubernetesui/dashboard v2.7.0 07655ddf2eebe 75.8MB
7docker.io/kubernetesui/metrics-scraper v1.0.8 115053965e86b 19.7MB
8
9registry.cn-hangzhou.aliyuncs.com/conggege325/pri-repository demo 98c67bc2c1df6 102MB
10registry.cn-hangzhou.aliyuncs.com/conggege325/pri-repository smartbrain-server ac61835ef0f0a 173MB
如果上述命令报如下错误:
1[root@master ~]# crictl image
2WARN[0000] image connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead.
3E0116 15:52:07.895131 487354 remote_image.go:119] "ListImages with filter from image service failed" err="rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial unix /var/run/dockershim.sock: connect: no such file or directory\"" filter="&ImageFilter{Image:&ImageSpec{Image:,Annotations:map[string]string{},},}"
4FATA[0000] listing images: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial unix /var/run/dockershim.sock: connect: no such file or directory"
解决办法如下三步:
第一步, 重新生成containerd的配置文件
1# 默认情况下containerd的sock存放于/run/containerd/containerd.sock
2# 重新设置一下使用的runtime-endpoint, 生成后的crictl配置默认存放在/etc/crictl.yaml
3[root@master ~]# crictl config runtime-endpoint unix:///run/containerd/containerd.sock
第二步, 编辑vim /etc/crictl.yaml
编辑/etc/crictl.yaml文件, 内容如下(主要是新版本增加的image-endpoint):
1runtime-endpoint: "unix:///run/containerd/containerd.sock"
2image-endpoint: "unix:///run/containerd/containerd.sock" #与上边runtime-endpoint一致即可
3timeout: 0
4debug: false
5pull-image-on-create: false
6disable-pull-on-run: false
或者通过命令设置:
1[root@master ~]# crictl config image-endpoint unix:///run/containerd/containerd.sock
第三步, 重启内核
1[root@master ~]# systemctl daemon-reload
删除镜像
1[root@master ~]# crictl rmi b1b460d8cc87f
2Deleted: docker.io/minio/minio@sha256:654e9aeba815c95c85fb2ea72d1a978bce14522e64386c4e541b6b29f4fec069
评论