Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Koordinator Descheduler and Kubernetes Descheduler

Última atualização: Jul 03, 2026

O Koordinator Descheduler, disponível no add-on ack-koordinator, oferece funcionalidades de desescalonamento para reagendar Pods em execução inadequados para outro nó. Ele estende o Descheduling Framework da comunidade Kubernetes Descheduler com controle de evicção aprimorado e mantém compatibilidade com as políticas do Kubernetes Descheduler.

Antes de começar

Familiarize-se com os recursos, atributos de API e configurações de política (sistema, modelo, plug-in de política e plug-in de evicção) do Kubernetes Descheduler antes de compará-lo ao Koordinator Descheduler.

Relação entre Koordinator Descheduler e Kubernetes Descheduler

Antes da versão 0.25.0, a comunidade do Kubernetes Descheduler propôs o Descheduling Framework. Essa abordagem baseada em plug-ins gerencia o ciclo de vida de desescalonamento com dois objetivos:

  • Transformar políticas de desescalonamento e lógica de evicção de pods em plug-ins para garantir maior flexibilidade.

  • Implementar um runtime que suporte carregamento de plug-ins, execução e gerenciamento do ciclo de vida de desescalonamento.

Com o lançamento do Kubernetes Descheduler 0.26.0, o Koordinator Descheduler v1.2.0 integrou todas as políticas e o plug-in DefaultEvictor, além de adicionar o evictor MigrationController.

Diferenças de recursos

image

O Koordinator Descheduler é compatível com a maioria dos casos de uso do Kubernetes Descheduler, mas apresenta diferenças nos métodos de configuração, políticas de desescalonamento, evictores e controle de evicção.

  1. O desenvolvimento do Descheduling Framework no Koordinator Descheduler começou antes do Kubernetes Descheduler e utiliza uma API de configuração diferente: v1alpha2/DeschedulerConfiguration.

  2. O Koordinator Descheduler inclui o plug-in de política LowNodeLoad para desescalonamento ciente de hotspots com base na utilização real dos nós. Isso fornece resultados mais precisos do que o plug-in nativo LowNodeUtilization, baseado em taxas de alocação de recursos. Consulte Usar desescalonamento ciente de hotspots.

  3. O Koordinator Descheduler adiciona o evictor MigrationController, que oferece controle de evicção mais seguro e abrangente. Consulte Configuração do plug-in de evicção.

Exemplos de configuração

Os exemplos a seguir usam a política RemovePodsViolatingNodeTaints (RemovePodsViolatingNodeTaints) para comparar os formatos de configuração do Kubernetes Descheduler e do Koordinator Descheduler. A versão da configuração é definida pelos campos apiVersion e kind.

Versão da configuração

Kubernetes Descheduler

Kubernetes Descheduler

Koordinator Descheduler

Versão do componente

Todas as versões

v0.27.0 e posterior

Todas as versões

apiVersion

descheduler/v1alpha1

descheduler/v1alpha2

descheduler/v1alpha2

kind

DeschedulerPolicy

DeschedulerPolicy

DeschedulerConfiguration

  • Exemplo de configuração do Kubernetes Descheduler

    • Para versões anteriores à v0.27.0, a versão da configuração é 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".
    • Para a versão v0.27.0 e posteriores, a versão da configuração é 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.
  • Exemplo de configuração do Koordinator Descheduler

    A versão da configuração é 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.
Nota

Estes exemplos abordam apenas as diferenças de versão de configuração. Para detalhes sobre parâmetros, consulte Configuração do sistema, Configuração de modelo, Configuração do plug-in de política e Configuração do plug-in de evicção.

Diferenças na configuração do sistema

  • A configuração de sistema do Kubernetes Descheduler (Top Level configuration) suporta apenas nodeSelector, maxNoOfPodsToEvictPerNode e maxNoOfPodsToEvictPerNamespace. O Koordinator Descheduler adiciona dryRun e deschedulingInterval.

  • Na API v1alpha1/DeschedulerPolicy do Kubernetes Descheduler, os parâmetros do evictor de pods fazem parte da configuração do sistema. Nas outras duas APIs, eles estão no campo args do plug-in de evicção.

  • Na API v1alpha2/DeschedulerConfiguration do Koordinator Descheduler, o tipo de dados de nodeSelector difere ligeiramente das outras duas APIs. Consulte Configuração do sistema.

