Correzione di Kubernetes ImagePullBackoff

Correzione di Kubernetes ImagePullBackoff

Se hai lavorato con Kubernetes da molto tempo, probabilmente hai incontrato la condizione di ImagePullBackoff. Se non hai familiarità con questo problema, può essere frustrante. Quindi in questo articolo, ti porterai attraverso le basi di questo problema, come risolverlo, quali sono alcune ragioni tipiche e da dove cominciare se lo affronti.

Qual è l'errore di ImagePullBackoff?

Il problema di ImagePullBackoff è causato dal momento in cui il runtime del container Kubernetes non è in grado di recuperare l'immagine da un registro dei container pubblici o privati. Kubernetes tirerà costantemente l'immagine con un crescente ritardo di backoff, come indicato dal componente di backoff. Ad ogni tentativo, Kubernetes aumenterà il ritardo fino a quando non soddisferà la restrizione di cinque minuti.

Può sembrare un'ampia dichiarazione suggerire che il runtime del contenitore (che si tratti di docker, contenitore o qualcos'altro) non riesce a recuperare l'immagine dal registro, ma diamo un'occhiata alle varie cause che puoi trovare nella sezione successiva.

Le sezioni precedenti esaminano i vari motivi per cui il tuo baccello può essere nello stato di ImagePullBackoff quando si avvia il contenitore. Imparerai anche come risolvere i problemi e risolvere questo temuto errore.

Cosa provoca l'errore di ImagePullBackoff?

Di seguito sono riportati alcuni dei motivi per cui il tuo pod potrebbe essere bloccato nello stato di ImagePullbackoff:

  • Immagine non disponibile
  • Il nome o il tag per l'immagine non è corretto.
  • L'immagine privata viene utilizzata e c'è un problema con l'autenticazione.
  • C'è una difficoltà con la rete.
  • Il nome del registro è inaccurato.
  • Limiti di tariffa per i registri dei container
  • Il pod non ha accesso all'immagine perché manca le credenziali necessarie.
  • Limiti sui tassi di registro

Come risolvere i problemi di ImagePullbackoff?

Diamo un'occhiata ad alcune delle probabili cause elencate nell'elenco proiettato.

1. L'immagine del contenitore non è disponibile o il nome utilizzato è inaccurato
Il problema viene generalmente generato se esiste un refuso o il fatto che l'immagine spinta al registro del contenitore è fallita, ma ti riferisci a un'immagine che non c'è. Cerchiamo di ricreare questo creando un pod con un nome di immagine fittizia. Il seguente comando raggiunge questo.

$ kubectl esegui newapp --image = my_image/my_image: ultimo

Come puoi vedere, il pod viene creato.

Se proviamo a ottenere i dettagli del pod con il comando get pod come puoi vedere di seguito.

$ Kubectl ottieni pod

Qui, è mostrato che l'immagine non è lì e non siamo in grado di tirarla.

È possibile utilizzare il comando Kubectl Descrivi allo scopo di scoprire la causa principale e trovare maggiori informazioni su questo problema. Poiché il comando produce molto output, mostreremo solo le sezioni che sono pertinenti alla nostra discussione. Il messaggio di errore reale è visualizzato nel seguente output in Eventi nella colonna del messaggio:

$ Kubectl descrivi pod newapp

Alcune sezioni del risultato prodotto sono le seguenti dopo l'esecuzione del comando Descrive.

2. Tag non esiste
È possibile che i tag di immagine che stai cercando di ottenere siano stati ritirati o che tu abbia digitato il nome del tag errato. In alcune circostanze, il tuo pod rimarrà bloccato nello stato di ImagePullbackoff ancora una volta, come mostrato nel campione di codice seguente. Per riprodurre questo problema, abbiamo usato intenzionalmente il nome del tag errato, anziché l'ultimo.

$ kubectl run appptwo --image = nginx: lates

Il comando sopra ha creato il pod con il nome che hai dato.

Successivamente, otteniamo i dettagli del pod con il comando get pod.

$ kubectl ottieni pod

Di conseguenza, l'immagine tira fallisce.

Ora stiamo di nuovo usando il comando Descrive per comprendere la causa di questo stato.

$ kubectl Descrivi pod appwo

In questa sezione di eventi, puoi vedere il motivo dell'errore ImagePullBackoff.

Il motivo è mostrato chiaramente qui per la tua migliore comprensione.

3. Credenziali sbagliate e registro delle immagini private

Qui, stiamo cercando di riprodurre il problema e per questo, abbiamo mangiato un pod che cerca di estrarre un'immagine da un registro privato.

$ kubectl run appthree --image = docker.io/hiyou/nameofimage

Il comando sopra fornisce il seguente risultato.

Successivamente, abbiamo eseguito il comando Descrive.

Il comando descritto mostra i dettagli complessivi del pod e menziona anche i motivi alla base dell'errore di ImagePullBackoff.

Non abbiamo aggiunto un segreto a Kubernetes o incluso un riferimento ad esso nella definizione del pod. Il pod rimarrà bloccato nello stato di ImagePullbackoff ancora una volta e la notifica verifica che l'accesso al registro è negata:

È possibile creare un segreto con il comando kubectl di seguito per correggere questo errore. Il comando kubectl viene quindi utilizzato per creare un segreto per un registro Docker (privato).

4. Limiti di tasso di registro

Se verifichi alcune delle tue credenziali come l'URL del registro, i dettagli e il nome del tag, è possibile ottenere ImagePullBackoff a causa dei limiti dei tassi del registro. Ora puoi estrarre solo 100 contenitori ogni sei ore su Docker Hub. Se fornisci i tuoi dettagli di accesso, questo salirà a 200 tiri ogni sei ore. In un cluster vivace con numerosi baccelli spesso schierati, quel limite potrebbe essere raggiunto rapidamente.

Dovrai aspettare fino a quando il limite non viene raggiunto dopo un limite di tempo specifico. Kubernetes dovrebbe ora essere in grado di tirare con successo l'immagine e iniziare i pod.

Prendi in considerazione l'uso di un registro in cluster insieme a un proxy per memorizzare nella cache le immagini pertinenti. Questo può aiutarti a rimanere all'interno dei vincoli di velocità riducendo il numero di volte in cui si colpisce i server di Docker.

Conclusione

Quando un nodo non riesce a tirare un'immagine, i baccelli di Kubernetes vanno nello stato di ImagePullBackoff. Kubelet tenterà regolarmente la trazione, quindi i problemi temporanei non richiedono alcun intervento manuale. Questo articolo ha discusso di ImagePullBackoff e tre potenziali fonti del problema. Sebbene potrebbero esserci diverse cause, leggere il messaggio di errore può rivelare rapidamente la vera causa del problema. Se si esaminano e segui le procedure sopra, risolvere questo problema dovrebbe essere semplice.