Jak debugować „ImagePullBackOff”?


125

Nagle nie mogę wdrożyć niektórych obrazów, które mogłyby zostać wdrożone wcześniej. Mam następujący stan kapsuły:

[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 

Aplikacja po prostu się nie uruchamia. Kapsuła nie próbuje uruchomić kontenera. Ze strony wydarzenia mam Back-off pulling image "172.30.84.25:5000/default/arix@sha256:d326. Sprawdziłem, czy mogę wyciągnąć obraz z tagiem za pomocą docker pull.

Sprawdziłem też log ostatniego kontenera. Z jakiegoś powodu było zamknięte. Myślę, że kapsuła powinna przynajmniej spróbować ją ponownie uruchomić.

Skończyły mi się pomysły na debugowanie problemów. Co mogę sprawdzić więcej?


Czy to jest konfiguracja dla wielu maszyn? Jeśli tak, sprawdź, czy możesz wyciągnąć ze wszystkich węzłów. Jeśli nie, włącz logowanie do --loglevel = 5 w węźle i zrestartuj - powinieneś zobaczyć wydrukowane informacje opisujące próbę ściągnięcia obrazu i wszelkie dołączone błędy.
Clayton

Co wyszło po ponownym uruchomieniu z loglevel = 5?
lvthillo

2
Czy rozwiązałeś problem? czy ktoś może wyjaśnić ten problem „ImagePullBackOff”? (obrazy istnieją w moich „obrazach
docker

Mam to, używając niewłaściwego regionu dla mojego repozytorium. Zapomniałem dodać eu. to --image = eu.gcr.io / $ PROJECT_ID / ...
Clemens Tolboom

W moim przypadku była to zła nazwa tagu dla przekazywanego obrazu. Zmieniłem nazwę TAG, co rozwiązało problem.
Tara Prasad Gurung

Odpowiedzi:


127

Możesz użyć składni „ opisz pod

Do użytku z OpenShift:

oc describe pod <pod-id>  

W przypadku waniliowego Kubernetes:

kubectl describe pod <pod-id>  

Sprawdź zdarzenia w wyniku. W moim przypadku pokazuje Back-off pulling image coredns / coredns: najnowsze

W tym przypadku obrazu coredns / coredns: latest nie można pobrać z Internetu.

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

Dodatkowe kroki debugowania

  1. spróbuj ręcznie pobrać obraz dockera i otagować go na swoim komputerze
  2. Zidentyfikuj węzeł, wykonując polecenie „kubectl / oc get pods -o wide”
  3. ssh do węzła (jeśli możesz), który nie może pobrać obrazu dockera
  4. sprawdź, czy węzeł może rozwiązać DNS rejestru Dockera, wykonując polecenie ping.
  5. spróbuj ręcznie wyciągnąć obraz dockera w węźle
  6. Jeśli korzystasz z prywatnego rejestru, sprawdź, czy Twój sekret istnieje i czy jest poprawny. Twój sekret również powinien znajdować się w tej samej przestrzeni nazw. Dzięki swenzel
  7. Niektóre rejestry mają zapory, które ograniczają dostęp do adresu IP. Zapora może blokować ściąganie
  8. Niektóre CI tworzą wdrożenia z tymczasowymi sekretami Dockera. Tak więc sekret wygasa po kilku dniach (prosisz o awarie produkcyjne ...)

3
Ponadto, w przypadku korzystania z prywatnego repozytorium obrazów, upewnij się, że sekrety ściągania obrazu istnieją, nie zawierają literówki i znajdują się we właściwej przestrzeni nazw.
swenzel

W przypadku prywatnego repozytorium obrazów upewnij się również, że odwołujesz się do sekretów ściągania obrazu w swoim pod przy użyciu wpisu „imagePullSecrets”.
Donato Szilagyi

1
Jest tam również długi wpis na blogu opisujący, jak dogłębnie debugować to tutaj: managedkube.com/kubernetes/k8sbot/troubleshooting/…
gar

1

Czy próbowałeś edytować, aby zobaczyć, co jest nie tak (miałem złą lokalizację obrazu)

kubectl edit pods arix-3-yjq9w

lub nawet usunąć swój pod?

kubectl delete arix-3-yjq9w

0

Zapomniałem przesłać obraz oznaczony jako 1.0.8 do ECR (centrum obrazów AWS) ... Jeśli używasz Helm i uaktualnij przez:

helm upgrade minta-user ./src/services/user/helm-chart

upewnij się, że tag obrazu wewnątrz values.yaml został przekazany (do ECR lub Docker Hub itp.), na przykład: (to jest mój helm-chart / values.yaml)

replicaCount: 1

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

musisz się upewnić, że obraz: 1.0.8 jest wciśnięty!


0

Miałem podobny problem, ale zamiast jednego wszystkie moje kapsuły nie były gotowe i wyświetlały stan gotowości 0/1 Coś w rodzaju wprowadź opis obrazu tutaj

Próbowałem wielu rzeczy, ale w końcu stwierdziłem, że kontekst nie jest poprawnie ustawiony. Użyj następującego polecenia i upewnij się, że jesteś w odpowiednim kontekście

kubectl config get-contexts


0

W GKE, jeśli kapsuła jest martwa, najlepiej sprawdzić zdarzenia. Bardziej szczegółowo pokaże, o co chodzi w błędzie.

W moim przypadku miałem:

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

Okazało się, że obraz został w jakiś sposób uszkodzony. Po ponownym przesłaniu i wdrożeniu z nowym hashem, znowu zadziałało.


-10

Uruchom logowanie do platformy Docker

Wypchnij obraz do centrum Docker

Utwórz ponownie pod

To rozwiązało problem. Mam nadzieję, że to pomoże.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.