参考文档:

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. 查看帮助
1[root@master ~]# ctr --help
2
3[root@master ~]# ctr --version
  1. 查看默认命名空间中的镜像(有如下五种方式)
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
  1. 查看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                                 
  1. 下载镜像

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. 镜像的挂载与卸载
 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