Node NotReady
The kubelet stopped reporting, or reported it cannot run pods. Its pods keep showing Running until they are evicted.
Troubleshooting guide · Pod stuck in Terminating
A pod shows Terminating from the moment it is deleted until the kubelet confirms its containers have stopped and every finalizer has been removed. When it stays that way for minutes, one of three things is holding it: a finalizer nothing will clear, a process that ignores the stop signal, or a node that is not there to answer.
Updated
Deleting a pod sets a deletion timestamp and a grace period — thirty seconds unless terminationGracePeriodSeconds says otherwise. The kubelet sends each container SIGTERM, waits out the grace period, then sends SIGKILL. The pod object is removed once the containers have stopped and its finalizers list is empty.
Finalizers still registered on the pod. An empty answer rules them out:
kubectl get pod <pod> -n <namespace> -o jsonpath='{.metadata.finalizers}'
Which node the pod is on:
kubectl get pod <pod> -n <namespace> -o wide
Whether that node is Ready:
kubectl get node <node>
The events, including any failure to stop a container:
kubectl describe pod <pod> -n <namespace>
Both of these remove the pod object without the guarantee deletion normally gives. Use them only once you know why it is stuck.
Force-delete: remove the object now, without waiting for the kubelet to confirm. For a StatefulSet pod this can leave two pods with the same identity running at once:
kubectl delete pod <pod> -n <namespace> --grace-period=0 --force
Clear the finalizers by hand. Whatever the controller meant to clean up is abandoned:
kubectl patch pod <pod> -n <namespace> --type=merge -p '{"metadata":{"finalizers":null}}'
In PodSteer
Read next
The kubelet stopped reporting, or reported it cannot run pods. Its pods keep showing Running until they are evicted.
A node ran short of memory, disk or process IDs and the kubelet reclaimed it by evicting pods — first those using more than they requested.
The container starts, exits and is restarted with a growing delay. Find the reason in the previous attempt's logs and its exit code.