Descheduler for Kubernetes is a tool that evicts running pods from nodes to rebalance cluster workloads based on configurable policies.
Kubernetes scheduling decisions are made once when a pod is created, but cluster state changes constantly as nodes are added, removed, or modified with new taints and labels. Pods that were appropriately scheduled may become suboptimal over time, or nodes may become under or over utilized. Descheduler solves this by continuously monitoring the cluster and identifying pods that no longer fit the desired state according to its policy rules. It evicts these pods, allowing the default Kubernetes scheduler to reschedule them on more appropriate nodes. The tool does not perform the rescheduling itself but relies on the standard scheduler to place evicted pods.
Descheduler suits clusters where workload distribution matters and node utilization should be actively managed. It works as a Job, CronJob, or Deployment within the cluster and can run repeatedly without manual intervention. The tool is installed as a critical pod in the kube-system namespace to prevent the kubelet from evicting it. Installation options include Helm charts and Kustomize, with official Helm support available. Teams should consult the documentation branch matching their deployed version, as the tool maintains separate documentation for each release line.
The project's issue tracker shows work dominated by merge-blocker labels, indicating active gatekeeping on code quality and integration standards.