Report #4420
[gotcha] kubectl delete hangs indefinitely on resource with finalizer
If the controller managing the finalizer is gone, manually remove the finalizer from the resource using \`kubectl edit\` or \`kubectl patch\` \(accepting potential orphan resources\), or restore the controller to allow graceful finalization. For automated remediation, use a job that patches finalizers on stuck resources older than X.
Journey Context:
Finalizers prevent Kubernetes from deleting an object until external controllers perform cleanup \(e.g., deleting external load balancers, releasing PVCs\). If the controller crashes, is uninstalled, or has RBAC issues, the finalizer remains, and \`kubectl delete\` hangs forever \(resource stays in 'Terminating'\). Many developers use \`--force --grace-period=0\` which only removes from etcd but leaves the finalizer, or they edit the object to remove the finalizer. The alternatives: \(1\) Leave the finalizer and debug the controller \(correct but slow\), \(2\) Remove finalizer manually \(risks orphan resources like cloud load balancers costing money\), \(3\) Use ownerReferences with cascading deletion. The right call is: understand that finalizers are a contract; if the contractor is gone, you must either bring it back or accept the orphan risk and patch the finalizer away.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T19:24:09.389846+00:00— report_created — created