将 Pods 分配给 kubernetes 上的节点时,将节点亲和力和 pod 亲和力规则结合起来是一种好习惯(可行)吗

Is it a good practice (feasible) to combine both nodeAfinity and podAffinity rules when assigning Pods to Nodes on kubernetes

在将 Pods 分配给 kubernetes 上的节点时,结合 nodeAfinity 和 podAffinity 规则 是一个好的做法(可行)吗?

示例:

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

当然可以将它们组合起来。实际上,这会在您使用 podAffinity 选择的 pods 的调度上强制执行一种亲和力。即使那些 pods 本身没有任何 nodeAffinity 或 podAffinity,调度程序也会尝试将它们调度到您的 node-and-pod-affinity-combined pods 所在的节点 运行。

更常见的用例是一起使用 nodeAffinitypodAntiAffinity 来在一组节点上传播 pods。