Pular para o conteúdo

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.

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.

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: nextcloud
  • preferred... = regra suave: o scheduler tenta espalhar, mas não falha se não conseguir.
CargaRegraObjetivo
Banco (PostgreSQL)nodeAffinity dura + tolerationFixar no rke-db-00
App statelesspodAntiAffinity suaveEspalhar entre rke-app-01/02
Serviços de base(no rke-mngm-01)Isolar identidade/segredos