Node Affinity

Node Affinity


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.
notion image
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