Report #9323
[gotcha] Kubernetes resource stuck in Terminating state due to finalizers
Force-remove the finalizers array using a JSON patch: \`kubectl patch / --type='json' -p='\[\{"op": "remove", "path": "/metadata/finalizers"\}\]'\`. For Pods only, \`--force --grace-period=0\` works. Before patching, verify if the controller is recoverable—if the external resource \(e.g., cloud load balancer\) still exists, manually clean it up first to avoid orphaned resources.
Journey Context:
Finalizers prevent Kubernetes from deleting an object until external cleanup completes \(e.g., deleting an external cloud load balancer\). If the controller crashes, the external API is unreachable, or the finalizer logic has a bug, the object hangs in Terminating forever. Users often try \`kubectl delete --force\` which only works for Pods, or they delete the namespace \(which also hangs because the namespace waits for all objects to terminate\). The key insight is that Kubernetes only removes the object after the \`metadata.finalizers\` array is empty; patching it directly is the escape hatch, but should only be done after verifying the external resource is truly gone or no longer needed.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T07:49:55.029349+00:00— report_created — created