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
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.
O desenvolvimento do Descheduling Framework no Koordinator Descheduler começou antes do Kubernetes Descheduler e utiliza uma API de configuração diferente:
v1alpha2/DeschedulerConfiguration.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.
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 |
|
|
|
|
|
|
|
|
|
|
-
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.
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,maxNoOfPodsToEvictPerNodeemaxNoOfPodsToEvictPerNamespace. O Koordinator Descheduler adicionadryRunedeschedulingInterval.Na API
v1alpha1/DeschedulerPolicydo Kubernetes Descheduler, os parâmetros do evictor de pods fazem parte da configuração do sistema. Nas outras duas APIs, eles estão no campoargsdo plug-in de evicção.Na API
v1alpha2/DeschedulerConfigurationdo Koordinator Descheduler, o tipo de dados denodeSelectordifere ligeiramente das outras duas APIs. Consulte Configuração do sistema.
Diferenças na configuração de modelo
A versão
v1alpha1/DeschedulerPolicydo 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/DeschedulerPolicydo Kubernetes Descheduler ev1alpha2/DeschedulerConfigurationdo 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/DeschedulerPolicyusa uma lista de strings para ativar ou desativar plug-ins, enquanto av1alpha2/DeschedulerConfigurationutiliza uma lista de estruturas sobplugins.A
v1alpha2/DeschedulerPolicysuporta apenas o DefaultEvictor (ativado automaticamente). Já av1alpha2/DeschedulerConfigurationsuporta tanto o MigrationController quanto o DefaultEvictor, sendo que o comportamento do DefaultEvictor corresponde à versão da comunidade. Especifique o evictor nos campos de modeloevictefilter.
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
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:
Desinstale o Kubernetes Descheduler atual. Executar vários desescalonadores em um cluster causa condições de corrida imprevisíveis.
-
Instale e configure o Koordinator Descheduler conforme descrito em Ativar o recurso de desescalonamento.
Configure as definições de nível de sistema no Koordinator Descheduler com base nas Diferenças na configuração do sistema.
-
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.
Caso a API seja
v1alpha1/DeschedulerPolicy, crie um modelo de desescalonamento compatível com o Koordinator Descheduler seguindo as Diferenças na configuração de modelo.Caso a API seja
v1alpha2/DeschedulerPolicy, modifique os campos de configuração no Koordinator Descheduler conforme as Diferenças na configuração de modelo.
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
-
Instale o componente ack-koordinator e ative o desescalonamento: Ativar o recurso de desescalonamento.
Também é possível configurar parâmetros avançados para o Koordinator Descheduler, modelos de desescalonamento, plug-ins de política de desescalonamento e plug-ins de evicção em um ConfigMap. Para mais informações, consulte Configurar parâmetros avançados.
Visão geral e log de alterações do componente ack-koordinator: ack-koordinator (FKA ack-slo-manager).