Come eseguire il debug di "ImagePullBackOff"?


121

All'improvviso, non riesco a distribuire alcune immagini che potrebbero essere distribuite prima. Ho il seguente stato del 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 

L'applicazione semplicemente non si avvia. Il pod non sta tentando di eseguire il contenitore. Dalla pagina Evento, ho ottenuto Back-off pulling image "172.30.84.25:5000/default/arix@sha256:d326. Ho verificato che posso estrarre l'immagine con il tag con docker pull.

Ho anche controllato il registro dell'ultimo contenitore. Era chiuso per qualche motivo. Penso che il pod dovrebbe almeno provare a riavviarlo.

Ho esaurito le idee per eseguire il debug dei problemi. Cosa posso controllare di più?


È una configurazione multi-macchina? In tal caso, verifica di poter eseguire il pull da tutti i nodi. In caso contrario, attiva la registrazione su --loglevel = 5 sul nodo e riavvia - dovresti vedere le informazioni stampate che descrivono il tentativo di estrarre l'immagine e gli eventuali errori inclusi.
Clayton

Cosa è uscito dopo il riavvio con loglevel = 5?
lvthillo

2
Hai risolto il problema? qualcuno può spiegare questo problema di "ImagePullBackOff"? (le immagini sono presenti nelle mie "immagini
docker

Ho ottenuto questo utilizzando la regione sbagliata per il mio repository. Ho dimenticato di aggiungere eu. a --image = eu.gcr.io / $ PROJECT_ID / ...
Clemens Tolboom

Nel mio caso era il nome del tag sbagliato per l'immagine passata. Ho cambiato il nome del TAG che ha risolto il problema.
Tara Prasad Gurung

Risposte:


118

Puoi usare la sintassi " Descrivi pod "

Per OpenShift utilizzare:

oc describe pod <pod-id>  

Per Kubernetes vaniglia:

kubectl describe pod <pod-id>  

Esamina gli eventi dell'output. Nel mio caso mostra Back-off che estrae core / core dell'immagine: più recente

In questo caso l'immagine coredns / coredns: latest non può essere estratta da Internet.

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

Ulteriori passaggi di debug

  1. prova a estrarre l'immagine docker e taggare manualmente sul tuo computer
  2. Identifica il nodo eseguendo un 'kubectl / oc get pods -o wide'
  3. ssh nel nodo (se puoi) che non può estrarre l'immagine docker
  4. verificare che il nodo possa risolvere il DNS del registro docker eseguendo un ping.
  5. provare a estrarre manualmente l'immagine docker sul nodo
  6. Se stai usando un registro privato, controlla che il tuo segreto esista e che il segreto sia corretto. Anche il tuo segreto dovrebbe essere nello stesso spazio dei nomi. Grazie Swenzel
  7. Alcuni registri hanno firewall che limitano l'accesso all'indirizzo IP. Il firewall potrebbe bloccare il pull
  8. Alcuni elementi della configurazione creano distribuzioni con segreti di finestra mobile temporanei. Quindi il segreto scade dopo pochi giorni (Stai chiedendo errori di produzione ...)

3
Inoltre, nel caso in cui utilizzi un repository di immagini privato, assicurati che i tuoi segreti di pull dell'immagine esistano, non abbiano errori di battitura e siano nello spazio dei nomi corretto.
swenzel

In caso di repository di immagini privato, assicurati anche di fare riferimento ai segreti di pull dell'immagine nel tuo pod utilizzando la voce "imagePullSecrets".
Donato Szilagyi

1
C'è anche un lungo post sul blog che descrive come eseguire il debug approfonditamente qui: managedkube.com/kubernetes/k8sbot/troubleshooting/…
gar

1

Hai provato a modificare per vedere cosa c'è che non va (avevo la posizione dell'immagine sbagliata)

kubectl edit pods arix-3-yjq9w

o addirittura eliminare il tuo pod?

kubectl delete arix-3-yjq9w

0

Ho dimenticato di eseguire il push dell'immagine con tag 1.0.8 nell'ECR (hub di immagini AWS) ... Se stai utilizzando Helm e aggiorna tramite:

aggiornamento del timone minta-user ./src/services/user/helm-chart

assicurati che il tag immagine all'interno di values.yaml sia inviato (a ECR o Docker Hub, ecc.) Ad esempio: (questo è il mio helm-chart / values.yaml)

replicaCount: 1

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

devi assicurarti che l'immagine: 1.0.8 sia spinta!


0

Stavo affrontando il problema simile, ma invece di uno tutti i miei pod non erano pronti e mostravano lo stato Pronto 0/1 Qualcosa di simile inserisci qui la descrizione dell'immagine

Ho provato molte cose ma alla fine ho scoperto che il contesto non era impostato correttamente. Si prega di utilizzare il seguente comando e assicurarsi di essere nel contesto corretto

kubectl config get-contexts


0

Su GKE, se il pod è morto, è meglio controllare gli eventi. Mostrerà più in dettaglio di cosa si tratta.

Nel mio caso, ho avuto:

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

Si è scoperto che l'immagine era in qualche modo danneggiata. Dopo averlo ripushed e distribuito con il nuovo hash, ha funzionato di nuovo.


-9

Esegui login docker

Esegui il push dell'immagine nell'hub Docker

Ricrea il pod

Questo ha risolto il problema per me. Spero che sia d'aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.