Come correggere i baccelli Kubernetes bloccati nello stato di terminazione

Come correggere i baccelli Kubernetes bloccati nello stato di terminazione
Il baccello di Kubernetes bloccato si è verificato l'errore di terminazione quando un pod rimane nello stato di "terminazione" per un periodo prolungato. Ciò potrebbe essere causato da diversi problemi distintivi e potrebbe essere piuttosto irritante per gli sviluppatori. La capacità di un pod di interrompere può rimanere intrappolata per una serie di motivi. Sono possibili la carenza di risorse e i problemi relativi al pod. Indipendentemente dal problema, il problema di terminazione bloccato del pod Kubernetes può essere un grande mal di testa per gli sviluppatori e può causare ritardi estremi nella distribuzione delle applicazioni. Questo articolo si occupa delle cause di questo problema e della loro soluzione passo-passo. Puoi conoscere il problema e come risolverlo in dettaglio proprio qui.

Cosa causa questo problema?

Riconoscere la causa principale di questo problema è un passo fondamentale per risolvere questo problema. Alcuni motivi per cui i pod potrebbero rimanere bloccati in uno "stato di risoluzione" includono:

Motivo n. 1: mancanza di risorse

I pod Kubernetes richiedono una quantità adeguata di risorse per funzionare senza problemi. Se non è presente un numero insufficiente di risorse, più pod possono iniziare a competere tra loro per le risorse, che di conseguenza possono causare bloccato uno dei pod.

Motivo n. 2: problemi con il pod stesso

Un problema con la configurazione o il codice del POD può comportare il fatto di essere bloccato in uno stato di terminazione. Se ci sono finalizzatori nel pod, il problema della radice potrebbe essere che i finalizzatori non siano completati. Potrebbe anche accadere che il pod non risponda al segnale di terminazione.

Motivo n. 3: un nodo sottostante può essere rotto

Ogni volta che i baccelli di Kubernetes non usciranno dalla condizione di terminazione, il nodo sottostante non malfunzionerà il malfunzionamento. Quando ciò ha luogo, le app potrebbero inoltre non riuscire a pianificare l'indisponibilità. Questo potrebbe diventare uno scarico finanziario per la tua organizzazione a causa del fatto che questo problema può causare un ridimensionamento inutile. Può essere difficile per molti team diagnosticare questo problema perché i baccelli di Kubernetes termina frequentemente, rendendo difficile dire quali sono rimasti troppo a lungo. Risolvere questo problema è complesso perché il drenaggio del nodo in Kubernetes deve essere configurato in modo da lavorare per il tuo ambiente.

Se si vede dal file di configurazione che tutti i pod su un singolo nodo sono nello stato di "terminazione", questo potrebbe essere il problema.

Come risolvere questo problema?

I seguenti modi possono aiutarti a risolvere facilmente il problema.

Eliminazione del baccello

Innanzitutto, dovrai provare a eliminare manualmente il pod facendo i seguenti passaggi:

  1. kubectl elimina -WAIT = falso pod
  2. Kubectl ELETE -GRACE -PERIOD = 1 POD
  3. Kubectl ELETE -GRACE -PERIOD = 0 -Force Pod

Tuttavia, ci sono poche possibilità che la rimozione manuale del pod dallo spazio dei nomi aiuti a risolvere il problema anche se si dà il nome esatto del pod che desideri eliminare.

In tal caso, il problema potrebbe essere che il pod non sta finendo perché un determinato processo non sta reagendo a un segnale. Quindi, dovrai comandare il pod per essere rimosso con forza usando il seguente comando:

> kubectl elimina pod [name_of_the_pod] --grace -period = 0 - -force kubectl delete pod [name_of_the_pod] --graceperiod = 0 - -force -n [name_of_the_namespace]

Assicurati di aggiungere il nome del tuo pod nel comando se si trova in uno spazio dei nomi dedicato.

Rimozione dei finalizzatori

Se la rimozione del pod non funziona con forza, il problema principale potrebbe essere con il pod stesso. Un problema comune con il pod è l'incapacità dei finalizzatori in esso completato, che potrebbe essere il problema principale che sta causando il bloccato del pod in uno stato di risoluzione. Quindi, avrai bisogno di prima per verificare i finalizzatori nel pod ottenendo la configurazione del pod:

> kubectl get pod -n [namespace] -p [name_of_the_pod] -o yaml> /tmp /config_file.TXT

Quindi, cerca sotto i metadati per la sezione Finalizzatori. Se vengono trovati finalizzatori, dovrai rimuoverli facendo quanto segue:

> kubectl patch pod [name_of_the_pod] -p '"metadata": "finalizer": null'

Riavvia il kubelet

Se le soluzioni menzionate non risolvono questo problema, allora dovresti provare a riavviare il kubelet. Tuttavia, potrebbe essere necessario coinvolgere un amministratore se non si dispone dell'autorizzazione. Se hai accesso, è necessario riavviare il processo di kubelet mediante sshing nel nodo.

Come evitare che i pod siano bloccati in futuro?

Questi sono alcuni passaggi che puoi fare per assicurarsi che questo problema non si verifichi in primo luogo:

  • Controlla a fondo i pod prima per vedere se funzionano correttamente prima di distribuirli.
  • Assicurati di avere risorse sufficienti. Una mancanza di risorse può far iniziare i pod a competere tra loro per le risorse, che di conseguenza possono causare bloccato uno dei pod.
  • Assicurati che i tuoi baccelli non consumino troppe risorse.
  • Assicurati di mantenere aggiornato il tuo cluster Kubernetes per evitare problemi in futuro.
  • Controlla costantemente per vedere se ci sono problemi con la configurazione o il codice dei pod.

Conclusione

I problemi che possono sorgere a seguito del fatto che un pod sia bloccato nello stato terminale rendono utile prendere ulteriori misure per garantire, prima di distribuire, che non ci siano problemi con il pod stesso, ad esempio, potrebbe esserci un problema con la configurazione del pod che molto probabilmente farà bloccare il pod nello stato di terminazione. Dovresti anche stare molto attento a evitare le cose che potrebbero causare questo problema, come la mancanza di risorse o il cluster Kubernetes non è aggiornato. Se questo problema si verifica ancora nonostante abbia preso le misure necessarie per evitarlo, la prima cosa che dovrà essere fatta sarà per individuare la causa principale di questo problema e utilizzare una soluzione di conseguenza.