如何保证在 Kubernetes StatefulSet 中跨 AZ 均匀分布 Pod

How to guarantee even spread pod distribution across AZ in Kubernetes StatefulSet

我在 EKS 集群中部署了一个 K8s StatefulSet,有 30 个副本(或 N 个副本,其中 N 是 3 的倍数)。

EKS 集群有 3 个节点,一个节点一个 AZ,我想 保证 与 Kubernetes Affinity/AntiAffinity 相等 pods 在不同可用区的分布。

us-west-2a (n nodes) -> N/3 pods
us-west-2b (m nodes) -> N/3 pods
us-west-2c (o nodes) -> N/3 pods

谢谢

虽然这对于节点亲和力来说太有可能了,但一种直接的方法是使用 topologySpreadContraints,这里是 k8s documentation, diagrams and examples 以查看它的实际效果。

您始终可以使用从 AWS 获得的选择器和默认标签。这里有一个简单的 pod 规范示例

topologySpreadConstraints:
  - maxSkew: 1
    topologyKey: "topology.kubernetes.io/zone"
    whenUnsatisfiable: DoNotSchedule
    labelSelector:
      matchLabels:
        app: myapp

您可以根据需要包括倾斜和其他选项,如下所述:https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/