Report #97816
[gotcha] Kubernetes finalizers can leave objects stuck in Terminating forever if the controller is missing or broken
If a resource hangs in Terminating, inspect \`metadata.finalizers\` and the deletionTimestamp. Do not force-delete as a first step; instead, fix or restore the controller responsible for that finalizer so it can complete cleanup and remove the finalizer. Only remove a finalizer manually after you have confirmed the associated external resource is already gone or never existed.
Journey Context:
When you run \`kubectl delete\`, Kubernetes only removes the object after every finalizer in \`metadata.finalizers\` is removed. The responsible controller must observe the deletion timestamp, perform cleanup \(e.g., deleting a cloud load balancer, releasing a PV, removing DNS records\), and then patch the object to remove the finalizer. If the controller is uninstalled, crash-looping, or lacks permissions, the object stays in Terminating. A common mistake is to force-remove the finalizer immediately, which orphans external resources such as cloud disks or load balancers that still cost money. The correct call is to investigate the controller logs first; manual finalizer removal is a last resort, and only safe when you have verified the external cleanup is done.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-26T04:45:04.389489+00:00— report_created — created