如何从 kubernetes 的节点组选择器中排除备份 pod?

How to exclude HA backup pod from node group selector in kubernates?

我想在 kubernates 中创建仅包含主 pod 并排除备份 pod 的节点组选择器。如何使用 helm chart 实现?

appVersion: version1
kind: StatefulSet
metadata: 
  name: statefulname
  label: 
    ....
    ....
    ....
spec:
  replica: 2

  .....
 container:
   .....
   ....
   nodeselecor:
    {{$nodegroup}}

这里的结果是

 NAME                    READY   STATUS    STARTS   AGE
pod/zookeeper-np-0       1/1     Running   0        203s
pod/zookeeper-np-1       1/1     Running   0        137s

此处副本创建 2 个后缀为 -0 和 -1 的 pod 实例,两者都有相同的节点选择器,但我想这样做 pod/zookeeper-np-0 对于这个节点选择器是节点组 ng1 pod/zookeeper-np-1 对于这个节点选择器是节点组 ng2

我试过迭代也没有出错

Caused By: java.lang.IllegalStateException: Identified another participant with the same name for Space: newspace_container_newspace

您尚未共享 K8s 版本详细信息,但是您可以使用 Node affinitystatefulset 或 [=26] =]拓扑传播约束

topologySpreadConstraints:
    - maxSkew: <integer>
      topologyKey: <string>
      whenUnsatisfiable: <string>
      labelSelector: <object>

阅读更多信息:https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/

使用 topologySpreadConstraints 您可以将 PODs 分布在节点上。

节点亲和力

nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/e2e-az-name
            operator: In
            values:
            - e2e-az1
            - e2e-az2

阅读更多:https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/

您还可以使用节点亲和力在不同节点上执行相同的调度 PODs。

i want to that for pod/zookeeper-np-0 for this node selector is node group ng1 pod/zookeeper-np-1 for this node selector is node group ng2

每个 StatefulSet 只能有一个 nodeSelector 应用于此 StatefulSet 控件下的所有 pods。如果你需要将 pod 放在特定的节点组中,你需要 运行 它们在不同的 StatefulSet 中有自己的 nodeSelector.