k8s 索引作业 - 如何将 Pod 分组到单个节点上?

问题描述 投票:0回答:1

我正在运行带有托管节点组和集群自动缩放程序的 EKS 1.29 集群。

当没有作业时,我用来运行 k8s 索引作业的节点组会缩小到零。一个节点最多可容纳 4 个作业,使用 Pod 规范的

resources.requests
强制执行。

我必须运行一项工作

(kind: Job)
parallelism: 100, completions: 100 and completionMode: Indexed
并增加复杂性。我希望根据
job-completion-index
值来安排 Pod。在这种情况下,具有
job-completion-index: 0-3
的 Pod 应调度在同一节点上,具有
job-completion-index: 4-7
的 Pod 应调度在同一节点上,依此类推。我正在寻找调度程序的软偏好,不需要强制执行。

我该怎么做?

kubernetes amazon-eks jobs kubernetes-jobs kube-scheduler
1个回答
0
投票

我可以想到两种方法也许可以满足您的要求。

  1. 针对此类作业开发调度器插件,并根据 pod 和节点的索引注入节点亲和性,以相互匹配,例如 exec-job-0 将具有 int(0/4),因此它将被放置到 exec-node-<0%4>,因此它将是 exec-node-0,exec-job-5 将具有 int(5/4),并且它将被放置到 exec-node-1。如果节点名称不可预测,也许您应该在调度程序中实现映射。

  2. 使用podAffinity和podAntiAffinity,对于exec-job-0/4/8,我们称其为每个节点上的lead pod,为这些pod注入一个特殊的标签,让它们使用podAntiAffinity调度到不同的节点。对于后续 pod,使用 podAffinity 调度到与其领先 pod 相同的节点。 例如,node-0上的lead pod exec-job-0有标签:job-head-pod(对于podAntiAffinity)和job-group-0(对于podAffinity),那么所有head pod将被调度到不同的节点,因为job-head-pod 标签,exec-job-1 将使用 podAffinity job-group-0 并调度到 node-0。

© www.soinside.com 2019 - 2024. All rights reserved.