前言
Kubernetes在v1.24版本之后的容器运行时环境已经从Docker 切换为了Containerd
Containerd在旧版本和新版中对于镜像仓库的配置方法又各不一样,导致网上各种文章的方法都不使用
在此记录一下新旧2中配置方法
环境
1主2从集群
OS: Centos7.9
Kubernetes版本: v1.30.0
CRI: containerd1.6.31
Harbor服务地址: 10.211.55.17:8090

根据官方Github Issue 和官方的废弃说明 旧版配置镜像仓库的方法将会在1.5版本是进入Deprecation阶段,而在2.0版本之后会被removal,我现在的环境使用的1.6版本所以旧版方法不适用
旧版配置镜像仓库(Harbor)
直接修改containerd的配置文件 vim /etc/containerd/config.toml,搜索auths,定位到[plugins."io.containerd.grpc.v1.cri".registry.auths]处,这里是配置旧版本的镜像仓库和认证信息的地方,主要配置registry.configs 和 registry.mirrors 的子条目,在里面配置好仓库账号密码是为了方便节点拉取镜像,不用每次都需要指定Secret
149 [plugins."io.containerd.grpc.v1.cri".registry.auths]
150
151 [plugins."io.containerd.grpc.v1.cri".registry.configs]
152
153 [plugins."io.containerd.grpc.v1.cri".registry.configs."10.211.55.17:8090".tls]
154 insecure_skip_verify = true
155
156 [plugins."io.containerd.grpc.v1.cri".registry.configs."10.211.55.17:8090".auth]
157 username = "admin"
158 password = "Harbor12345"
159
160 [plugins."io.containerd.grpc.v1.cri".registry.headers]
161
162 [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
163
164 [plugins."io.containerd.grpc.v1.cri".registry.mirrors."10.211.55.17:8090"]
165 endpoint=["http://10.211.55.17:8090"]

修改完成之后重启congtainerd
systemctl daemon-reload && systemctl restart containerd.service
查看启动情况
journalctl -xeu containerd
由于我的版本高于1.5,所以这种配置其实已经失效,containerd无法加载这些插件配置,会提示错误信息,并且在查看镜像时也会出现错误
在config_path已经指定的前提下registry.auths,registry.configs,registry.headers,registry.mirrors 不允许再配置字子条目


新版本配置方法
详细配置说明参考官方文档 ,文档详细说明了新版本如何配置镜像仓库
删除旧版本
registry.auths,registry.configs,registry.headers,registry.mirrors下的配置确保该目录存在
/etc/containerd/certs.d/已仓库地址在
etc/containerd/certs.d创建子目录- 示例:
mkdir -p /etc/containerd/certs.d/10.211.55.17:8090
- 示例:
进入该目录创建
hosts.toml配置文件在
hosts.toml中配置镜像仓库信息server = "10.211.55.17:8090" [host."http://10.211.55.17:8090"] capabilities = ["pull", "resolve"]
重启containerd并验证,此时已经可以正常,由于是本地自己测试,就将Harbor的权限设置为了公开,主要懒得弄ca证书
尝试拉取仓库镜像

