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:
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.TXTQuindi, 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:
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.