ACK Scheduler Quando os recursos do cluster estão escassos, tarefas de alta prioridade podem falhar devido à falta de capacidade disponível. Com a preempção ativada, o ACK Scheduler simula a disponibilidade de recursos e remove pods de baixa prioridade para liberar capacidade computacional, permitindo que tarefas de alta prioridade iniciem rapidamente.
Antes de começar
Leia Prioridade e preempção de pods para entender PriorityClass, priorityClassName e como a prioridade do pod afeta a ordem de agendamento e remoção.
Como funciona a preempção
Com a preempção ativada, o ACK Scheduler segue este procedimento:
-
Especifique a prioridade da tarefa: adicione
priorityClassNameàs configurações dos pods.Componentes do sistema, como kube-proxy e etcd, geralmente usam a PriorityClass
system-node-critical. A maioria executa como DaemonSets e não é removida por padrão. Simule a preempção: ao detectar um pod pendente que não pode ser agendado, o ACK Scheduler simula se a remoção de pods de baixa prioridade liberaria recursos suficientes.
Remova com segurança os pods de baixa prioridade: após o ACK Scheduler acionar a preempção, o kubelet remove os pods identificados e libera recursos para o pod de alta prioridade.
Reagende os pods removidos: controladores como Deployments recriam os pods removidos e os agendam em outros nós. Se os recursos continuarem insuficientes, os pods permanecem pendentes.
Políticas de preempção
O ACK Scheduler oferece suporte às seguintes políticas de preempção, configuráveis pelo parâmetro PreemptionAlgorithm.
|
Política |
Descrição |
|
Default |
Política de preempção padrão do Kubernetes. Tenta primeiro o agendamento direto e, quando os recursos são insuficientes, simula a remoção de pods de baixa prioridade. Consulte Prioridade e preempção de pods. |
|
ElasticQuota |
Realiza preempção com base na ElasticQuotaTree. Veja Detalhes da política ElasticQuota. |
|
Auto |
Prioriza ElasticQuota e reverte para Default quando ElasticQuota não surte efeito. |
|
None |
Desativa a preempção. |
A figura a seguir ilustra como a política entra em vigor.
Detalhes da política ElasticQuota
Quando a política ElasticQuota está ativa, o ACK Scheduler executa a preempção em três etapas:
Identifique a lista de preempção: diferentemente das tarefas comuns, o ACK Scheduler combina todos os pods pendentes de um gang em uma única lista de preempção. O gang só é processado se todos os pods puderem ser agendados via preempção. Caso algum pod tenha alta prioridade, todo o gang é tratado como alta prioridade.
-
Identifique os nós viáveis: o ACK Scheduler determina os nós candidatos:
Se vários pods no gang exigirem preempção, qualquer nó compatível com pelo menos um pod é adicionado ao pool de candidatos. Em seguida, o ACK Scheduler libera recursos para os pods restantes.
Quando apenas um pod exige preempção, o ACK Scheduler filtra os nós Unschedulable para identificar aqueles com recursos insuficientes ou incompatíveis.
-
Simule a preempção: o ACK Scheduler filtra os pods elegíveis para preempção nos nós viáveis. Um pod é elegível se ambas as condições forem atendidas:
Não está sendo preemptado por outro pod ou tarefa.
Pode ser removido conforme os PodDisruptionBudgets (PDBs) relevantes.
Em seguida, o ACK Scheduler aplica as regras da ElasticQuotaTree:
-
Se o pod preemptor pertencer a uma Quota:
Uso atual da Quota igual ou inferior à garantia
Min: o pod pode preemptar pods de outras Quotas que utilizem recursos acima de sua garantiaMin.Uso atual da Quota superior à garantia
Min: o pod só pode preemptar pods de menor prioridade dentro da própria Quota (preempção intra-quota).
Se o pod preemptor não pertencer a nenhuma Quota: a preempção não é permitida.
Após identificar os pods a serem preemptados, o ACK Scheduler simula a remoção deles e o reagendamento do pod preemptor. Se a simulação for bem-sucedida, os pods são removidos e reagendados. Em caso de falha, a preempção é encerrada.
Ative preempção
Personalize os parâmetros do agendador e defina preemptionAlgorithm como Default, ElasticQuota, Auto ou None. O valor padrão é Auto.
Próximos passos
Trabalhar com gang scheduling — Como o gang scheduling interage com a preempção ElasticQuota.
Melhorar a utilização de recursos com ElasticQuotaTree e filas de tarefas — Defina limites de cota para a preempção ElasticQuota.
Prioridade e preempção de pods — Referência do Kubernetes para PriorityClass e preempção.
PodDisruptionBudgets — Proteja workloads críticos contra remoção durante a preempção.