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?

Xiao Peng - ZenUML.com
źródło
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 ...)
rjdkolb
źródło
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
Clemens Tolboom
źródło
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!

cholera
źródło
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

Szorstki
źródło
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.

Vincent Gerris
źródł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.

Shyla
źródło