Sometimes a deletion of a Namespace in Kubernetes gets hung up and the kubectl delete namespace command never completes.
Such Namespaces get stuck in a “Terminating” state but can be manually deleted using a Kubernetes API.
This note shows how to force delete the “Terminating” Namespaces in Kubernetes.
Cool Tip: Forcefully delete K8s resources (Pods, Deployments, Services, etc.) stuck in a “Terminating” or “Unknown” state using kubectl! Read more →
Force Delete “Terminating” Namespace in Kubernetes
List the Namespaces that are stuck in the “Terminating” state:
$ kubectl get ns
- sample output -
NAME STATUS AGE
<namespaceName> Terminating 10d
Create a temporary JSON file representing the “Terminating” Namespace:
$ kubectl get ns <namespaceName> -o json > tmp.json
Edit your tmp.json file:
$ vi tmp.json
Remove any values from the spec.finalizers field:
…
"spec": {
"finalizers": [
]
},
…
It should look as follows:

Save the file and start an HTTP proxy to access the Kubernetes API:
$ kubectl proxy
- sample output -
Starting to serve on 127.0.0.1:8001
Keep the command above running and start a new terminal session.
Run the following API call from the new terminal window:
$ curl -k -H "Content-Type: application/json" \
-X PUT \
--data-binary @tmp.json \
http://127.0.0.1:8001/api/v1/namespaces/<namespaceName>/finalize
Verify that the “Terminating” Namespace is removed:
$ kubectl get ns <namespaceName>
- sample output -
Error from server (NotFound): namespaces "<namespaceName>" not found