Taints sind Markierungen auf Kubernetes-Knoten (Nodes), mit denen sich festlegen lässt, welche Pods dort nicht starten sollen. Ein Taint wirkt wie ein Schild „Hier nicht parken“: Nur Pods mit der passenden Toleration dürfen auf dem Knoten landen.
Aufbau eines Taints
Ein Taint besteht aus einem Schlüssel-Wert-Paar und einem Effekt: key=value:Effect. Beispiel:
kubectl taint nodes node1 dedicated=gpu:NoSchedule
Kubernetes kennt drei Effekte:
- NoSchedule: Der Scheduler platziert keine neuen Pods, die den Taint nicht tolerieren.
- PreferNoSchedule: Weiche Vermeidung – der Scheduler versucht, den Knoten zu meiden, kann ihn aber wählen, wenn es keine Alternative gibt.
- NoExecute: Der Knoten stößt zusätzlich laufende Pods ohne passende Toleration ab (Eviction).
Wozu Taints einsetzen?
- Dedizierte Hardware: GPU-Knoten per
dedicated=gpu:NoSchedulefür KI-Workloads reservieren. - Team-Isolation: Knoten nur für bestimmte Anwendungen oder Mandanten freigeben.
- Wartung: Vor einem
kubectl drainverhindern Taints, dass neue Pods auf den Knoten kommen.
Der Node-Controller setzt außerdem automatische Taints, etwa node.kubernetes.io/not-ready oder node.kubernetes.io/unreachable mit Effekt NoExecute – so verlassen Pods einen ausgefallenen Knoten nach Ablauf der Toleranzzeit.
Taints sind die Abstoßungs-Seite der Scheduling-Steuerung. Die Anziehungs-Seite bildet die Node-Affinity: Während Taints Pods fernhalten, zieht Affinität Pods gezielt auf passend gelabelte Knoten.
Verwandte Grundlagen: Kubernetes, Kubernetes Node, kube-scheduler, kubectl-Befehle.