Kubectl Force Elimina Pod

Kubectl Force Elimina Pod
Utilizzando i comandi Kubectl, la rimozione di un baccello da un nodo Kubernetes è un'operazione semplice e non richiede lunghi passaggi. Sia che tu debba eseguire il debug di un nodo, condurre un aggiornamento o ridurre le dimensioni del cluster, eliminare i baccelli è un processo semplice. Tuttavia, prima di eliminare un pod, è necessario seguire una serie di passaggi per garantire che l'applicazione funzioni senza intoppi.

In questo articolo, discuteremo di questi passaggi. Tieni presente, tuttavia, che affrettare questo processo può comportare errori e tempi di inattività dell'applicazione. Ora, discutiamo dell'argomento in dettaglio.

Come eliminare i baccelli di Kubernetes nel modo più semplice?

È necessario prima elencare i pod per eliminare il post nel modo più efficiente. Puoi farlo se usi il comando get pods che è indicato di seguito.

$ kubectl Get pods -o largo

Qui, puoi vedere che il comando Get Pods ha elencato i pod con i dettagli.

Ora, se eliminiamo il pod "pod-tre". Digitare il seguente comando:

$ Kubectl eliminare pod pod-tre

Il comando sopra in cui abbiamo specificato il nome del pod (pod-tre) ha eliminato il pod correttamente.

$ kubectl Get pods -o largo

Elencando tutti i pod, puoi confermare che quello in questione è stato eliminato.

Come puoi verificare nell'immagine apposta sopra, non c'è "pod-tre.'

Come forzare eliminare i baccelli di kubernetes?

Perché è richiesta la cancellazione del pod? Dopo un timeout, il baccello può rimanere bloccato in uno stato terminale/sconosciuto su un nodo irraggiungibile. Questi stati possono verificarsi anche quando un utente cerca di eliminare con grazia un baccello da un nodo inaccessibile. In alcune situazioni, puoi rimuovere con forza/eliminare il pod.

Indipendentemente dal fatto che una cancellazione della forza sia efficace nel distruggere un pod, il nome verrà rimosso immediatamente dall'apiserver. Ciò consentirebbe al controller Statefulset di stabilire un pod di sostituzione con la stessa identità; Ciò potrebbe condurre nella duplicazione di un baccello già eseguito, che, se detto pod, può ancora interagire con altri membri dello stato, violerebbe la sola semantica che lo stato è stato creato per garantire.

La cancellazione della forza manuale deve essere usata attentamente perché può rompere almeno una delle semantiche di Statefulset. StatefulSets può essere utilizzato per eseguire applicazioni distribuite e cluster che richiedono un'identità di rete coerente e un'archiviazione persistente.

La configurazione di queste app si basa spesso su un ensemble comprendente un numero predeterminato di membri con identità fisse. Più membri che condividono le stesse identità potrebbero essere pericolosi e possono finire nella perdita di dati.

Quando si elimina con una forza con la forza, ti assicuri che non comunichi mai più con altri pod nello Statefulset e che la sua identità possa essere liberamente liberata per una sostituzione.

Segui queste procedure per distruggere con forza un pod usando kubectl> = 1.5:

$ kubectl eliminare i pod name di pod --Grace-Period = 0--Force

Se stai usando kubectl> = 1.4, puoi saltare l'argomento -force e invece usare:

$ kubectl Elimina i baccelli nome-pod-grace-periodo = 0

Ora, usando il modo sopra, elimina il pod "pod-due":

$ kubectl elimina pod pod-two--force --grace-period = 0 --namespace = impostazione predefinita

Ecco il risultato del comando sopra quando eseguito.

Si prega di notare che le eliminazioni del pod force non si basano sulla conferma di kubelet che il pod è stato terminato.

Se il pod rimane nello stato sconosciuto dopo l'esecuzione di questi comandi, utilizzare il comando seguente per rimuoverlo dal cluster:

$ kubectl patch pod pod -two -p '"metadata": "finalizer": null'

Controlla se il pod è stato rimosso.

Come rimuovere i baccelli da un nodo tutti in una volta?

Se il tuo nodo ha baccelli non essenziali o baccelli statali, è possibile utilizzare il comando di drenaggio kubectl. Questo passaggio rimuoverà tutti i baccelli dal nodo. Prima di progredire, ricontrollare l'identità del nodo che stai eliminando e assicurarsi che i pod su un determinato nodo possano essere terminati in modo sicuro. L'attività verrà eseguita per te con le seguenti istruzioni.

$ kubectl Ottieni nodi

Dopo il comando Get Pod, utilizzare il seguente comando citato indicato di seguito.

Quindi, prova a utilizzare le seguenti istruzioni citate per drenare tutti i baccelli.

$ kubectl drena

Per garantire che nessun PODS stia ancora operando sul nodo, eseguire di nuovo il comando Get Pods. Se stai usando NOExecute per eseguire i baccelli, saranno comunque sul nodo.

Eseguire il comando di scarico ancora una volta. Ma questa volta la bandiera -force dovrebbe essere inclusa. Questo eliminerà tutti i baccelli dal nodo. Infine, utilizzare il comando KuBectl Elimina nodo per eliminare il nodo dal cluster pertinente.

Come consentire i baccelli di nuovo sui nodi?

Una volta che hai finito di eseguire la manutenzione su un nodo, utilizzare il comando Kubectl UnCordon per riaccendere la pianificazione su quel nodo. Quindi, man mano che i pod diventano disponibili per la pianificazione, riappariranno su quel nodo.

$ Kubectl Uncordon Docker-Desktop

Se si dispone di un nodo appena uncordone o di un nuovo nodo all'interno del cluster, bilanciamento di determinati baccelli potrebbe essere un problema. Sebbene sia meglio lasciare che lo scheduler Kubernetes allocasse i pod se necessario quando si altera la distribuzione/stato, è possibile forzare il processo rimuovendo i baccelli e pianificandoli altrove impiegando alcune delle fasi precedenti.

Conclusione

Potrebbe essere necessario eliminare un singolo pod o più pod da uno dei tuoi nodi durante l'esecuzione del cluster Kubernetes. Esiste la possibilità che potresti aver bisogno di risolvere le difficoltà del nodo, aggiornare un nodo specifico o ridimensionare il cluster. Sebbene l'eliminazione di qualsiasi baccello o baccelli da un nodo non sia molto difficile, ci sono alcuni suggerimenti e tecniche che dovresti seguire per assicurarsi che l'applicazione/programma non venga interrotto. Questo è ciò di cui abbiamo parlato e ampliato in questo articolo. Prima di eseguire qualsiasi istruzione, assicurati di aver letto e compreso a fondo ogni passaggio per evitare di commettere errori che potrebbero provocare tempi di inattività.