一、背景
- 最近在第三方部署k8s集群,部分镜像是私有的,又不想重新在第三方搭建私有仓库,于是采取将私有镜像迁移到第三方服务器的方式(nerdctl save 命令)。
- k8s pod 内的镜像策略设置为:IfNotPresent,即没有的话,才去拉取。
- 结果明明本地有镜像了,k8s还是去下载,这岂不是犟嘛。
二、解决方案
- 执行
nerdctl namespace
找到k8s镜像的命名空间
[root@xxxxx containerd]# nerdctl namespace ls NAME CONTAINERS IMAGES VOLUMES LABELS buildkit 0 0 0 default 5 12 0 k8s.io 20 24 0 kube-system 0 2 0
可以看到,有个叫k8s.io 的命名空间,于是问题迎刃而解,将私有镜像传到这个命名空间中即可。
- 执行
nerdctl load -i xxxxxx.tar --namespace k8s.io
将镜像上传到指定的命名空间中。 - 完事之后,k8s就不会再去拉取镜像了,因为它已经发现自己所在命名空间已经存在镜像了。