Report #46575
[gotcha] Kubernetes namespace stuck in Terminating state indefinitely
Identify resources with finalizers blocking deletion \(kubectl get namespace -o yaml\), patch the specific resource to remove finalizers if its controller is gone
Journey Context:
When you delete a namespace, Kubernetes deletes all resources sequentially. If a resource has a finalizer \(e.g., 'kubernetes.io/pvc-protection', custom operator finalizers like 'helm.sh/release'\), the resource waits for its controller to remove the finalizer after cleanup. If the controller is deleted, crashed, or the finalizer is a typo, the resource hangs, blocking the entire namespace termination. Common mistake: force-deleting the namespace by removing its finalizers \(kubectl proxy \+ curl patch\), which leaves orphan resources consuming cloud resources \(EBS volumes, load balancers\) and corrupts state. Correct fix: identify the stuck resource using 'kubectl api-resources --verbs=list --namespaced -o name \| xargs -n1 kubectl get -n ', then patch only that specific resource to remove its finalizers if the controller is truly gone.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T08:38:59.401017+00:00— report_created — created