Cos'è un contenitore Kubernetes?
Un contenitore Kubernetes è una macchina virtuale leggera, portatile ed estensibile con memoria, spazio, CPU, filesystem, ecc. È considerato leggero a causa della sua capacità di condividere il sistema operativo tra le applicazioni con proprietà di isolamento rilassate. Inoltre, è portatile in tutto il cloud e ha diverse distribuzioni del sistema operativo. Indipendentemente dall'ambiente in cui si sta eseguendo il cluster di Kubernetes, descriverà sempre lo stesso comportamento per tutti gli ambienti perché le dipendenze incluse in esso standardizzano le sue prestazioni.
Prima dell'evoluzione dei contenitori, è stata utilizzata una macchina virtuale separata per ciascuna applicazione perché eventuali modifiche alle dipendenze condivise da una macchina virtuale possono causare risultati strani. Ciò provoca una perdita di risorse di memoria, spreco della CPU e scarsità di altre risorse. E poi arrivarono i contenitori, che virtualizzarono il sistema operativo host e isolarono le dipendenze per ciascuna applicazione nello stesso ambiente. Il motore del contenitore nel contenitore consente alle applicazioni di utilizzare lo stesso sistema operativo isolato da altre applicazioni in esecuzione sulla macchina virtuale host.
Cos'è un'immagine del contenitore?
Un'immagine del contenitore è la rappresentazione delle dipendenze incluse nel contenitore sotto forma di dati binari. È un pacchetto software eseguibile e pronto per gestire. Contiene tutte le dipendenze tra cui librerie delle applicazioni, librerie di sistema, codice, impostazioni predefinite essenziali, ecc. richiesto per eseguire un'applicazione su qualsiasi ambiente Kubernetes o sistema operativo. Ogni nodo nel contenitore utilizza l'immagine del contenitore per eseguire applicazioni e baccelli su di esso.
Nel cluster Kubernetes, l'agente Kubectl è responsabile dell'esecuzione di immagini di contenitori su ciascun nodo. Tira l'immagine su ciascun nodo presente nel cluster. È anche responsabile di segnalare tutto ciò che accade all'API centrale di Kubernetes. Se l'immagine del contenitore non esiste già sul nodo cluster, Kubectl indica al contenitore di tirare l'immagine al momento di esecuzione.
Qual è l'errore di ImagePullBackoff?
Ci sono alcune situazioni in cui Kubernetes può riscontrare problemi di estrazione dell'immagine del contenitore dal registro del contenitore. Se questi problemi si traducono in un errore, i pod immettono nello stato di ImagePullBackoff. Quando viene creata una nuova distribuzione o una distribuzione esistente viene aggiornata nel cluster Kubernetes, l'immagine del contenitore deve essere estratta. Kubectl tira l'immagine su ciascun nodo lavoratore nel cluster che corrisponde alla richiesta di pianificazione. Quindi, quando Kubectl non riesce a tirare l'immagine, affronta l'errore di ImagePullBackoff.
In altre parole, la sezione "ImagePull" dell'errore ImagePullBackoff si riferisce all'incapacità di Kubernetes di estrarre l'immagine del contenitore da un registro dei contenitori pubblici o privati. La sezione "Backoff" si riferisce al ritardo di backoff in costante aumento che tira l'immagine. Il ritardo di backoff continua ad aumentare con ogni tentativo fino a quando il limite del backoff raggiunge 5 minuti. Il motivo principale o ovvio per l'errore ImagePullBackoff è che Kubernetes non riesce a tirare l'immagine del contenitore in fase di esecuzione. Tuttavia, potrebbero esserci molte cause per questo problema, incluso quanto segue:
Come risolvere l'errore di ImagePullBackoff in Kubernetes?
Se si verifica una qualsiasi delle situazioni indicate sopra, il pod nel cluster finisce nello stato di ImagePullBackoff. Il modo migliore per correggere questo errore è risolvere i problemi del cluster Kubernetes. È possibile risolvere i problemi seguendo le istruzioni di seguito:
Passaggio n. 1: crea un baccello e assegnalo un nome immagine
I baccelli funzionano sui nodi che eseguono il contenitore dell'immagine. Ogni immagine ha un nome specifico e se si fa riferimento a un nome di immagine che non esiste o erroneamente immettere un nome errato comporterà un errore. Qui dimostreremo l'errore di ImagePullBackoff che si verifica a causa di un nome di immagine errato. Quindi, creiamo un baccello e lo assegniamo un nome di immagine senza senso. Possiamo farlo eseguendo il seguente comando:
> kubectl run demo1 -image = nonxentimage/nonxist: BLAIl comando "kubectl run" creerà un pod chiamato 'demo1' e il nome dell'immagine '-image = nonxentimage/nonxista: bla' assegnato ad esso.
Passaggio n. 2: visualizzare tutti i baccelli
Il prossimo passo è visualizzare tutti i pod per verificare il loro stato. Kubectl fornisce il comando "Ottieni" per ottenere l'elenco dei baccelli con le loro proprietà associate come nome, pronto, stato, età, ecc. Usa il comando indicato di seguito per visualizzare tutti i baccelli:
> kubectl ottieni podFare riferimento all'output indicato nello screenshot di seguito:
Dall'output sopra indicato, puoi vedere che ci sono molti baccelli e ognuno ha il suo stato. Alcuni sono nello stato "in esecuzione", alcuni sono nello stato "errimagepull" e alcuni sono nello stato "ImagePullBackoff".
Passaggio n. 3: risolvere i problemi del pod
Ora che sappiamo che ci sono molti baccelli in esecuzione nel cluster, ognuno con il suo status, possiamo esaminare specificamente il pod desiderato. Questo può essere fatto con l'aiuto del comando indicato qui:
> kubectl Descrivi DEMO POD1Il "demo1" è il pod che abbiamo creato in precedenza e il comando "descrivi" ci darà una descrizione dettagliata del pod "Demo1". Fare riferimento all'output indicato di seguito:
Abbiamo esplorato l'errore di ImagePullBackoff nell'ambiente Kubernetes. Abbiamo imparato a conoscere il cluster di Kubernetes, l'immagine del cluster e abbiamo anche esplorato i motivi alla base dell'errore ImagePullBackoff. La ragione principale e ovvia per l'errore ImagePullBackoff è l'incapacità di Kubernetes di tirare un'immagine del contenitore.