Eine Toleration ist eine Ausnahme auf Pod-Ebene, mit der ein Pod einen Taint eines Knotens „toleriert“. Während der Taint den Knoten markiert, erlaubt die Toleration dem Pod, trotzdem dort zu laufen.

Aufbau einer Toleration

Im Pod-Manifest steht die Toleration unter spec.tolerations. Die wichtigsten Felder sind key, operator, value, effect und optional tolerationSeconds:

tolerations:
- key: "dedicated"
  operator: "Exists"
  effect: "NoSchedule"

Zwei Operatoren stehen zur Wahl:

  • Equal: Die Toleration matcht nur, wenn Schlüssel und Wert dem Taint entsprechen.
  • Exists: Es genügt, dass der Schlüssel existiert – der Wert spielt keine Rolle.

Wichtige Eigenschaften

  • Tolerieren erlaubt das Scheduling, garantiert es aber nicht: Der Scheduler prüft weiterhin Ressourcen, Selektoren und Affinitäten.
  • Bei Effekt NoExecute bestimmt tolerationSeconds, wie lange der Pod nach dem Setzen des Taints auf dem Knoten bleiben darf.
  • Systemkritische Pods wie der DaemonSet tragen automatisch Tolerierungen für die Control-Plane-Taints und die Ausfall-Taints.

Typischer Einsatz: Ein GPU-Workload bekommt die Toleration für dedicated=gpu:NoSchedule und landet dadurch auf dem reservierten GPU-Knoten – während alle anderen Pods dort abgewiesen werden.

Verwandte Grundlagen: Kubernetes, Kubernetes Node, kube-scheduler, kubectl-Befehle.