如何调试“ ImagePullBackOff”?


119

突然之间,我无法部署一些以前可以部署的映像。我得到以下吊舱状态:

[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 

该应用程序将无法启动。吊舱未尝试运行容器。从“活动”页面,我得到了Back-off pulling image "172.30.84.25:5000/default/arix@sha256:d326。我已验证可以使用拖动带有标签的图像docker pull

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

我已经没有足够的想法来调试问题了。我还能检查什么?


这是多机设置吗?如果是这样,请确认您可以从所有节点中提取。如果没有,请在该节点上将日志记录设置为--loglevel = 5并重新启动-您应该看到打印的信息,描述了拉取映像的尝试以及所包含的任何错误。
克莱顿

以loglevel = 5重新启动后会发生什么?
lvthillo '16

2
您解决问题了吗?有人可以解释“ ImagePullBackOff”问题吗?(图像已存在于我的“
docker

我通过为我的回购使用了错误的区域来实现此目的。我忘了加欧盟。--image = eu.gcr.io / $ PROJECT_ID / ...
Clemens Tolboom

就我而言,这是所传递图像的标记名称错误。我更改了TAG名称,从而解决了该问题。
塔拉·普拉萨德·古隆

Answers:


118

您可以使用' describe pod '语法

对于OpenShift,请使用:

oc describe pod <pod-id>  

对于香草Kubernetes:

kubectl describe pod <pod-id>  

检查输出事件。在我的情况下,它显示了退避拉图像coredns / coredns:latest

在这种情况下,映像coredns / coredns:latest无法从Internet提取。

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\""

其他调试步骤

  1. 尝试拉docker图像并在计算机上手动标记
  2. 通过执行“ kubectl / oc get pods -o wide”来识别节点
  3. ssh进入无法拉出docker映像的节点(如果可以)
  4. 通过执行ping检查节点是否可以解析docker注册表的DNS。
  5. 尝试在节点上手动拉docker镜像
  6. 如果您使用的是私人注册表,请检查您的机密是否存在并且该机密是否正确。您的机密也应位于同一名称空间中。谢谢swenzel
  7. 一些注册表具有限制IP地址访问的防火墙。防火墙可能会阻止拉动
  8. 一些配置项使用临时docker机密创建部署。因此,秘密会在几天后过期(您正在要求生产失败...)

3
另外,如果您使用私有映像存储库,请确保存在您的映像提取秘密,没有错别字,并且它们在正确的命名空间中。
swenzel

如果是专用映像存储库,还请确保使用“ imagePullSecrets”条目引用您的pod中的映像拉密钥。
Donato Szilagyi

1
还有一个漫长的博客帖子描述如何在这里深入调试此: managedkube.com/kubernetes/k8sbot/troubleshooting/...
雀鳝

1

您是否尝试编辑以查看有什么问题(我的图片位置有误)

kubectl edit pods arix-3-yjq9w

甚至删除您的Pod?

kubectl delete arix-3-yjq9w

0

我忘了将标记为1.0.8的图像推送到ECR(AWS图像中心)...如果使用Helm并通过以下方式升级:

掌舵升级minta-user ./src/services/user/helm-chart

确保将values.yaml中的图像标签推送到(例如ECR或Docker Hub等):(这是我的helm-chart / values.yaml)

replicaCount: 1

image:
   repository:dkr.ecr.us-east-1.amazonaws.com/minta-user
   tag: 1.0.8

您需要确保已推送image:1.0.8!


0

我遇到了类似的问题,但不是所有吊舱都未准备好,而是显示就绪状态0/1,就像这样 在此处输入图片说明

我尝试了很多事情,但最后我发现上下文设置不正确。请使用以下命令并确保您处于正确的上下文中

kubectl配置获取上下文


0

在GKE上,如果吊舱已死,则最好检查事件。它将更详细地显示错误的原因。

就我而言,我有:

Failed to pull image "gcr.io/project/imagename@sha256:c8e91af54fc17faa1c49e2a05def5cbabf8f0a67fc558eb6cbca138061a8400a":
 rpc error: code = Unknown desc = error pulling image configuration: unknown blob

原来图像被某种方式损坏了。刷新并使用新的哈希进行部署后,它又可以工作了。


-9

运行docker登录

将图像推送到Docker Hub

重新创建吊舱

这为我解决了问题。希望能帮助到你。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.