Kubernetes Namespace im "Terminating"-Status löschen

Es kann vorkommen, dass ein Kubernetes Namespace, den Sie löschen möchten, den Status "Terminating" hat. Hier finden Sie die Lösung für dieses Problem.

Die folgende Befehlskette kann den hängenden Namespace bereinigen:

NS=`kubectl get ns |grep Terminating | awk 'NR==1 {print $1}'` && kubectl get namespace "$NS" -o json | tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" | kubectl replace --raw /api/v1/namespaces/$NS/finalize -f -

Quelle: vmware.com

 

Erklärung der Befehlskette:

 

sed - Tool

sed (Abkürzung für "stream editor") ist ein Kommandozeilenwerkzeug, das zum Editieren von Text in Datenströmen oder Dateien verwendet wird.

z.B. nach einem bestimmten Textmuster suchen und durch andere Textstrings ersetzen, die Zeilen basierend auf Mustern löschen usw. Mehr dazu: https://de.wikipedia.org/wiki/Sed

Finalizer

Ein "Finalizer" ist ein Mechanismus in Kubernetes, der es ermöglicht, bestimmte Aktionen auszuführen, bevor eine Ressource (z.B. ein Pod, ein Service oder wie hier beschrieben ein Namespace) endgültig aus dem System gelöscht wird.

Mehr dazu in der Originaldokumentation: https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/