如何调试"ImagePullBackOff"?

Xia*_*com 75 openshift openshift-origin kubernetes

突然之间,我无法部署一些以前可以部署的图像.我得到了以下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 
Run Code Online (Sandbox Code Playgroud)

该应用程序不会启动.pod没有尝试运行容器.从事件页面,我有Back-off pulling image "172.30.84.25:5000/default/arix@sha256:d326.我已经确认我可以使用标签来拉取图像docker pull.

我还检查了最后一个容器的日志.由于某种原因它被关闭了.我认为pod应该至少尝试重新启动它.

我已经没有想法调试问题了.我还可以查看更多内容?

rjd*_*olb 74

您可以使用' describe pod '语法

对于OpenShift使用:

oc describe pod <pod-id>  
Run Code Online (Sandbox Code Playgroud)

对于香草Kubernetes:

kubectl describe pod <pod-id>  
Run Code Online (Sandbox Code Playgroud)

检查输出的事件.在我的情况下,它显示Back-off牵引图像coredns/coredns:最新

在这种情况下,图像coredns/coredns:最新的不能从互联网上拉出来.

Events:
  FirstSeen LastSeen    Count   From                SubObjectPath           Type        Reason      Message
  --------- --------    -----   ----                -------------           --------    ------      -------
  5m        5m      1   {default-scheduler }                        Normal      Scheduled   Successfully assigned coredns-4224169331-9nhxj to 192.168.122.190
  5m        1m      4   {kubelet 192.168.122.190}   spec.containers{coredns}    Normal      Pulling     pulling image "coredns/coredns:latest"
  4m        26s     4   {kubelet 192.168.122.190}   spec.containers{coredns}    Warning     Failed      Failed to pull image "coredns/coredns:latest": Network timed out while trying to connect to https://index.docker.io/v1/repositories/coredns/coredns/images. You may want to check your internet connection or if you are behind a proxy.
  4m        26s     4   {kubelet 192.168.122.190}                   Warning     FailedSync  Error syncing pod, skipping: failed to "StartContainer" for "coredns" with ErrImagePull: "Network timed out while trying to connect to https://index.docker.io/v1/repositories/coredns/coredns/images. You may want to check your Internet connection or if you are behind a proxy."

  4m    2s  7   {kubelet 192.168.122.190}   spec.containers{coredns}    Normal  BackOff     Back-off pulling image "coredns/coredns:latest"
  4m    2s  7   {kubelet 192.168.122.190}                   Warning FailedSync  Error syncing pod, skipping: failed to "StartContainer" for "coredns" with ImagePullBackOff: "Back-off pulling image \"coredns/coredns:latest\""
Run Code Online (Sandbox Code Playgroud)

额外的调试步骤

  1. 通过执行'kubectl/oc get pods -o wide'来识别节点
  2. ssh进入无法拉动docker镜像的节点
  3. 检查节点是否可以通过执行ping来解析docker注册表的DNS.
  4. 尝试在节点上手动拉动docker镜像
  5. 如果您使用的是私有注册表,请检查您的秘密是否存在且密码是否正确.您的秘密也应该在同一名称空间中.谢谢swenzel
  6. 尝试在本地提取图像

  • 此外,如果您使用私有映像存储库,请确保您的映像存在秘密,没有拼写错误,并且它们位于正确的命名空间中. (3认同)
  • 这些说明已过时——kubernetes 不再提供有关 imagepullbackoff 的详细信息 (3认同)
  • 还有一篇冗长的博客文章描述了如何深入调试此问题:https://managementkube.com/kubernetes/k8sbot/troubleshooting/imagepullbackoff/2019/02/23/imagepullbackoff.html (2认同)