Skip to main content
Finished Job Pods are normally in the Succeeded or Failed phase and don’t block scale-down. The CKS idle check (CWActive) ordinarily ignores Pods in those phases, but gracefully interruptible Pods can remain counted while their objects are still present in the Kubernetes API. The Cluster Autoscaler uses its own removal rules. If a Node Pool won’t scale down, check for Pods still Running or Pending: a Job Pod that never exited, a Pod in CrashLoopBackOff, or a Deployment, StatefulSet, or CronJob Pod you overlooked. Apply the idle Node rules and label precedence when deciding which Pods count. To list unfinished Pods, replace [NODE-NAME] with the name of the Node:
Also inspect the CWActive message with kubectl describe node [NODE-NAME]: it names counted Pods, including gracefully interruptible Pods omitted by the phase filters above. These Pods can remain counted during termination, even after their termination grace period expires. Check CWActive rather than inferring idleness from Pod phase or grace-period expiry. When choosing a new Node to drain, IdleOnly requires CWActive = False; applying the gracefully interruptible label doesn’t make an active Node eligible. To unblock scale-down, delete or finish the counted Pods, then confirm CWActive = False. If a finished gracefully interruptible Pod is still counted, remove its retained Pod object when it is safe to do so. To stop a stalled Job from holding a Node indefinitely, set activeDeadlineSeconds on the Job so Kubernetes terminates its Pods after the deadline. Setting ttlSecondsAfterFinished removes finished Jobs and their Pods from the cluster. This normally keeps the Pod list tidy without changing scale-down eligibility; removing a retained gracefully interruptible Pod can also clear its contribution to CWActive. For more information, see Idle Nodes and Current is above target.
Nodes Workload Scheduling
Last modified on October 27, 2026