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.