Die Node-Affinity ist eine Kubernetes-Regel, die Pods gezielt auf Knoten mit bestimmten Labels lenkt. Sie ist die ausdrucksstärkere Weiterentwicklung des einfachen nodeSelector.
Zwei Arten von Regeln
Im Pod-Manifest steht die Node-Affinity unter spec.affinity.nodeAffinity:
- requiredDuringSchedulingIgnoredDuringExecution: Harte Regel – der Scheduler kann den Pod nur auf einem Knoten platzieren, der die Bedingung erfüllt.
- preferredDuringSchedulingIgnoredDuringExecution: Weiche Regel – der Scheduler bevorzugt passende Knoten und gewichtet das mit
weight(1 bis 100), kann aber auch andere wählen.
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values: ["ssd"]
Die Operatoren in matchExpressions entsprechen denen der Selectors: In, NotIn, Exists, DoesNotExist, Gt und Lt.
Was bedeutet „IgnoredDuringExecution“?
Der Namenszusatz besagt: Ändert sich ein Node-Label, nachdem der Pod läuft, wird er nicht verschoben. Die Regel wirkt nur beim Scheduling – genau wie bei Selectors.
Abgrenzung zu Taints und Pod-Affinität
- Taints und Tolerations stoßen Pods von Knoten ab beziehungsweise erlauben das Betreten – Node-Affinity zieht Pods an.
- Die Pod-Affinität (podAffinity) platziert Pods relativ zu anderen Pods, etwa in dieselbe Zone; die Node-Affinity bezieht sich nur auf die Labels des Knotens.
Verwandte Grundlagen: Kubernetes, Kubernetes Node, kube-scheduler, Pod.