您可以使用 ' describe pod ' 语法
对于 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 registry 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镜像
- 如果您使用的是私有注册表,请检查您的密钥是否存在并且该密钥是否正确。您的秘密也应该在同一个命名空间中。谢谢斯文泽尔
- 一些注册表具有限制 IP 地址访问的防火墙。防火墙可能会阻止拉取
- 一些 CI 使用临时 Docker 机密创建部署。所以秘密在几天后到期(你要求生产失败......)