For multiple reasons, there can be a need to run a pod on a specific worker node.
There can be multiple reasons, node hardware being the common one.
Node affinity is a set of rules used by the scheduler to determine where a pod can be placed.
In Kubernetes terms, it is referred to as
nodeSelector
, and nodeAffinity/podAffinity
fields under PodSpec
.In Kubernetes, we can achieve nodeAffinity with the help of:
nodeSelector
nodeAffinity
(more flexibility)
Node affinity is conceptually similar to
nodeSelector
– it allows you to constrain which nodes your pod is eligible to be scheduled on, based on labels on the node.nodeAffinity-required.yaml
apiVersion: v1 kind: Pod metadata: name: kplabs-node-affinity spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: color operator: In values: - blue containers: - name: with-node-affinity image: nginx
nodeAffinity-preferred.yaml
apiVersion: v1 kind: Pod metadata: name: kplabs-node-affinity-preferred spec: affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: memory operator: In values: - high - medium containers: - name: kplabs-affinity-preferred image: nginx