kubernetes-sigs/descheduler

Descheduler for Kubernetes

View on GitHub ↗Jump to charts ↓Open shareable report

Summary Information

Updated 25 minutes ago
Type:Server / PlatformCategory(s):Kubernetes & OperatorsCloud Native & Infrastructure
Added to GitGenius on June 21st, 2026
Created on July 28th, 2017
Open Issues & Pull Requests: 65 (+0)
GitHub issues: Enabled
Number of forks: 804
Total Stargazers: 5,522 (+0)
Total Subscribers: 47 (+0)

Repository Insights (GitGenius)

Median issue/PR response: 47.2 hours
Mean response time: 19.5 days
90th percentile: 76.9 days
Tracked items: 161

How this project is maintained

About 9% of issues opened in the past year have never received a reply. 100% of open issues come from outside the core team, so the backlog reflects real-world use rather than internal planning. 60% of issues opened in the past year have been closed, leaving a working backlog.

Charts & Analytics

Fetching additional details & charts...

Issue Activity (beta)

Open issues: 32
New in 7 days: 1
Closed in 7 days: 0
Avg open age: 516 days
Stale 30+ days: 27
Stale 90+ days: 20

Recent activity

Opened in 7 days: 1
Closed in 7 days: 0
Comments in 7 days: 1
Events in 7 days: 1

Top labels

  • lifecycle/rotten (74)
  • kind/bug (67)
  • kind/feature (64)
  • lifecycle/frozen (17)
  • lifecycle/stale (6)
  • good first issue (4)
  • kind/support (2)
  • help wanted (1)

Detailed Description

The Kubernetes Descheduler is a specialized tool designed to optimize cluster resource utilization and workload distribution by identifying and evicting pods that are scheduled on suboptimal nodes. Unlike the standard Kubernetes scheduler, which makes initial placement decisions for pending pods, the descheduler operates on already-running pods to improve their placement based on changing cluster conditions. The project is maintained as part of the Kubernetes Special Interest Group for Scheduling and is written in Go.

The descheduler addresses a fundamental challenge in dynamic Kubernetes environments where initial scheduling decisions may no longer be optimal as cluster state evolves. Nodes may become under or over-utilized, node labels and taints may change, pod or node affinity requirements may no longer be satisfied, nodes may fail causing pod migrations, or new nodes may be added to the cluster. In these scenarios, pods that were appropriately scheduled at one point in time may end up on less desirable nodes. The descheduler solves this by continuously evaluating running pods against configurable policies and evicting those that should be rescheduled, relying on the default scheduler to place the evicted pods on more suitable nodes.

The project supports multiple deployment models to fit different operational needs. Users can run the descheduler as a Kubernetes Job for one-time optimization, as a CronJob for periodic rescheduling cycles, or as a Deployment for continuous operation. The descheduler pod runs as a critical pod in the kube-system namespace to prevent it from being evicted by itself or the kubelet. Installation options include official Helm charts available since version 0.18.0 and listed on Artifact Hub, as well as Kustomize-based deployment approaches.

Configuration in the descheduler is highly flexible through its policy system, which includes top-level eviction controls and pluggable strategy and evictor components. Top-level configuration options allow operators to set constraints such as maximum pods to evict per node, per namespace, or per rescheduling cycle, node selection criteria, grace periods for pod deletion, and metrics collection settings. The descheduler supports multiple metrics providers including Kubernetes Metrics Server and Prometheus, enabling data-driven eviction decisions based on actual resource utilization. The Default Evictor plugin handles pod filtering and validation before eviction, with extensibility for custom evictor implementations.

The project maintains overlapping contributor relationships with major Kubernetes ecosystem projects including kubernetes/kubernetes, kubernetes-sigs/kueue, and argoproj/argo-cd, reflecting its integration into the broader Kubernetes scheduling and workload management ecosystem.

The descheduler maintains multiple release branches with version-specific documentation, currently supporting versions from v0.30.x through v0.36.x, with the master branch representing in-development functionality. This versioning approach ensures users can access appropriate documentation for their deployed release versions while allowing the project to evolve independently.