Diferenças na configuração de modelo

  • A versão v1alpha1/DeschedulerPolicy do Kubernetes Descheduler não suporta modelos de desescalonamento, o que torna seu formato de configuração significativamente diferente do Koordinator Descheduler.

  • As versões v1alpha2/DeschedulerPolicy do Kubernetes Descheduler e v1alpha2/DeschedulerConfiguration do Koordinator Descheduler são semelhantes porque ambas utilizam modelos de desescalonamento. Elas diferem nos tipos de dados e na forma como o plug-in de evicção é ativado.

    • A v1alpha2/DeschedulerPolicy usa uma lista de strings para ativar ou desativar plug-ins, enquanto a v1alpha2/DeschedulerConfiguration utiliza uma lista de estruturas sob plugins.

    • A v1alpha2/DeschedulerPolicy suporta apenas o DefaultEvictor (ativado automaticamente). Já a v1alpha2/DeschedulerConfiguration suporta tanto o MigrationController quanto o DefaultEvictor, sendo que o comportamento do DefaultEvictor corresponde à versão da comunidade. Especifique o evictor nos campos de modelo evict e filter.

Diferenças na configuração do plug-in de política

O Koordinator Descheduler suporta todas as políticas do Kubernetes Descheduler 0.26.0, mas não inclui parâmetros adicionados em versões posteriores. A tabela a seguir lista as diferenças de parâmetros para o Koordinator Descheduler.

Alterações nos parâmetros de política

Código de exemplo

RemovePodsViolatingNodeAffinity: Suporta preferredDuringSchedulingIgnoredDuringExecution no campo nodeAffinityType.

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

RemovepodsViolatingTopologySpreadConstraint:

  • Adiciona o campo constraints.

  • Adiciona o campo topologyBalanceNodeFit.

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

RemovePodsHavingTooManyRestarts: Adiciona o campo states.

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

PodLifeTime:

  • O campo state permite o valor CrashLoopBackOff.

  • O campo state permite o valor ImagePullBackOff.

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

RemoveFailedPods: Adiciona o campo exitCodes.

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

Diferenças na configuração do plug-in de evicção

O Koordinator Descheduler suporta o DefaultEvictor do Kubernetes Descheduler 0.26.0. Parâmetros adicionados ao DefaultEvictor em versões posteriores do Kubernetes Descheduler não são suportados no Koordinator Descheduler.

DefaultEvictor

Alterações nos parâmetros do evictor

Exemplo

DefaultEvictor:

  • Adiciona o campo evictDaemonSetPods.

  • Adiciona o campo 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

O Koordinator Descheduler também suporta o plug-in de evicção MigrationController, que habilita múltiplos métodos de evicção.

Migração para o Koordinator Descheduler

Para migrar do Kubernetes Descheduler para o Koordinator Descheduler, siga estas etapas específicas por versão:

  1. Desinstale o Kubernetes Descheduler atual. Executar vários desescalonadores em um cluster causa condições de corrida imprevisíveis.

  2. Instale e configure o Koordinator Descheduler conforme descrito em Ativar o recurso de desescalonamento.

    1. Configure as definições de nível de sistema no Koordinator Descheduler com base nas Diferenças na configuração do sistema.

    2. Crie um modelo de desescalonamento compatível com o Koordinator Descheduler.

      • Se você usa o Kubernetes Descheduler 0.26.0 ou anterior, apenas a API v1alpha1/DeschedulerPolicy é suportada. Complete a configuração com base nas Diferenças na configuração de modelo.

      • Se você usa uma versão do Kubernetes Descheduler posterior à 0.26.0, confirme qual API de configuração está em uso.

    3. Configure os plug-ins no Koordinator Descheduler consultando as Diferenças na configuração do plug-in de política e as Diferenças na configuração do plug-in de evicção.

Referências