背景
k8s-1.20发布之后,不再使用doker作为底层容器运行时,而是默认使用Container Runtime Interface(CRI)。
因此原来在docker中配置的个人仓库环境不再 起作用,导致k8s配置pods时拉取镜像失败。
配置方式
环境支持
通过
kubectl get pods -o wide
查看是否已经采用containerd作为容器运行时。
通过查看版本
ctr -v
ctr github.com/containerd/containerd v1.4.0-106-gce4439a8
使用
containerd config default > /etc/containerd/config.toml
生成默认配置
对配置文件进行修改
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://registry-1.docker.io"] //到此为配置文件默认生成,之后为需要添加的内容
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."10.10.20.71:9998"]
endpoint = ["https://10.10.20.71:9998"]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."10.10.20.71:9998".tls]
insecure_skip_verify = true
[plugins."io.containerd.grpc.v1.cri".registry.configs."10.10.20.71:9998".auth]
username = "admin"
password = "Harbor12345"
其中“10.10.20.71.9998”是私人仓库地址。
insecure_skip_verify = true 意为跳过证书认证。
保存并重启containerd服务即可
systemctl restart containerd
此时即可使用
crictl pull ***
从个人仓库拉取镜像测试是否完好
使用
crictl images list
查看已经存在的images
配置完成后,每个节点都可以从个人仓库获取镜像。但是创建pods时无法拉取谷歌pause3.2镜像,
原因在于containerd配置文件中规定了使用谷歌仓库中的pause3.2镜像。而查看本地镜像后发现本地已经存在pause3.3镜像,将生成的配置文件中的sandbox_image = “k8s.gcr.io/pause:3.2” 改为3.3之后即可正常创建。
同时本地还存在着阿里云仓库的pause3.2镜像。可以通过更改镜像仓库进行配置。