Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Koordinator Descheduler and Kubernetes Descheduler

Dernière mise à jour :Aug 11, 2026

Koordinator Descheduler dans le module complémentaire ack-koordinator offre des fonctionnalités de désordonnancement permettant de replanifier les Pods en cours d'exécution dont l'emplacement n'est pas optimal vers un autre nœud. Il étend le framework de désordonnancement de la communauté Kubernetes Descheduler avec un contrôle d'éviction amélioré. Koordinator Descheduler est compatible avec les politiques de Kubernetes Descheduler.

Avant de commencer

Familiarisez-vous avec les fonctionnalités, les attributs d'API et les configurations de politique (système, modèle, plug-in de politique et plug-in d'éviction) du Kubernetes Descheduler avant de le comparer à Koordinator Descheduler.

Relation entre Koordinator Descheduler et Kubernetes Descheduler

Avant la version 0.25.0, la communauté Kubernetes Descheduler a proposé le Descheduling Framework, une approche basée sur des plug-ins pour gérer le cycle de vie du désordonnancement, avec deux objectifs :

  • Transformer les politiques de désordonnancement et la logique d'éviction des pods en plug-ins pour plus de flexibilité.

  • Implémenter un environnement d'exécution prenant en charge le chargement et l'exécution des plug-ins, ainsi que la gestion du cycle de vie du désordonnancement.

Avec Kubernetes Descheduler 0.26.0, Koordinator Descheduler v1.2.0 a intégré toutes les politiques et le plug-in DefaultEvictor, et a ajouté l'évicteur MigrationController.

Différences de fonctionnalités

image

Koordinator Descheduler est compatible avec la plupart des cas d'utilisation de Kubernetes Descheduler, mais diffère par les méthodes de configuration, les politiques de désordonnancement, les évicteurs et le contrôle d'éviction.

  1. Koordinator Descheduler a commencé à développer son framework de désordonnancement avant Kubernetes Descheduler et utilise une API de configuration différente : v1alpha2/DeschedulerConfiguration.

  2. Koordinator Descheduler ajoute le plug-in de politique LowNodeLoad pour un désordonnancement conscient des points chauds, basé sur l'utilisation réelle des nœuds. Il offre des résultats plus précis que le plug-in natif LowNodeUtilization qui utilise les taux d'allocation des ressources. Consultez Utiliser le désordonnancement conscient des points chauds.

  3. Koordinator Descheduler ajoute l'évicteur MigrationController. MigrationController offre un contrôle d'éviction plus sûr et plus complet. Consultez Configuration du plug-in Evictor.

Exemples de configuration

Les exemples suivants utilisent la politique RemovePodsViolatingNodeTaints (RemovePodsViolatingNodeTaints) pour comparer les formats de configuration de Kubernetes Descheduler et de Koordinator Descheduler. La version de configuration est définie par les champs apiVersion et kind.

Version de configuration

Kubernetes Descheduler

Kubernetes Descheduler

Koordinator Descheduler

Version du composant

Toutes les versions

v0.27.0 et ultérieures

Toutes les versions

apiVersion

descheduler/v1alpha1

descheduler/v1alpha2

descheduler/v1alpha2

kind

DeschedulerPolicy

DeschedulerPolicy

DeschedulerConfiguration

  • Exemple de configuration Kubernetes Descheduler

    • Pour les versions antérieures à la v0.27.0, la version de configuration est 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".
    • Pour la v0.27.0 et les versions ultérieures, la version de configuration est 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.
  • Exemple de configuration Koordinator Descheduler

    La version de configuration est 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.
Remarque

Ces exemples couvrent uniquement les différences de version de configuration. Consultez Configuration système, Configuration des modèles, Configuration des plug-ins de politique et Configuration des plug-ins Evictor pour plus de détails sur les paramètres.

Différences de configuration système

  • La configuration système de Kubernetes Descheduler (Top Level configuration) prend uniquement en charge nodeSelector, maxNoOfPodsToEvictPerNode et maxNoOfPodsToEvictPerNamespace. Koordinator Descheduler ajoute dryRun et deschedulingInterval.

  • Dans l'API v1alpha1/DeschedulerPolicy de Kubernetes Descheduler, les paramètres de l'évicteur de pods font partie de la configuration système. Dans les deux autres API, ils se trouvent dans le champ args du plug-in evictor.

  • Dans l'API v1alpha2/DeschedulerConfiguration de Koordinator Descheduler, le type de données de nodeSelector diffère légèrement des deux autres API. Consultez Configuration système.

