如何在kubernetes的所有区域中均匀分布pod ?



我试图在所有区域均匀分布pod,但无法使其正常工作。

在k8s集群中,节点分布在3个az中。现在假设最小节点数是1,现在有2个节点,第一个节点完全是pod。现在,当我创建一个部署(副本2)与拓扑扩展约束作为ScheduleAnyway,然后因为第二个节点有足够的资源,两个pod都部署在该节点。我不想那样。我试着把条件改为DoNotSchedule。但是由于我只有3个az,我只能安排3个pod,并且它为所有3个pod触发新节点。我想确保relpica's分布在所有az中。

这是部署规范的一个片段。有人知道应该怎么做吗?

topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- "my-app" 

你需要调整属性max skew

给属性赋一个更高的值

参考下面给出的例子:

https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/

如果我很好地理解你的问题,你可以使用node Affinity规则和maxSkew字段。

请看看我的答案,或者看看下面。在这篇文章中,我描述了如何强制pod在节点之间进行拆分。您所需要做的就是在matchExpressions部分中相应地设置keyvalue参数。此外,您可能会发现requiredDuringSchedulingIgnoredDuringExecution字段和preferredDuringSchedulingIgnoredDuringExecution字段非常有用。


看这个示例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

配置思路:我在这里使用nodeAffinity来指示pod可以放置在哪些节点上:

- key: kubernetes.io/hostname

values:
- worker-1
- worker-2

设置以下行很重要:

- maxSkew: 1

根据文档:

maxSkew描述pod可能不均匀分布的程度。必须大于0

由于此,节点之间分配的提要数量的差异将始终最大等于1。

本节:

preferredDuringSchedulingIgnoredDuringExecution:
- weight: 50
preference:
matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-1

是可选的,但是,它将允许您更好地调整免费节点上的提要分布。您可以在这里找到requiredDuringSchedulingIgnoredDuringExecutionpreferredDuringSchedulingIgnoredDuringExecution之间的差异的描述:

因此,requiredDuringSchedulingIgnoredDuringExecution的一个示例将是"仅在带有英特尔cpu的节点上运行pod";一个例子preferredDuringSchedulingIgnoredDuringExecution将是"尝试在故障区XYZ中运行这组pod,但如果不可能,那么允许一些在其他地方运行"。

相关内容

  • 没有找到相关文章

最新更新