问题

今天在使用 K8S 部署应用时,遇到容器镜像拉取失败的错误 imagepullbackoff ,通过对应用整体资源清单的分析,发现是使用了使用私有仓库镜像,但是没有配置私有仓库,这样就会导致容器无法拉取镜像,这个问题可以通过配置私有仓库来解决。

由于我使用了 Containerd 容器管理器,所以我需要配置私有仓库,并且配置私有仓库的地址为:https://docker.xx.vip. Containerd 没有 docker 配置私有仓库方便,需要修改 Containerd 配置文件进行配置,配置文件在 /etc/containerd/config.toml 中。

配置私有仓库

Containerd 默认没有此配置文件,需要通过命令导出配置文件 containerd config default> /etc/containerd/config.toml (需要提前创建目录)。

接下来我来讲解如何配置私有镜像仓库。

  1. 打开配置文件
  2. 找到 [plugins.“io.containerd.grpc.v1.cri”.registry]
  3. 修改相应配置,具体配置如下:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
 [plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.xx.vip"]
endpoint = ["https://docker.xx.vip"]
[plugins."io.containerd.grpc.v1.cri".registry.auths]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."docker.xx.vip".auth]
username = "xx"
password = "xx"
[plugins."io.containerd.grpc.v1.cri".registry.headers]

  1. 重启 containerd systemctl restart containerd.service

  2. 查看 containerd systemctl status containerd.service

  3. 回到 K8S 重新拉取镜像,可以看到镜像已经顺利拉取

参考