如何保证在 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/
我在 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/