我正在尝试使用
kubectl create deploy demo-backend --image docker.io/myrepe/myimage:1.0.0
创建一个 kubernetes 部署对象
然而,得到
ErrImagePull error:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 21s default-scheduler Successfully assigned default/demo-backend-54c679bc45-t5hz9 to worker1
Normal BackOff 19s kubelet Back-off pulling image "docker.io/myrepe/myimage:1.0.0"
Warning Failed 19s kubelet Error: ImagePullBackOff
Normal Pulling 5s (x2 over 20s) kubelet Pulling image "docker.io/myrepe/myimage:1.0.0"
Warning Failed 4s (x2 over 19s) kubelet Failed to pull image "docker.io/myrepe/myimage:1.0.0": reading manifest 1.0.0 in docker.io/myrepe/myimage:1.0.0 requested access to the resource is denied
该镜像是公共镜像,我可以直接使用
docker pull myrepe/myimage:1.0.0
拉取镜像
您遇到的错误表明,由于访问限制,kubernetes 无法从 docker 注册表中提取镜像。虽然您可以直接使用 docker pull 拉取镜像,但 kubernetes 需要正确的身份验证才能访问镜像。缺少凭据将导致访问被拒绝错误,从而阻止提取映像。
检查以下两个故障排除步骤:
如果您看到请求访问资源被拒绝 - 消息,则您需要提供注册表凭据,以便 Kubernetes 可以拉取映像。
为此,您必须创建一个包含您的 registry 用户凭据的 Kubernetes 密钥:
$ kubectl 创建秘密 docker-registry docker-registry-credentials
--docker-server=https://index.docker.io/v1/ --docker-username=用户 --docker-password=密码 [电子邮件受保护]
上面显示的命令将创建一个名为 docker-registry-credentials 的机密。接下来,您必须调整 Pod 的清单。因此,它引用了spec.imagePullSecrets字段中的秘密:
api版本:v1种类:Pod元数据:名称:demo-pod规范:容器:-名称:nginx图像:nginx:最新imagePullSecrets:-名称:docker-registry-credentials
Kubernetes 现在在拉取 Pod 镜像时将使用您的密钥中的凭据。您的节点将正确地向镜像注册表进行身份验证,允许拉取镜像,并修复 ImagePullBackOff 错误。
注意: 要在 Kubernetes 故障排除例程中修复 ImagePullBackOff 错误,请首先检查应用程序清单。确认映像名称、标签和/或摘要值已正确配置,并且它们与容器注册表的配置相匹配。