Hängenden Namespaces in K8s los werden

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.

Related Post

RunlevelRunlevel

Linux kennt verschiedene Runlevels, in die jederzeit gezielt gewechselt werden kann. Die genaue Runlevel Definition kann sich von Distribution zu Distribution unterscheiden.