K8s em Exemplos: Taints & Tolerations

Taints marcam nós para repelir Pods; tolerations permitem que Pods sejam agendados em nós com taint. Diferente de affinity (atrair Pods para nós), taints funcionam por repulsão. Use para: nós dedicados, nós GPU, manutenção, prevenir workloads em hardware específico.

taint-effects.yaml

Três efeitos de taint: NoSchedule (novos Pods não serão agendados), PreferNoSchedule (preferência suave para evitar), NoExecute (Pods existentes são despejados, novos Pods não serão agendados).

kubectl taint nodes worker-1 dedicated=gpu:NoSchedule

kubectl taint nodes worker-2 preferred=lowpriority:PreferNoSchedule

kubectl taint nodes worker-3 maintenance=true:NoExecute
toleration-exact.yaml

O operador Equal requer correspondência exata de chave e valor. Este Pod pode executar em nós com taint dedicated=gpu:NoSchedule. Sem esta toleration, seria rejeitado.

apiVersion: v1
kind: Pod
metadata:
  name: gpu-workload
spec:
  tolerations:
    - key: "dedicated"
      operator: "Equal"
      value: "gpu"
      effect: "NoSchedule"
  containers:
    - name: ml-training
      image: ml-trainer:v1
      resources:
        limits:
          nvidia.com/gpu: 1
toleration-exists.yaml

O operador Exists corresponde a qualquer taint com a chave especificada, independente do valor. Útil quando você não se importa com o valor específico do taint.

apiVersion: v1
kind: Pod
metadata:
  name: tolerate-any-dedicated
spec:
  tolerations:
    - key: "dedicated"
      operator: "Exists"
      effect: "NoSchedule"
  containers:
    - name: app
      image: my-app:v1
---
tolerations:
  - operator: "Exists"
terminal

Gerencie taints com kubectl. Adicione taints para repelir Pods, remova taints (com sufixo menos) para permitir agendamento.

$ kubectl taint nodes worker-1 dedicated=gpu:NoSchedule
node/worker-1 tainted

$ kubectl describe node worker-1 | grep -A3 Taints
Taints:             dedicated=gpu:NoSchedule

$ kubectl taint nodes worker-1 dedicated=gpu:NoSchedule-
node/worker-1 untainted

Índice | GitHub | Use as setas do teclado para navegar |