Reagendador
O agendamento em um cluster é o processo de vinculação de pods pendentes a nós e é realizado por um componente chamado kube-scheduler ou Volcano Scheduler. O agendador usa uma série de algoritmos para calcular o nó ideal para executar pods. No entanto, os clusters do Kubernetes são dinâmicos e seu estado muda ao longo do tempo. Por exemplo, se um nó precisar ser mantido, todos os pods no nó serão despejados para outros nós. Após a conclusão da manutenção, os pods despejados não retornarão automaticamente ao nó, pois o agendamento não será acionado quando um pod for vinculado a um nó. Devido a essas alterações, a carga de um cluster pode ser desequilibrada após a execução do cluster por um período de tempo.
O CCE resolveu esse problema usando o Volcano scheduler para expulsar os pods que não estão em conformidade com a política configurada para que os pods possam ser reagendados. Dessa forma, a carga do cluster é balanceada e a fragmentação de recursos é minimizada.
Recursos de reagendamento
Reagendamento com reconhecimento de carga
Durante o gerenciamento de cluster do Kubernetes, os nós sobreutilizados são devido ao alto uso de CPU ou memória, o que afeta a execução estável de pods nesses nós e aumenta a probabilidade de falhas de nó. Para equilibrar dinamicamente o uso de recursos entre nós em um cluster, é necessária uma visualização de recursos de cluster com base nas métricas de monitoramento de nós. Durante o gerenciamento de cluster, o monitoramento em tempo real pode ser usado para detectar problemas como alto uso de recursos em um nó, falhas de nó e número excessivo de pods em um nó, para que o sistema possa tomar medidas prontamente, por exemplo, migrando alguns pods de um nó sobreutilizado para nós subutilizados.
![Clique para ampliar](https://support.huaweicloud.com/intl/pt-br/usermanual-cce/pt-br_image_0000001665838968.png)
Ao usar esse complemento, verifique se o valor de highThresholds é maior que o valor de lowThresholds. Caso contrário, o reagendador não poderá funcionar.
- Appropriately utilized node: um nó cujo uso de recursos é maior ou igual a 30% e menor ou igual a 80%. O uso de recursos de nós adequadamente utilizados está dentro do intervalo esperado.
- Over-utilized node: um nó cujo uso de recursos é superior a 80%. Alguns pods serão despejados de nós sobreutilizados para reduzir seu uso de recursos para ser menor ou igual a 80%. O reagendador agendará os pods despejados para nós subutilizados.
- Under-utilized node: um nó cujo uso de recursos é inferior a 30%.
HighNodeUtilization
Essa política encontra nós que são subutilizados e despeja pods dos nós na esperança de que esses pods sejam agendados de forma compacta em menos nós. Esta política deve ser usada com a política binpack do Volcano scheduler ou a política MostAllocated do kube-scheduler scheduler. Os limites podem ser configurados para CPU e memória.
Pré-requisitos
- Um cluster de v1.19.16 ou posterior está disponível. Para mais detalhes, consulte Compra de um cluster do CCE.
- Volcano de v1.11.5 ou posterior foi instalado no cluster. Para mais detalhes, consulte Volcano scheduler.
Restrições
- Os pods precisam ser reprogramados usando um agendador, e nenhum agendador pode rotular pods ou nós. Portanto, um pod despejado pode ser reagendado para o nó original.
- O reagendamento não oferece suporte à antiafinidade entre pods. Um pod despejado está em relação à antiafinidade com outros pods em execução. Portanto, o agendador ainda pode agendar o pod de volta para o nó de onde o pod foi despejado.
- Ao configurar o reagendamento com reconhecimento de carga, é necessário habilitar o agendamento com reconhecimento de carga no Volcano scheduler. Ao configurar HighNodeUtilization, é necessário habilitar o reagendamento binpack no Volcano scheduler.
Configurar uma política de reagendamento com reconhecimento de carga
Ao configurar uma política do reagendador com reconhecimento de carga, faça o seguinte para habilitar o agendamento com reconhecimento de carga no Volcano scheduler:
- Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster. Escolha Add-ons no painel de navegação, localize Volcano Scheduler à direita e clique em Install ou Edit.
- Na área Parameters, modifique Advanced Settings para configurar a política do reagendador com reconhecimento de carga e habilitar o complemento usage (um complemento de Volcano de código aberto).
{ "colocation_enable": "", "default_scheduler_conf": { "actions": "allocate, backfill", "tiers": [ { "plugins": [ { "name": "priority" }, { "enablePreemptable": false, "name": "gang" }, { "name": "conformance" }, { "name": "usage", "arguments": { "usage.weight": 5, "thresholds": { "CPUUsageAvg.5m": 60, "MEMUsageAvg.5m": 65 } } } ] }, { "plugins": [ { "enablePreemptable": false, "name": "drf" }, { "name": "predicates" }, { "name": "nodeorder" } ] }, { "plugins": [ { "name": "cce-gpu-topology-predicate" }, { "name": "cce-gpu-topology-priority" }, { "name": "cce-gpu" } ] }, { "plugins": [ { "name": "nodelocalvolume" }, { "name": "nodeemptydirvolume" }, { "name": "nodeCSIscheduling" }, { "name": "networkresource" } ] } ] }, "deschedulerPolicy": { "profiles": [ { "name": "ProfileName", "pluginConfig": [ { "args": { "ignorePvcPods": true, "nodeFit": true, "priorityThreshold": { "value": 100 } }, "name": "DefaultEvictor" }, { "args": { "duration": "2m", "evictableNamespaces": { "exclude": ["kube-system"] }, "metrics": { "address": "**.**.**.**:9090", "type": "prometheus" }, "targetThresholds": { "cpu": 80, "memory": 85 }, "thresholds": { "cpu": 30, "memory": 30 } }, "name": "LoadAware" } ], "plugins": { "balance": { "enabled": ["LoadAware"] } } } ] }, "descheduler_enable": "true", "deschedulingInterval": "10m" }
Tabela 1 Parâmetros-chave de uma política do reagendamento de cluster Parâmetro
Descrição
descheduler_enable
Se deve ativar uma política de reagendador de clusters.
- true: a política do reagendador de cluster está ativada.
- falso: a política do reagendador de cluster está desativada.
deschedulingInterval
Período de reagendamento.
deschedulerPolicy
Política do reagendador do cluster. Para mais detalhes, consulte Tabela 2.
Tabela 2 Parâmetros de deschedulerPolicy Parâmetro
Descrição
profiles.[].plugins.balance.enable.[]
Política do reagendador para um cluster.
LoadAware: uma política de reagendamento com reconhecimento de carga é usada.
profiles.[].pluginConfig.[].name
Configuração de uma política do reagendador com reconhecimento de carga. Opções:
- DefaultEvictor: política de despejo padrão
- LoadAware: uma política de reagendamento com reconhecimento de carga
profiles.[].pluginConfig.[].args
Configuração da política do reagendador de um cluster.
- Configurações para a política DefaultEvictor:
- ignorePvcPods: se os pods de PVC devem ser ignorados ou despejados. O valor true indica que os pods são ignorados, e o valor false indica que os pods são despejados. Essa configuração não diferencia os tipos de PVC (PVs locais, SFS ou EVS).
- nodeFit: se deve considerar as configurações de agendamento existentes, como afinidade de nó e mancha no nó durante o agendamento. O valor true indica que as configurações de agendamento existentes serão consideradas e o valor false indica que elas serão ignoradas.
- priorityThreshold: definição de prioridade. Se a prioridade de um pod for maior ou igual ao valor deste parâmetro, o pod não será despejado. Exemplo:
{ "value": 100 }
- Configurações para a política LoadAware:
- duration: período para obter o uso médio de CPU e memória do Prometheus.
- evictableNamespaces: espaços de nomes onde a política de despejo entra em vigor. O valor padrão são os namespaces diferentes do kube-system. Exemplo:
{ "exclude": ["kube-system"] }
- metrics: monitorando a coleta de dados, onde o endereço e o tipo de coleta devem ser especificados. Apenas Prometheus é suportado. Exemplo:
{ "address": "10.247.119.103:9090", "type": "prometheus" }
- targetThresholds: limite para despejar pods de um nó. Quando o uso de CPU ou memória de um nó é maior que o limite, os pods no nó serão despejados. Exemplo:
{ "cpu": 60, "memory": 65 }
- thresholds: limite para um nó executar pods. Se o valor do nó for menor que o limite, o nó permitirá que pods despejados sejam executados. Exemplo:
{ "cpu": 30, "memory": 30 }
- Clique em OK.
Configurar uma política HighNodeUtilization
Ao configurar uma política HighNodeUtilization, faça o seguinte para habilitar a política de agendamento binpack no Volcano scheduler:
- Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster. Escolha Add-ons no painel de navegação, localize Volcano Scheduler à direita e clique em Install ou Edit.
- Na área Parameters, modifique Advanced Settings para configurar a política HighNodeUtilization.
{ "colocation_enable": "", "default_scheduler_conf": { "actions": "allocate, backfill", "tiers": [ { "plugins": [ { "name": "priority" }, { "enablePreemptable": false, "name": "gang" }, { "name": "conformance" }, { "arguments": { "binpack.weight": 5 }, "name": "binpack" } ] }, { "plugins": [ { "enablePreemptable": false, "name": "drf" }, { "name": "predicates" }, { "name": "nodeorder" } ] }, { "plugins": [ { "name": "cce-gpu-topology-predicate" }, { "name": "cce-gpu-topology-priority" }, { "name": "cce-gpu" } ] }, { "plugins": [ { "name": "nodelocalvolume" }, { "name": "nodeemptydirvolume" }, { "name": "nodeCSIscheduling" }, { "name": "networkresource" } ] } ] }, "deschedulerPolicy": { "profiles": [ { "name": "ProfileName", "pluginConfig": [ { "args": { "ignorePvcPods": true, "nodeFit": true, "priorityThreshold": { "value": 100 } }, "name": "DefaultEvictor" }, { "args": { "evictableNamespaces": { "exclude": ["kube-system"] }, "thresholds": { "cpu": 25, "memory": 25 } }, "name": "HighNodeUtilization" } ], "plugins": { "balance": { "enabled": ["HighNodeUtilization"] } } } ] }, "descheduler_enable": "true", "deschedulingInterval": "10m" }
Tabela 3 Parâmetros principais de uma política do reagendamento de cluster Parâmetro
Descrição
descheduler_enable
Se deve ativar uma política de reagendador de clusters.
- true: a política do reagendador de cluster está ativada.
- false: a política do reagendador de cluster está desativada.
deschedulingInterval
Período de reagendamento.
deschedulerPolicy
Política do reagendador do cluster. Para mais detalhes, consulte Tabela 4.
Tabela 4 Parâmetros de deschedulerPolicy Parâmetro
Descrição
profiles.[].plugins.balance.enable.[]
Política do reagendador para um cluster.
HighNodeUtilization: a política para minimizar a CPU e fragmentos de memória é usada.
profiles.[].pluginConfig.[].name
Configuração de uma política do reagendador com reconhecimento de carga. Opções:
- DefaultEvictor: política de despejo padrão
- HighNodeUtilization: política para minimizar fragmentos de CPU e memória
profiles.[].pluginConfig.[].args
Configuração da política do reagendador de um cluster.
- Configurações para a política DefaultEvictor:
- ignorePvcPods: se os pods de PVC devem ser ignorados ou despejados. O valor true indica que os pods são ignorados, e o valor false indica que os pods são despejados.
- nodeFit: se deve considerar as configurações de agendamento existentes, como afinidade de nó e mancha no nó durante o agendamento. O valor true indica que as configurações de agendamento existentes serão consideradas e o valor false indica que elas serão ignoradas.
- priorityThreshold: definição de prioridade. Se a prioridade de um pod for maior ou igual ao valor deste parâmetro, o pod não será despejado. Exemplo:
{ "value": 100 }
- Configurações para a política HighNodeUtilization:
- evictableNamespaces: espaços de nomes onde a política de despejo entra em vigor. O valor padrão são os namespaces diferentes do kube-system. Exemplo:
{ "exclude": ["kube-system"] }
- thresholds: limite para despejar pods de um nó. Quando o uso da CPU ou da memória de um nó é menor que o limite, os pods no nó serão despejados. Exemplo:
{ "cpu": 25, "memory": 25 }
- evictableNamespaces: espaços de nomes onde a política de despejo entra em vigor. O valor padrão são os namespaces diferentes do kube-system. Exemplo:
- Clique em OK.
Casos de uso
HighNodeUtilization
- Verifique os nós em um cluster. Verifica-se que alguns nós são subutilizados.
- Edite os parâmetros do vulcão para ativar o reagendador e defina os limites de uso de CPU e memória para 25. Quando o uso da CPU e da memória de um nó for menor que 25%, os pods no nó serão despejados.
- Depois que a política entrar em vigor, os pods no nó com endereço IP 192.168.44.152 serão migrados para o nó com endereço IP 192.168.54.65 para minimizar fragmentos de recursos.
Problemas comuns
Se um parâmetro de entrada estiver incorreto, por exemplo, o valor inserido além do intervalo de valores aceitos ou estiver em um formato incorreto, um evento será gerado. Nesse caso, modifique a configuração do parâmetro conforme solicitado.