Stay organized with collections Save and categorize content based on your preferences.
This page shows you how to resolve issues with a namespace stuck in the Terminating
state.
Namespaces use Kubernetes finalizers to prevent deletion if one or more resources within a namespace still exist. When you delete a namespace using the kubectl delete
command, the namespace enters the Terminating
state. The namespace stays in the Terminating
state until Kubernetes deletes its dependent resources and clears all finalizers. The namespace lifecycle controller first lists all resources in the namespace that GKE needs to delete.
If GKE can't delete a dependent resource, or if the namespace lifecycle controller can't verify that the namespace is empty, then the namespace remains in the Terminating
state until you resolve the issue.
To resolve a namespace stuck in the Terminating
state, identify and remove any unhealthy components blocking the deletion. Try these solutions in order:
List unavailable API services:
kubectl get apiservice | grep False
Troubleshoot any unresponsive services:
kubectl describe apiservice API_SERVICE
Replace API_SERVICE
with the name of the unresponsive service.
Check if the status of the namespace is still Terminating
:
kubectl get ns | grep Terminating
List all the resources remaining in the terminating namespace:
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n NAMESPACE
Replace NAMESPACE
with the name of the namespace you want to delete.
Remove any resources displayed in the output.
Check if the status of the namespace is still Terminating
:
kubectl get ns | grep Terminating
Remove the finalizers blocking namespace deletion to force the namespace to terminate:
Save the namespace manifest as a YAML file:
kubectl get ns NAMESPACE -o yaml > ns-terminating.yml
Open the manifest in a text editor and remove all values in the spec.finalizers
field:
vi ns-terminating.yml
Verify that the finalizers field is empty:
cat ns-terminating.yml
The output should look similar to the following:
apiVersion: v1
kind: Namespace
metadata:
annotations:
name: NAMESPACE
spec:
finalizers:
status:
phase: Terminating
Start an HTTP proxy to access the Kubernetes API:
kubectl proxy
Replace the namespace manifest using curl
:
curl -H "Content-Type: application/yaml" -X PUT --data-binary @ns-terminating.yml http://127.0.0.1:8001/api/v1/namespaces/NAMESPACE/finalize
Check if the status of the namespace is still Terminating
:
kubectl get ns | grep Terminating
If you can't find a solution to your problem in the documentation, see Get support for further help, including advice on the following topics:
google-kubernetes-engine
tag to search for similar issues. You can also join the #kubernetes-engine
Slack channel for more community support.Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2025-08-12 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-12 UTC."],[],[]]
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4