Löscht man in K8s Namespaces mit
kubectl delete --all namespaces
kann es vorkommen, dass diese in Terminating hängen bleiben. In diesem Zustand überleben sie sogar reboots. Das ist genau dann schlecht, wenn man erneut einen Namespace mit dem gleichen Namen anlegen möchte.
Das sieht z.B. so aus:
kubectl get namespaces NAME STATUS AGE default Active 5d ingress-nginx Active 8m kube-public Active 5d kube-system Active 5d rook-ceph Terminating 5d rook-ceph-system Active 7m
Um sie los zu werden, holt man sich die Details des Namespaces:
kubectl get namespace rook-ceph -o json { "apiVersion": "v1", "kind": "Namespace", "metadata": { "annotations": { "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"rook-ceph\",\"namespace\":\"\"}}\n" }, "creationTimestamp": "2018-10-18T11:37:08Z", "deletionTimestamp": "2018-10-23T15:00:01Z", "name": "rook-ceph", "resourceVersion": "1197414", "selfLink": "/api/v1/namespaces/rook-ceph", "uid": "251352fd-d2ca-11e8-a615-901b0ee4c07d" }, "spec": { "finalizers": [ "kubernetes" ] }, "status": { "phase": "Terminating" } }
Diese kann man auch in eine json Datei umleiten und editieren.
In diesem Fall möchte man den Eintrag „Kubernetes“ innerhalb von finalizers löschen.
Dann:
curl -H "Content-Type: application/json" -X PUT --data-binary @temp.json http://127.0.0.1:8080/api/v1/namespaces/rook-ceph/finalize <-- statt rook-ceph ist hier der Name des Namespaces einzutragen
kubectl get namespaces
NAME STATUS AGE default Active 5d ingress-nginx Active 12m kube-public Active 5d kube-system Active 5d rook-ceph-system Active 10m
sieht nun besser aus.