是否在 Kubernetes 中的
podAffinity
上设置以下 Deployment
:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: NotIn
values:
- myapp
topologyKey: "kubernetes.io/hostname"
与设置以下效果相同
antiAffinity
?
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- myapp
topologyKey: "kubernetes.io/hostname"
第一个语句断言,只有当该节点上调度了标签为 app 与 myapp 不同的 pod 时,您才能在该节点上调度 pod;第二条语句断言,如果某个节点上有某个 pod,则无法在该节点上调度 pod在同一节点上,标签 app 等于 myapp,因此它们是不同的。如果节点上没有标签为app的pod,则第一个语句不允许调度,第二个语句允许调度。 请注意,如果没有 pod 与亲和性策略相匹配,kubernetes 会检查 pod 本身是否匹配,如果匹配,则调度 pod,因此亲和性规则可能会在不同情况下改变行为。此外,在语句中没有命名空间选择,因此规则仅适用于出现亲和性/反亲和性定义的 pod 的命名空间。