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:NoSchedule für KI-Workloads reservieren.
  • Team-Isolation: Knoten nur für bestimmte Anwendungen oder Mandanten freigeben.
  • Wartung: Vor einem kubectl drain verhindern 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.