Is it a good practice (feasible) to combine both nodeAfinity and podAffinity rules when assigning Pods to Nodes on kubernetes.
Example :
apiVersion: v1
kind: Pod
metadata:
name: node-and-pod-affinity-combined
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/e2e-az-name
operator: In
values:
- e2e-az1
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: node-label-key
operator: In
values:
- some-node-label-value
Sure you can combine them. Actually this enforces a sort of affinity on scheduling of pods you have selected using podAffinity
. Even if those pods do not have any nodeAffinity or podAffinity themselves, scheduler will try to schedule them to nodes on which your node-and-pod-affinity-combined
pods are running.
More common use case would be using nodeAffinity
and podAntiAffinity
together to spread the pods on set of nodes.