Différences de configuration des modèles

  • L'API v1alpha1/DeschedulerPolicy de Kubernetes Descheduler ne prend pas en charge les modèles de désordonnancement, ce qui rend son format de configuration significativement différent de celui de Koordinator Descheduler.

  • L'API v1alpha2/DeschedulerPolicy de Kubernetes Descheduler et l'API v1alpha2/DeschedulerConfiguration de Koordinator Descheduler sont similaires car elles utilisent toutes deux des modèles de désordonnancement. Elles diffèrent par les types de données et la manière dont le plug-in evictor est activé.

    • v1alpha2/DeschedulerPolicy utilise une liste de chaînes pour activer ou désactiver les plug-ins, tandis que v1alpha2/DeschedulerConfiguration utilise une liste de structures sous plugins.

    • v1alpha2/DeschedulerPolicy prend uniquement en charge DefaultEvictor (activé automatiquement). v1alpha2/DeschedulerConfiguration prend en charge à la fois MigrationController et DefaultEvictor, où le comportement de DefaultEvictor correspond à la version communautaire. Spécifiez l'évicteur dans les champs de modèle evict et filter.

Différences de configuration des plug-ins de politique

Koordinator Descheduler prend en charge toutes les politiques de Kubernetes Descheduler 0.26.0, mais Koordinator Descheduler ne prend pas en charge les paramètres ajoutés dans les versions ultérieures. Le tableau suivant répertorie les différences de paramètres pour Koordinator Descheduler.

Modifications des paramètres de politique

Exemple de code

RemovePodsViolatingNodeAffinity : Prend en charge preferredDuringSchedulingIgnoredDuringExecution dans le champ nodeAffinityType.

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "RemovePodsViolatingNodeAffinity"
      args:
        nodeAffinityType:
        - "preferredDuringSchedulingIgnoredDuringExecution"
    plugins:
      deschedule:
        enabled:
          - "RemovePodsViolatingNodeAffinity"

RemovepodsViolatingTopologySpreadConstraint :

  • Ajoute le champ constraints.

  • Ajoute le champ topologyBalanceNodeFit.

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "RemovePodsViolatingTopologySpreadConstraint"
      args:
        constraints:
          - DoNotSchedule
        topologyBalanceNodeFit: false  
    plugins:
      balance:
        enabled:
          - "RemovePodsViolatingTopologySpreadConstraint"

RemovePodsHavingTooManyRestarts : Ajoute le champ states.

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "RemovePodsHavingTooManyRestarts"
      args:
        states:
        - "CrashLoopBackOff"
    plugins:
      deschedule:
        enabled:
          - "RemovePodsHavingTooManyRestarts"

PodLifeTime :

  • Le champ state accepte la valeur CrashLoopBackOff.

  • Le champ state accepte la valeur ImagePullBackOff.

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "PodLifeTime"
      args:
        states:
        - "CrashLoopBackOff"
        - "ImagePullBackOff"
    plugins:
      deschedule:
        enabled:
          - "PodLifeTime"

RemoveFailedPods : Ajoute le champ exitCodes.

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "RemoveFailedPods"
      args:
        exitCodes:
        - 1
    plugins:
      deschedule:
        enabled:
          - "RemoveFailedPods"

Différences de configuration des plug-ins Evictor

Koordinator Descheduler prend en charge le plug-in DefaultEvictor de Kubernetes Descheduler 0.26.0. Les paramètres ajoutés à DefaultEvictor dans les versions ultérieures de Kubernetes Descheduler ne sont pas pris en charge dans Koordinator Descheduler.

DefaultEvictor

Modifications des paramètres de l'évicteur

Exemple

DefaultEvictor :

  • Ajoute le champ evictDaemonSetPods.

  • Ajoute le champ minReplicas.

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "DefaultEvictor"
      args:
        evictDaemonSetPods: false
        minReplicas: 2
    - name: "PodLifeTime"
      args:
        maxPodLifeTimeSeconds: 86400
    plugins:
      deschedule:
        enabled:
          - "PodLifeTime"

MigrationController

Koordinator Descheduler prend également en charge le plug-in évicteur MigrationController, qui permet d'utiliser plusieurs méthodes d'éviction.

Migration vers Koordinator Descheduler

Pour migrer de Kubernetes Descheduler vers Koordinator Descheduler, suivez les étapes spécifiques à la version ci-dessous :

  1. Désinstallez votre instance actuelle de Kubernetes Descheduler. L'exécution de plusieurs désordonnanceurs dans un cluster entraîne des conditions de concurrence imprévisibles.

  2. Installez et configurez Koordinator Descheduler comme décrit dans Activer la fonctionnalité de désordonnancement.

    1. Configurez les paramètres au niveau du système dans Koordinator Descheduler en vous basant sur les Différences de configuration système.

    2. Créez un modèle de désordonnancement compatible avec Koordinator Descheduler.

      • Si vous utilisez Kubernetes Descheduler 0.26.0 ou une version antérieure, seule l'API v1alpha1/DeschedulerPolicy est prise en charge. Effectuez la configuration en vous basant sur les Différences de configuration des modèles.

      • Si vous utilisez une version de Kubernetes Descheduler postérieure à 0.26.0, vérifiez l'API de configuration que vous utilisez.

    3. Configurez les plug-ins dans Koordinator Descheduler en vous basant sur les Différences de configuration des plug-ins de politique et les Différences de configuration des plug-ins Evictor.

Références