首页 > 解决方案 > 调度尽可能多的 Pod 以适合集群?

问题描述

我有一个批处理作业要运行:处理大量媒体文件。我有一个 Kubernetes 集群来运行它,但我不想更改集群的大小。我想将处理作为低优先级作业运行。只要有空闲的计算资源,它们就应该进行媒体处理。任何时候有其他作业需要资源,媒体进程都应该暂停。

目前,我正在为集群中的每个节点运行一个具有一个副本的部署。我为批处理作业定义了一个PriorityClass,为其他所有内容定义了一个不同的 PriorityClass(具有更高的优先级)。当其他东西需要资源时,这似乎正在努力驱逐正在运行的批处理作业。

我定义了Affinity,特别是WeightedPod(Anti)Affinity以阻止批处理作业在同一台机器上进行调度。

代码本身是一个队列工作者:它从共享队列中拉出一个工作项并处理它,然后返回下一个。如果它被中断(因为它被驱逐),部分工作就会丢失(这很好)。

这工作正常,但我仍然在桌面上留下了很多资源。有没有办法将我的副本数定义为“尽可能多地安排”?我可以要求比集群处理更多的副本;那会是一个很好的解决方案吗?或者 Kubernetes 是否有 10 个 Pod 一次被“挂起”几个月的问题?

标签: kubernetesarchitecture

解决方案


我认为请求比集群可以处理的更多的 pod 并让它们永远挂起并没有什么坏处。我唯一担心的是调度程序是否能够区分正常优先级的待处理 pod 而不是低优先级的待处理 pod,并能够优先处理更紧急的 pod。

恕我直言,解决这个问题的专业方法是利用prometheus 适配器并使用 HPA 使用 prometheus 查询来定位集群的当前容量。这可以为您提供连续的集群容量以及相应地自动扩展的能力。这篇中等文章很好地介绍了这个概念。


推荐阅读