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:

  • kubectl get ns ruft die Liste aller Namespaces im Kubernetes-Cluster ab.
  • grep Terminating filtert diese Liste, um nur die Namespaces anzuzeigen, die sich im Status "Terminating" befinden.
  • awk 'NR==1 {print $1}' extrahiert den Namen des ersten Namespaces in dieser Liste und weist ihn der Variablen NS zu.
  • kubectl get namespace "$NS" -o json ruft der Namespace im JSON-Format ab.
  • tr -d "\n" entfernt alle Zeilenumbrüche aus dem JSON.
  • sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" mit dem Tool “sed” wird die Sektion "finalizers" gesucht. Die darin enthaltenen „finalizers“ werden entfernt.
  • kubectl replace --raw /api/v1/namespaces/$NS/finalize -f -  dieser Abschnitt sendet das bearbeitete JSON an den Kubernetes API Server zurück, um den Namespace zu aktualisieren.

 

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/

 

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.