kubernetes - 调度尽可能多的 Pod 以适合集群?
问题描述
我有一个批处理作业要运行:处理大量媒体文件。我有一个 Kubernetes 集群来运行它,但我不想更改集群的大小。我想将处理作为低优先级作业运行。只要有空闲的计算资源,它们就应该进行媒体处理。任何时候有其他作业需要资源,媒体进程都应该暂停。
目前,我正在为集群中的每个节点运行一个具有一个副本的部署。我为批处理作业定义了一个PriorityClass,为其他所有内容定义了一个不同的 PriorityClass(具有更高的优先级)。当其他东西需要资源时,这似乎正在努力驱逐正在运行的批处理作业。
我定义了Affinity,特别是WeightedPod(Anti)Affinity以阻止批处理作业在同一台机器上进行调度。
代码本身是一个队列工作者:它从共享队列中拉出一个工作项并处理它,然后返回下一个。如果它被中断(因为它被驱逐),部分工作就会丢失(这很好)。
这工作正常,但我仍然在桌面上留下了很多资源。有没有办法将我的副本数定义为“尽可能多地安排”?我可以要求比集群处理更多的副本;那会是一个很好的解决方案吗?或者 Kubernetes 是否有 10 个 Pod 一次被“挂起”几个月的问题?
解决方案
我认为请求比集群可以处理的更多的 pod 并让它们永远挂起并没有什么坏处。我唯一担心的是调度程序是否能够区分正常优先级的待处理 pod 而不是低优先级的待处理 pod,并能够优先处理更紧急的 pod。
恕我直言,解决这个问题的专业方法是利用prometheus 适配器并使用 HPA 使用 prometheus 查询来定位集群的当前容量。这可以为您提供连续的集群容量以及相应地自动扩展的能力。这篇中等文章很好地介绍了这个概念。
推荐阅读
- reactjs - 如何使用 react-testing-libray 触发 onClose 以响应 ui 菜单?
- angular - NGRX 多个商店还是嵌套状态?
- python-3.x - 调用笔记本时在终端中显示日志记录输出
- php - 包括 PHPMailer 和 Wordpress:找不到类 'PHPMailer'
- babeljs - gulp-babel 从 >=ES6 转换为 ES5
- c# - 哪些 Visual Studio 组件包含公共程序集?
- c++ - 避免缩小 c 样式数组创建的警告范围
- machine-learning - 当训练数据有分类标签但需要的任务是概率时怎么办?
- java - java中的3D透视投影问题
- excel - 计算多个单元格中的多个条件