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.