Estratégia de Affinity
A estratégia de affinity define onde cada carga pode (e não pode) rodar. Ela trabalha em conjunto com os taints: o taint repele, a affinity atrai.
nodeAffinity — atrair para o nó certo
Seção intitulada “nodeAffinity — atrair para o nó certo”Bancos de dados declaram nodeAffinity obrigatória para o label do nó de
banco. Sem ela, o pod poderia ficar pendente mesmo tolerando o taint.
affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/database operator: In values: - "true"required...= regra dura: o pod só agenda em nós que satisfazem o termo.- O par com a toleration é o que libera o
rke-db-00.
podAntiAffinity — espalhar réplicas
Seção intitulada “podAntiAffinity — espalhar réplicas”Para aplicações stateless com várias réplicas, usamos podAntiAffinity para
evitar que todas caiam no mesmo nó, melhorando a resiliência entre
rke-app-01 e rke-app-02.
affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: topologyKey: kubernetes.io/hostname labelSelector: matchLabels: app: nextcloudpreferred...= regra suave: o scheduler tenta espalhar, mas não falha se não conseguir.
Resumo da estratégia
Seção intitulada “Resumo da estratégia”| Carga | Regra | Objetivo |
|---|---|---|
| Banco (PostgreSQL) | nodeAffinity dura + toleration | Fixar no rke-db-00 |
| App stateless | podAntiAffinity suave | Espalhar entre rke-app-01/02 |
| Serviços de base | (no rke-mngm-01) | Isolar identidade/segredos |