How to fix Pod stuck in Terminating in Kubernetes

KubernetesINTERMEDIATEMEDIUMUpdated Dec 6, 2025· 333 views

Pods stuck in Terminating status have finalizers preventing deletion, unresponsive processes, or node communication issues. Remove finalizers or force delete the pod after investigating the cause.

Quick fix

Fixes Pod stuck in Terminating

kubectl get pod <pod-name> -o yaml | grep -A 5 finalizers
kubectl describe pod <pod-name>
  1. Check why the pod is stuck
  2. Remove finalizers if present
  3. Force delete the pod
  4. Check and restart kubelet if needed
kubernetes — error
kubectl get pod <pod-name> -o yaml | grep -A 5 finalizers
kubectl describe pod <pod-name>
Pod stuck in Terminating

What this error means

When a pod is stuck in Terminating status, Kubernetes has initiated deletion but the pod cannot complete the termination process. The pod has a deletion timestamp set but remains in the cluster indefinitely. This happens when something prevents the graceful shutdown from completing—whether it's a finalizer waiting for an external condition, a process ignoring termination signals, or the node being unreachable. The pod object persists in the API even though the container may have already stopped.

Typical symptoms

  • Pod shows Terminating status for extended periods (hours or days)
  • kubectl delete pod command hangs or returns but pod persists
  • Pod has deletionTimestamp in metadata but remains in cluster
  • kubectl get pods continues to show the terminating pod
  • Associated resources like volumes remain allocated
  • Deployment cannot complete rollout due to stuck pod

Common causes

  1. Finalizers on the pod waiting for external cleanup to complete
  2. Application process not responding to SIGTERM signal
  3. PreStop hook exceeding terminationGracePeriodSeconds
  4. Node hosting the pod is down or unreachable
  5. Persistent volume failing to unmount properly
  6. Network partition between node and control plane
  7. Kubelet crashed or stopped on the hosting node

How to fix "Pod stuck in Terminating"

1Check why the pod is stuck

Inspect the pod for finalizers and status:

bash
kubectl get pod <pod-name> -o yaml | grep -A 5 finalizers
kubectl describe pod <pod-name>

Look for:
- finalizers: section in metadata
- Events showing termination progress
- Node status if pod is stuck on a specific node

Also check the node:

bash
kubectl get nodes
kubectl describe node <node-name>
2Remove finalizers if present

Finalizers block deletion until removed. If the finalizer controller isn't running or can't complete:

bash
kubectl patch pod <pod-name> -p '{"metadata":{"finalizers":null}}'

Or edit directly:

bash
kubectl edit pod <pod-name>
# Remove the finalizers section, save and exit

Caution: Only remove finalizers if you understand what cleanup they were supposed to perform.

3Force delete the pod

If the pod remains stuck after removing finalizers:

bash
kubectl delete pod <pod-name> --grace-period=0 --force

This tells the API server to remove the pod object immediately without waiting for confirmation from the kubelet.

Warning: Force delete doesn't guarantee the container stopped. The process may still be running on the node. Only use when the node is unreachable or you've verified the container is gone.

4Check and restart kubelet if needed

If the node is reachable but kubelet isn't responding:

bash
# SSH to the node
ssh <node-ip>

# Check kubelet status
systemctl status kubelet

# View kubelet logs for errors
journalctl -u kubelet -n 100

# Restart if necessary
sudo systemctl restart kubelet

After kubelet restarts, it will sync state with the API server and complete pending terminations.

5Handle volume unmount issues

Stuck volume unmounts can block termination:

bash
# Check PV/PVC status
kubectl get pv
kubectl get pvc

# Look for volume attachment issues
kubectl describe volumeattachment

For cloud providers, check if the volume is stuck in detaching state in the cloud console. You may need to force-detach the volume.

On the node:

bash
# Check mounted volumes
mount | grep kubernetes
lsof +D /var/lib/kubelet/pods/<pod-uid>/volumes
6Prevent future stuck terminations

Ensure applications handle SIGTERM properly:

python
import signal
import sys

def shutdown(signum, frame):
    # Cleanup code
    sys.exit(0)

signal.signal(signal.SIGTERM, shutdown)

Set appropriate grace periods:

yaml
spec:
  terminationGracePeriodSeconds: 30  # Adjust based on app needs

Use preStop hooks carefully—ensure they complete within the grace period.

Advanced notes

For pods on NotReady nodes, Kubernetes waits for the node-monitor-grace-period (default 40s) then pod-eviction-timeout (default 5m) before marking pods for deletion. During this time, pods show Terminating but can't actually terminate until the node recovers or is removed.

To handle node failures faster:
- Reduce pod-eviction-timeout in controller-manager
- Use pod disruption budgets to control eviction behavior
- Configure node problem detector for faster issue detection

Job tracking finalizers (Kubernetes 1.27+) prevent pod deletion until the Job controller records the pod's final status. If the Job controller is unhealthy, these pods remain stuck. Check kube-controller-manager logs for Job-related errors.

Frequently asked questions

What does "Pod stuck in Terminating" mean?
When a pod is stuck in Terminating status, Kubernetes has initiated deletion but the pod cannot complete the termination process. The pod has a deletion timestamp set but remains in the cluster indefinitely. This happens when something prevents the graceful shutdown from completing—whether it's a finalizer waiting for an external condition, a process ignoring termination signals, or the node being unreachable.
How do I fix "Pod stuck in Terminating"?
Pods stuck in Terminating status have finalizers preventing deletion, unresponsive processes, or node communication issues. Remove finalizers or force delete the pod after investigating the cause.
What causes "Pod stuck in Terminating"?
Finalizers on the pod waiting for external cleanup to complete Application process not responding to SIGTERM signal PreStop hook exceeding terminationGracePeriodSeconds
Is the "Pod stuck in Terminating" error serious?
It is a medium-severity error — more of a blocker than a risk. The steps above resolve it.

Official resources & further reading