The OpenShift Descheduler is a Kubernetes component written in Go that addresses the dynamic nature of cluster scheduling by moving already-running pods to more optimal nodes after their initial placement. While Kubernetes' kube-scheduler makes initial pod placement decisions based on cluster state at scheduling time, cluster conditions change continuously. Nodes may become under or over-utilized, node labels and taints may be added or removed, pod and node affinity requirements may no longer be satisfied, nodes may fail, or new nodes may be added to the cluster. The Descheduler identifies pods that no longer fit their original scheduling decisions and evicts them, allowing the default scheduler to reschedule them to more appropriate nodes.
The Descheduler operates through a configurable policy system comprising strategy plugins and an evictor plugin. The policy includes top-level configuration options that apply globally to all evictions, such as node selection via nodeSelector, maximum pods to evict per node, namespace, or per rescheduling cycle, and grace period settings. The Default Evictor Plugin filters and validates pods before eviction, and can sort, filter, or group pods by various criteria. The system supports multiple metrics providers including Kubernetes Metrics Server and Prometheus for collecting actual resource utilization data to inform eviction decisions.
The Descheduler can be deployed in multiple ways within a Kubernetes cluster: as a Job for one-time execution, as a CronJob for periodic rescheduling, or as a Deployment for continuous operation. It runs as a critical pod in the kube-system namespace to prevent self-eviction. Installation options include using an official Helm chart available since release v0.18.0 and listed on Artifact Hub, or using Kustomize for declarative configuration management.
According to GitGenius activity tracking, the repository shows median and mean issue or pull request response latency of 661.6 hours across tracked items, with tide/merge-blocker being the most active issue label. The primary active contributor tracked is jmguzik. The repository shares overlapping contributors with openshift/installer, openshift/coredns, and openshift/node-problem-detector, indicating collaborative development across multiple OpenShift infrastructure components.
The repository is classified across multiple domains reflecting its comprehensive role in cluster optimization: resource balancing, cluster optimization, pod eviction, workload distribution and management, node scheduling, cluster stability, node utilization, load distribution, scheduling efficiency, capacity planning, autoscaling, performance enhancement, resource management, load balancing, and efficiency improvement. Documentation is maintained across multiple release branches corresponding to different Descheduler versions, with the master branch representing in-development functionality. The project includes detailed user guides and configuration documentation to support operators in deploying and configuring the Descheduler for their specific cluster optimization needs.