Kubernetes反亲和性规则,将部署Pod扩展到至少2个节点 [英] Kubernetes anti-affinity rule to spread Deployment Pods to at least 2 nodes
问题描述
我在K8S部署中配置了以下反关联规则:
spec:
...
selector:
matchLabels:
app: my-app
environment: qa
...
template:
metadata:
labels:
app: my-app
environment: qa
version: v0
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- my-app
topologyKey: kubernetes.io/hostname
在其中我说我不希望在我的K8S集群的节点上调度任何Pod副本,在该节点中已经存在相同应用程序的Pod。因此,例如,拥有:
nodes(a,b,c) = 3
replicas(1,2,3) = 3
副本_1计划于node_a,副本_2计划于node_b,副本_3计划于node_c
因此,我将每个Pod计划在不同的节点中。
但是,我想知道是否有办法指定:我希望将我的Pod分布在至少2个节点中,以保证高可用性而不将所有Pod分布到其他节点,例如:
nodes(a,b,c) = 3
replicas(1,2,3) = 3
副本_1计划于node_a,副本_2计划于node_b,副本_3计划于node_a
因此,总而言之,我希望有一个更软的约束,它允许我保证高可用性将部署的副本分布在至少2个节点上,而不必为特定应用程序的每个Pod启动一个节点。
谢谢!
推荐答案
我想我找到了您问题的解决方案。请看以下示例YAML文件:
spec:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
example: app
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-1
- worker-2
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 50
preference:
matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-1
此配置的想法: 我在这里使用nodeAffacy来指示哪些节点pod可以放置:
- key: kubernetes.io/hostname
和
values:
- worker-1
- worker-2
请务必设置以下行:
- maxSkew: 1
max Skew描述实例可能分布不均匀的程度。它必须大于零。
正因为如此,节点之间分配的提要数量的差异将始终最大等于1。
此部分:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 50
preference:
matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-1
是可选的,但是它将允许您更好地调整空闲节点上的提要分布。Here您可以找到具有以下差异的说明:requiredDuringSchedulingIgnoredDuringExecution
和preferredDuringSchedulingIgnoredDuringExecution
:
因此,
requiredDuringSchedulingIgnoredDuringExecution
的示例是仅在具有英特尔CPU的节点上运行Pod;而preferredDuringSchedulingIgnoredDuringExecution
的示例是尝试在故障区XYZ中运行这组Pod,但如果不可能,则允许某些Pod在其他位置运行。
这篇关于Kubernetes反亲和性规则,将部署Pod扩展到至少2个节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!