Statefulset的副本调度问题
Statefulset's replica scheduling questions
有没有办法告诉 Kuberbetes 如何在 statefulset 中调度副本?例如,我将节点分为 3 个不同的可用性区域 (AZ)。我相应地标记了这些节点。现在我希望 K8s 根据节点标签在每个 AZ 中放置 1 个副本。谢谢
Pods 将始终尝试跨不同的节点进行调度,为了实现您正在寻找的目标,您可以尝试使用 DaemonSet
,这将只允许其中一种 pods在每个节点中。
此外,您可以根据该节点中已安排的 pods 使用反亲和性。
https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
您正在查找的功能称为 Pod Anti-Affinity,可以这样指定:
apiVersion: apps/v1
kind: StatefulSet
[..]
spec:
template:
spec:
affinity:
nodeAffinity: {}
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchLabels:
app: myapp
topologyKey: az
weight: 100
[..]
从 Kubernetes 1.18 开始,还有 Pod Topology Spread Constraints,这是指定这些反亲和性规则的更好方法。
有没有办法告诉 Kuberbetes 如何在 statefulset 中调度副本?例如,我将节点分为 3 个不同的可用性区域 (AZ)。我相应地标记了这些节点。现在我希望 K8s 根据节点标签在每个 AZ 中放置 1 个副本。谢谢
Pods 将始终尝试跨不同的节点进行调度,为了实现您正在寻找的目标,您可以尝试使用 DaemonSet
,这将只允许其中一种 pods在每个节点中。
此外,您可以根据该节点中已安排的 pods 使用反亲和性。
https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
您正在查找的功能称为 Pod Anti-Affinity,可以这样指定:
apiVersion: apps/v1
kind: StatefulSet
[..]
spec:
template:
spec:
affinity:
nodeAffinity: {}
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchLabels:
app: myapp
topologyKey: az
weight: 100
[..]
从 Kubernetes 1.18 开始,还有 Pod Topology Spread Constraints,这是指定这些反亲和性规则的更好方法。