How to force delete a Kubernetes Namespace? How to force delete a Kubernetes Namespace? kubernetes kubernetes

How to force delete a Kubernetes Namespace?


The kubectl proxy try is almost correct, but not quite. It's possible using JSON instead of YAML does the trick, but I'm not certain.

The JSON with an empty finalizers list:

~$ cat ns.json{  "kind": "Namespace",  "apiVersion": "v1",  "metadata": {    "name": "delete-me"  },  "spec": {    "finalizers": []  }}

Use curl to PUT the object without the problematic finalizer.

~$ curl -k -H "Content-Type: application/json" -X PUT --data-binary @ns.json http://127.0.0.1:8007/api/v1/namespaces/delete-me/finalize{  "kind": "Namespace",  "apiVersion": "v1",  "metadata": {    "name": "delete-me",    "selfLink": "/api/v1/namespaces/delete-me/finalize",    "uid": "0df02f91-6782-11e9-8beb-42010a800137",    "resourceVersion": "39047",    "creationTimestamp": "2019-04-25T17:46:28Z",    "deletionTimestamp": "2019-04-25T17:46:31Z",    "annotations": {      "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"delete-me\"},\"spec\":{\"finalizers\":[\"foregroundDeletion\"]}}\n"    }  },  "spec": {  },  "status": {    "phase": "Terminating"  }}

The Namespace is deleted!

~$ kubectl get ns delete-meError from server (NotFound): namespaces "delete-me" not found


I loved this answer extracted from here

In one terminal:

kubectl proxy

In another terminal:

kubectl get ns delete-me -o json | \  jq '.spec.finalizers=[]' | \  curl -X PUT http://localhost:8001/api/v1/namespaces/delete-me/finalize -H "Content-Type: application/json" --data @-


kubectl get ns delete-me -o json | jq '.spec.finalizers = []' | kubectl replace --raw "/api/v1/namespaces/your-ns/finalize" -f -