突然间,我无法部署一些以前可以部署的映像。我得到以下 Pod 状态:
[root@webdev2 origin]# oc get pods
NAME READY STATUS RESTARTS AGE
arix-3-yjq9w 0/1 ImagePullBackOff 0 10m
docker-registry-2-vqstm 1/1 Running 0 2d
router-1-kvjxq 1/1 Running 0 2d
该应用程序只是无法启动。 Pod 未尝试运行容器。从活动页面,我得到了Back-off pulling image "172.30.84.25:5000/default/arix@sha256:d326
。我已经验证我可以使用标签来提取图像docker pull
.
我还检查了最后一个容器的日志。由于某种原因它被关闭了。我认为 Pod 至少应该尝试重新启动它。
我已经没有办法调试这些问题了。我还可以检查什么?
您可以使用 '描述 Pod' syntax
对于 OpenShift 使用:
oc describe pod <pod-id>
对于普通 Kubernetes:
kubectl describe pod <pod-id>
检查输出的事件。
就我而言,它显示Back-off pulling image unreachableserver/nginx:1.14.22222
在这种情况下图像unreachableserver/nginx:1.14.22222
无法从互联网拉取,因为没有 Docker 注册表 unreachableserver 和镜像nginx:1.14.22222
不存在。
注意:如果您没有看到任何感兴趣的事件,并且 Pod 已处于“ImagePullBackOff”状态一段时间(似乎超过 60 分钟),则需要删除该 Pod 并查看新 Pod 中的事件。
对于 OpenShift 使用:
oc delete pod <pod-id>
oc get pods
oc get pod <new-pod-id>
对于普通 Kubernetes:
kubectl delete pod <pod-id>
kubectl get pods
kubectl get pod <new-pod-id>
示例输出:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 32s default-scheduler Successfully assigned rk/nginx-deployment-6c879b5f64-2xrmt to aks-agentpool-x
Normal Pulling 17s (x2 over 30s) kubelet Pulling image "unreachableserver/nginx:1.14.22222"
Warning Failed 16s (x2 over 29s) kubelet Failed to pull image "unreachableserver/nginx:1.14.22222": rpc error: code = Unknown desc = Error response from daemon: pull access denied for unreachableserver/nginx, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
Warning Failed 16s (x2 over 29s) kubelet Error: ErrImagePull
Normal BackOff 5s (x2 over 28s) kubelet Back-off pulling image "unreachableserver/nginx:1.14.22222"
Warning Failed 5s (x2 over 28s) kubelet Error: ImagePullBackOff
额外的调试步骤
- 尝试在计算机上手动拉取 docker 镜像和标记
- 通过执行“kubectl/oc get pods -o Wide”来识别节点
- ssh 到无法拉取 docker 镜像的节点(如果可以的话)
- 通过执行 ping 检查节点是否可以解析 docker 注册表的 DNS。
- 尝试在节点上手动拉取docker镜像
- 如果您使用的是私人注册表,请检查您的secret https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/存在并且秘密是正确的。您的秘密也应该位于同一名称空间中。谢谢swenzel https://stackoverflow.com/users/2677943/swenzel
- 某些注册中心设有限制 IP 地址访问的防火墙。防火墙可能会阻止拉取
- 一些 CI 使用临时 docker 机密创建部署。所以秘密会在几天后过期(您正在要求生产失败......)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)