“ImagePullBackOff”를 디버깅하는 방법은 무엇입니까?

갑자기 이전에 배포 할 수 있었던 일부 이미지를 배포 할 수 없습니다. 다음 포드 상태를 얻었습니다.

[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.

마지막 컨테이너의 로그도 확인했습니다. 어떤 이유로 폐쇄되었습니다. 포드가 적어도 다시 시작해야한다고 생각합니다.

문제를 디버깅 할 아이디어가 부족합니다. 무엇을 더 확인할 수 있습니까?



답변

describe pod ‘구문을 사용할 수 있습니다.

OpenShift의 경우 :

oc describe pod <pod-id>

바닐라 Kubernetes의 경우 :

kubectl describe pod <pod-id>

출력의 이벤트를 조사하십시오. 제 경우에는 back-off pull 이미지 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. 컴퓨터에서 Docker 이미지를 가져오고 수동으로 태그를 지정하십시오.
  2. ‘kubectl / oc get pods -o wide’를 수행하여 노드를 식별합니다.
  3. Docker 이미지를 가져올 수없는 노드 (가능한 경우)로 ssh
  4. 노드가 ping을 수행하여 docker 레지스트리의 DNS를 확인할 수 있는지 확인하십시오.
  5. 노드에서 Docker 이미지를 수동으로 가져 오십시오.
  6. 개인 레지스트리를 사용하는 경우 비밀 이 존재하고 비밀이 올바른지 확인하십시오. 암호도 동일한 네임 스페이스에 있어야합니다. 감사합니다 swenzel
  7. 일부 레지스트리에는 IP 주소 액세스를 제한하는 방화벽이 있습니다. 방화벽이 풀을 차단할 수 있습니다.
  8. 일부 CI는 임시 Docker 암호를 사용하여 배포를 만듭니다. 따라서 비밀은 며칠 후에 만료됩니다 (제작 실패를 요청합니다 …).

답변

무엇이 잘못되었는지 확인하기 위해 편집을 시도 했습니까 (이미지 위치가 잘못되었습니다)

kubectl edit pods arix-3-yjq9w

아니면 포드를 삭제 하시겠습니까?

kubectl delete arix-3-yjq9w


답변

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 푸시되었는지 확인해야합니다!


답변

비슷한 문제에 직면했지만 하나 대신 모든 포드가 준비되지 않았고 준비 상태 0/1을 표시합니다.
여기에 이미지 설명 입력

많은 것을 시도했지만 마침내 컨텍스트가 올바르게 설정되지 않았 음을 발견했습니다. 다음 명령을 사용하고 올바른 컨텍스트에 있는지 확인하십시오.

kubectl config get-contexts


답변

GKE에서 포드가 작동하지 않으면 이벤트를 확인하는 것이 가장 좋습니다. 오류가 무엇인지 자세히 보여줍니다.

제 경우에는 다음과 같습니다.

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

어떻게 든 이미지가 손상된 것으로 나타났습니다. 이를 거부하고 새 해시로 배포 한 후 다시 작동했습니다.


답변

Docker 로그인 실행

이미지를 Docker 허브로 푸시

포드 다시 만들기

이것은 나를 위해 문제를 해결했습니다. 도움이되기를 바랍니다.


답변