StatefulSets 中的节点反亲和性,如何仅依赖节点名称与查找特定标签?

Node AntiAffinity in StatefulSets, how to rely solely on node name vs. finding a specific label?

我在使用 nodeAntiAffinity 时遇到问题...在我的用例中,我需要阻止同一节点上的 StatefulSet 运行 实例,仅此而已。我的节点没有标签,文档希望将其列为要求。是否可以完全依赖内置标签的唯一值 "kubernetes.io/hostname"?

我在 StatefulSet 中尝试做的事情:

spec:
  podManagementPolicy: OrderedReady
  affinity:
    nodeAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        topologyKey: "kubernetes.io/hostname"

文档中的示例说明我必须做什么:

spec:
  podManagementPolicy: OrderedReady
  affinity:
    nodeAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
            - key: <some key>
              operator: In
              values:
                - <some value>
        topologyKey: "kubernetes.io/hostname"

为了防止 StatefulSet 运行 的实例在同一个节点上,你需要一个 podAntiAffinity,摘自 Kubernetes document 的 zookeeper 教程:

  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchExpressions:
              - key: "app"
                operator: In
                values:
                - zk
          topologyKey: "kubernetes.io/hostname"