Conceitos · Scheduling

Scheduling Avançado

Como influenciar onde o scheduler aloca seus Pods: nodeSelector, Affinity, AntiAffinity, Taints, TopologySpread e PriorityClass.

// QUANDO USAR CADA UM
Alocar em node com label específico?
nodeSelector ou nodeAffinity
Espalhar réplicas em AZs/nodes?
topologySpreadConstraints
Dedicar node a workload específico?
Taints + Tolerations
Co-localizar dois apps?
podAffinity
Separar réplicas em nodes diferentes?
podAntiAffinity
Garantir recursos para prod vs batch?
PriorityClass
🎯
nodeSelector
A forma mais simples de restringir um Pod a nodes com labels específicos.
🧲
Node Affinity
Versão avançada do nodeSelector. Suporta expressões lógicas, operadores e dois modos: obrigatório ou preferencial.

Node Affinity substitui o nodeSelector com muito mais flexibilidade. Tem dois tipos: requiredDuringSchedulingIgnoredDuringExecution (obrigatório) e preferredDuringSchedulingIgnoredDuringExecution (preferencial com peso).

CASO DE USO

Pods de produção que DEVEM rodar em nodes on-demand, mas PREFEREM nodes na us-east-1a.

EXEMPLO
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: node-lifecycle
          operator: In
          values: [on-demand]
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 80
      preference:
        matchExpressions:
        - key: topology.kubernetes.io/zone
          operator: In
          values: [us-east-1a]
💡 O sufixo IgnoredDuringExecution significa que pods já rodando NÃO são removidos se o node perder o label. Uma versão RequiredDuringExecution está planejada mas ainda não é GA.
🔗
Pod Affinity & AntiAffinity
Faz com que Pods sejam atraídos ou repelidos por outros Pods com base em labels e topologia.
⚖️
topologySpreadConstraints
Distribui Pods de forma balanceada entre nodes, zonas ou qualquer topologia. Mais flexível e eficiente que PodAntiAffinity.
🚫
Taints & Tolerations
Taints repelem Pods de um Node. Tolerations permitem que Pods específicos ignorem o Taint.
🏆
PriorityClass
Define a prioridade de um Pod. Pods de baixa prioridade são removidos (preempted) para abrir espaço para pods de alta prioridade.