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


122

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

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

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

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


다중 시스템 설정입니까? 그렇다면 모든 노드에서 가져올 수 있는지 확인하십시오. 그렇지 않은 경우 노드에서 --loglevel = 5에 대한 로깅을 설정하고 다시 시작합니다. 이미지 가져 오기 시도와 포함 된 오류를 설명하는 정보가 인쇄되어 있어야합니다.
Clayton

loglevel = 5로 다시 시작한 후 무엇이 나왔습니까?
lvthillo

2
문제를 해결 했습니까? 누군가 'ImagePullBackOff'의이 문제를 설명 할 수 있습니까? (이미지가 내 'docker 이미지'에 있음)
ItayB

내 저장소에 잘못된 영역을 사용하여 이것을 얻었습니다. EU 를 추가하는 것을 잊었습니다 . to --image = eu.gcr.io / $ PROJECT_ID / ...
Clemens Tolboom

제 경우에는 전달되는 이미지에 대한 잘못된 태그 이름이었습니다. 문제를 해결 한 TAG 이름을 변경했습니다.
Tara Prasad Gurung

답변:


120

' 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 암호를 사용하여 배포를 만듭니다. 따라서 비밀은 며칠 후에 만료됩니다 (제작 실패를 요청합니다 ...).

3
또한 비공개 이미지 저장소를 사용하는 경우 이미지 풀 시크릿이 존재하고 오타가 없는지, 올바른 네임 스페이스에 있는지 확인하세요.
swenzel

비공개 이미지 저장소의 경우 "imagePullSecrets"항목을 사용하여 포드의 이미지 풀 시크릿을 참조해야합니다.
Donato Szilagyi

1
여기에 심도있는 디버깅 방법을 설명하는 긴 블로그 게시물도 있습니다. managedkube.com/kubernetes/k8sbot/troubleshooting/…
gar

1

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

kubectl edit pods arix-3-yjq9w

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

kubectl delete arix-3-yjq9w

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


0

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

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

kubectl config get-contexts


0

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

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

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

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


-10

Docker 로그인 실행

이미지를 Docker 허브로 푸시

포드 다시 만들기

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.