Koordinator Descheduler in the ack-koordinator add-on provides descheduling functionality that can reschedule unreasonable running Pods to another node, and extends the Kubernetes Descheduler community's Descheduling Framework with enhanced eviction control, and Koordinator Descheduler is compatible with Kubernetes Descheduler policies.
Before you begin
Familiarize yourself with the features, API attributes, and policy configurations (system, template, policy plugin, and evictor plugin) of the Kubernetes Descheduler before comparing it with Koordinator Descheduler.
Relationship between Koordinator Descheduler and Kubernetes Descheduler
Before version 0.25.0, the Kubernetes Descheduler community proposed the Descheduling Framework, a plug-in-based approach to manage the descheduling lifecycle, with two goals:
-
Transform descheduling policies and pod eviction logic into plug-ins for greater flexibility.
-
Implement a runtime that supports plug-in loading, execution, and descheduling lifecycle management.
With Kubernetes Descheduler 0.26.0, Koordinator Descheduler v1.2.0 integrated all policies and the DefaultEvictor plug-in, and added the MigrationController evictor.
Feature differences
Koordinator Descheduler is compatible with most Kubernetes Descheduler use cases but differs in configuration methods, descheduling policies, evictors, and eviction control.
-
Koordinator Descheduler began developing its Descheduling Framework before Kubernetes Descheduler and uses a different configuration API:
v1alpha2/DeschedulerConfiguration. -
Koordinator Descheduler adds the LowNodeLoad policy plug-in for hotspot-aware descheduling based on actual node utilization, providing more accurate results than the native LowNodeUtilization plug-in that uses resource allocation rates. See Use hotspot-aware descheduling.
-
Koordinator Descheduler adds the
MigrationControllerevictor.MigrationControlleroffers safer and more extensive eviction control. See Evictor plug-in configuration.
Configuration examples
The following examples use the RemovePodsViolatingNodeTaints policy (RemovePodsViolatingNodeTaints) to compare the configuration formats of Kubernetes Descheduler and Koordinator Descheduler. The configuration version is defined by the apiVersion and kind fields.
|
Configuration version |
Kubernetes Descheduler |
Kubernetes Descheduler |
Koordinator Descheduler |
|
Component version |
All versions |
v0.27.0 and later |
All versions |
|
|
|
|
|
|
|
|
|
|
-
Kubernetes Descheduler configuration example
-
For versions earlier than v0.27.0, the configuration version is
descheduler/v1alpha1/DeschedulerPolicy.# API attributes. apiVersion: "descheduler/v1alpha1" kind: "DeschedulerPolicy" # System configurations. nodeSelector: "node=node1" maxNoOfPodsToEvictPerNode: 10 maxNoOfPodsToEvictPerNamespace: 10 # Eviction configurations. In the other two configuration APIs, these parameters are part of the evictor plug-in configuration. evictFailedBarePods: false evictLocalStoragePods: true evictSystemCriticalPods: true evictDaemonSetPods: false ignorePvcPods: false # Policy configurations. In the other two APIs, these are provided as descheduling templates and split into plug-in activation and parameter settings. strategies: "RemovePodsViolatingNodeTaints": enabled: true params: nodeFit: true # The nodeFit parameter must be enabled in each policy. In the other two APIs, nodeFit is part of the evictor plug-in configuration. excludedTaints: - deschedule=not-allow # Ignore nodes with the taint key="deschedule" and value="not-allow". -
For v0.27.0 and later, the configuration version is
descheduler/v1alpha2/DeschedulerPolicy.# API attributes. apiVersion: "descheduler/v1alpha2" kind: "DeschedulerPolicy" # System configurations. nodeSelector: "node=node1" maxNoOfPodsToEvictPerNode: 10 maxNoOfPodsToEvictPerNamespace: 10 # End of system configurations. # A list of descheduling templates. profiles: - name: kubernetes-descheduler # Specify the name of the descheduling template. # Template configurations. plugins: deschedule: enabled: - "RemovePodsViolatingNodeTaints" # The data type of the `enabled` field is a list of strings. balance: disabled: - "*" # End of template configurations. # A list of plug-in configurations. pluginConfig: # Configuration for the RemovePodsViolatingNodeTaints policy plug-in. - name: RemovePodsViolatingNodeTaints # Node taint validation plug-in configuration. args: excludedTaints: - deschedule=not-allow # Ignore nodes with the taint key="deschedule" and value="not-allow". # Configuration for the DefaultEvictor evictor plug-in. - name: "DefaultEvictor" args: evictFailedBarePods: false evictLocalStoragePods: true evictSystemCriticalPods: true evictDaemonSetPods: false ignorePvcPods: false nodeFit: true # The nodeFit parameter is part of the evictor plug-in configuration.
-
-
Koordinator Descheduler configuration example
The configuration version is
descheduler/v1alpha2/DeschedulerConfiguration.# API attributes. apiVersion: descheduler/v1alpha2 kind: DeschedulerConfiguration # System configurations. dryRun: false deschedulingInterval: 120s nodeSelector: node: node1 # The data type of nodeSelector is different from the other two configuration APIs. maxNoOfPodsToEvictPerNode: 10 maxNoOfPodsToEvictPerNamespace: 10 # End of system configurations. # A list of descheduling templates. profiles: - name: koord-descheduler # Template configurations. plugins: deschedule: enabled: - name: RemovePodsViolatingNodeTaints # The data type of the `enabled` field is a list of structs. balance: disabled: - name: "*" evict: # Use the `evict` field to specify the evictor to use. enabled: - name: MigrationController # MigrationController is enabled by default. # - name: DefaultEvictor # Optional: DefaultEvictor. filter: # Use the `filter` field to specify the eviction filter to use. enabled: - name: MigrationController # MigrationController is enabled by default. # - name: DefaultEvictor # Optional: DefaultEvictor. # End of template configurations. # A list of plug-in configurations. pluginConfig: # Configuration for the RemovePodsViolatingNodeTaints policy plug-in. - name: RemovePodsViolatingNodeTaints # Node taint validation plug-in configuration. args: excludedTaints: - deschedule=not-allow # Ignore nodes with the taint key="deschedule" and value="not-allow". # Configuration for the DefaultEvictor evictor plug-in. - name: "DefaultEvictor" args: evictFailedBarePods: false evictLocalStoragePods: true evictSystemCriticalPods: true evictDaemonSetPods: false ignorePvcPods: false nodeFit: true # The nodeFit parameter is part of the evictor plug-in configuration.
These examples cover configuration version differences only. See System configuration, Template configuration, Policy plug-in configuration, and Evictor plug-in configuration for parameter details.
System configuration differences
-
Kubernetes Descheduler's system configuration (Top Level configuration) supports only
nodeSelector,maxNoOfPodsToEvictPerNode, andmaxNoOfPodsToEvictPerNamespace. Koordinator Descheduler addsdryRunanddeschedulingInterval. -
In Kubernetes Descheduler's
v1alpha1/DeschedulerPolicyAPI, pod evictor parameters are part of the system configuration. In the other two APIs, they are in the evictor plug-in'sargsfield. -
In Koordinator Descheduler's
v1alpha2/DeschedulerConfigurationAPI, thenodeSelectordata type differs slightly from the other two APIs. See System configuration.
Template configuration differences
-
Kubernetes Descheduler's
v1alpha1/DeschedulerPolicydoes not support descheduling templates, making its configuration format significantly different from Koordinator Descheduler. -
Kubernetes Descheduler's
v1alpha2/DeschedulerPolicyand Koordinator Descheduler'sv1alpha2/DeschedulerConfigurationare similar because both use descheduling templates. They differ in data types and how the evictor plug-in is enabled.-
v1alpha2/DeschedulerPolicyuses a string list to enable or disable plug-ins, whereasv1alpha2/DeschedulerConfigurationuses a struct list underplugins. -
v1alpha2/DeschedulerPolicysupports only DefaultEvictor (auto-enabled).v1alpha2/DeschedulerConfigurationsupports both MigrationController and DefaultEvictor, where DefaultEvictor behavior matches the community version. Specify the evictor in theevictandfiltertemplate fields.
-
Policy plug-in configuration differences
Koordinator Descheduler supports all policies from Kubernetes Descheduler 0.26.0, but Koordinator Descheduler does not support parameters added in later versions. The following table lists the parameter differences for Koordinator Descheduler.
|
Policy parameter changes |
Sample code |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Evictor plug-in configuration differences
Koordinator Descheduler supports the DefaultEvictor from Kubernetes Descheduler 0.26.0. Parameters added to DefaultEvictor in later Kubernetes Descheduler versions are not supported in Koordinator Descheduler.
DefaultEvictor
|
Evictor parameter changes |
Example |
|
|
|
MigrationController
Koordinator Descheduler also supports the MigrationController evictor plug-in, which enables multiple eviction methods.
Migrating to Koordinator Descheduler
To migrate from Kubernetes Descheduler to Koordinator Descheduler, follow these version-specific steps:
-
Uninstall your current Kubernetes Descheduler. Running multiple deschedulers in a cluster causes unpredictable race conditions.
-
Install and configure Koordinator Descheduler as described in Enable the descheduling feature.
-
Configure system-level settings in Koordinator Descheduler based on System configuration differences.
-
Create a descheduling template compatible with Koordinator Descheduler.
-
If you use Kubernetes Descheduler 0.26.0 or earlier, only the
v1alpha1/DeschedulerPolicyAPI is supported. Complete the configuration based on Template configuration differences. -
If you use Kubernetes Descheduler later than 0.26.0, confirm which configuration API you use.
-
If the API is
v1alpha1/DeschedulerPolicy, create a descheduling template compatible with Koordinator Descheduler based on Template configuration differences. -
If the API is
v1alpha2/DeschedulerPolicy, modify the configuration fields in Koordinator Descheduler based on Template configuration differences.
-
-
-
Configure plug-ins in Koordinator Descheduler based on Policy plug-in configuration differences and Evictor plug-in configuration differences.
-
References
-
Install the ack-koordinator component and enable descheduling: Enable the descheduling feature.
You can also configure advanced parameters for Koordinator Descheduler, descheduling templates, descheduling policy plug-ins, and evictor plug-ins in a ConfigMap. For more information, see Configure advanced parameters.
-
ack-koordinator component overview and change log: ack-koordinator (FKA ack-slo-manager).