kubernetes - 调度尽可能多的 Pod 以适合集群?

标签 kubernetes architecture

我有一个批处理作业要运行:处理大量媒体文件。我有一个 Kubernetes 集群来运行它,但我不想更改集群的大小。我想将处理作为低优先级作业运行。只要有空闲的计算资源,它们就应该进行媒体处理。任何时候有其他作业需要资源,媒体进程都应该暂停。
目前,我正在运行 Deployment我的集群中的每个节点都有一个副本。我定义了一个 PriorityClass对于批处理作业和其他所有内容的不同 PriorityClass(具有更高优先级)。当其他东西需要资源时,这似乎正在努力驱逐正在运行的批处理作业。
我定义了 Affinity ,特别是 WeightedPod(Anti)Affinity阻止批处理作业在同一台机器上调度。
代码本身是一个队列 worker :它从共享队列中拉出一个工作项并处理它,然后返回下一个。如果它被中断(因为它被驱逐),部分工作就会丢失(这很好)。
这工作正常,但我仍然在桌面上留下了很多资源。有没有办法将我的副本数定义为“尽可能多地安排”?我可以要求比集群处理更多的副本;那会是一个很好的解决方案吗?或者 Kubernetes 是否有 10 个 Pod 一次被“挂起”几个月的问题?

最佳答案

我认为请求比集群可以处理的更多的 pod 并让它们永远挂起并没有什么坏处。我唯一关心的是调度程序是否能够区分正常优先级的挂起 pod 而不是低优先级的挂起 pod,并能够优先处理更紧急的 pod。
恕我直言,解决这个问题的专业方法是利用 prometheus adapter并使用 HPA 使用 prometheus 查询来定位集群的当前容量。这可以为您提供连续的集群容量以及相应地自动扩展的能力。 This medium article对这个概念有很好的介绍。

关于kubernetes - 调度尽可能多的 Pod 以适合集群?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64186983/

相关文章:

kubernetes - 如何使用 jsonpath 从 kubectl 中提取多个值

architecture - 哪些企业架构工具支持 DoDAF 2.0?

c# - DI : Associating entities with repository

kubernetes - 如何将kubernetes 1.10.4更新到1.11

Kubernetes:使用 kubectl 修改 secret ?

ios - Swift/iOS - 在 View Controller 之间共享模型状态

rest - REST 比 GraphQL 更适合的项目?

assembly - 我正在尝试学习汇编语言,我有一些疑问,我在下面提到

docker - Kubernetes证书管理器证书生成错误

浏览器无法访问 Kubernetes MetalLB 外部 IP