如何调试“ImagePullBackOff”?

时间:2016-01-18 06:24:31

标签: openshift openshift-origin

突然之间,我无法部署一些以前可以部署的图像。我得到了以下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应该至少尝试重新启动它。

我已经没有想法来调试这些问题。我还可以查看更多内容?

11 个答案:

答案 0 :(得分:46)

您可以使用' describe pod '语法

对于OpenShift使用:

oc describe pod <pod-id>  

对于vanilla Kubernetes:

kubectl describe pod <pod-id>  

检查输出的事件。 在我的情况下,它显示 Back-off pull image coredns / coredns:latest

在这种情况下,图像coredns / coredns:latest不能从互联网上提取。

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. 通过执行&#39; kubectl / oc get pods -o wide&#39;来识别节点。
  2. ssh进入无法拉动泊坞窗图像的节点
  3. 检查节点是否可以通过执行ping来解析docker注册表的DNS。
  4. 尝试在节点上手动拉取泊坞窗图像
  5. 如果您使用的是私人注册表,请检查您的secret是否存在且密码是否正确。您的秘密也应该在同一名称空间中。谢谢swenzel
  6. 尝试在本地提取图片

答案 1 :(得分:2)

您是否尝试过编辑以查看错误(我的图像位置错误)

kubectl edit pods arix-3-yjq9w

甚至删除你的pod?

kubectl delete arix-3-yjq9w

答案 2 :(得分:2)

我遇到了类似的情况,结果证明在实现 Docker Desktop 后,我退出了,重新登录后一切正常。

答案 3 :(得分:1)

我在 GKE 上遇到了这个问题,原因是没有 docker 凭据。

运行它解决了它:

gcloud auth configure-docker

答案 4 :(得分:0)

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

  

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

您需要确保图像1..0.8被按下!

答案 5 :(得分:0)

我遇到了类似的问题,但不是所有的吊舱都未准备好,而是显示就绪状态0/1 就像是 enter image description here

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

kubectl配置获取上下文

答案 6 :(得分:0)

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

就我而言,我有:

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

事实证明图像被某种程度损坏。 重新推送并使用新的哈希进行部署后,它又可以工作了。

答案 7 :(得分:0)

运行以下命令: eval $(minikube -p minikube docker-env)

现在构建您的图像。然后在 K8S 中使用相同的图像。 每次打开新 CMD 时都这样做。

答案 8 :(得分:0)

1. type value from to 0 VALUE 93.5 2020-12-01T00:00:00.000+01 2020-12-01T00:00:01.000+01 1 VALUE 75 2020-12-01T00:00:01.000+01 2020-12-01T00:05:01.000+01 2 WARNING NaN 2020-12-01T00:00:01.000+01 2020-12-01T00:05:01.000+01

2.显示哪些 ImagePullBackOff kube-system pods

3.kubectl get pod -n kube-system(重启 pod 并重新创建容器)

4.kubectl delete pod <POD NAME> -n kube-system

享受吧。

答案 9 :(得分:0)

就我而言,使用 Fargate 配置文件时,我的 VPC 中的网络配置不正确。 Fargate 容器需要访问 ECR,这需要一条通往公共互联网的路由。我的私有子网的 NAT 网关位于相同的私有子网中,而它们本应位于公共子网中。在我的案例中,此错误消息是错误配置的结果。

答案 10 :(得分:-8)

运行docker登录

将图像推送到docker hub

重新创建广告连播

这为我解决了问题。希望对您有所帮助。