如何解决安排尽可能多的Pod,使其适合群集?
我有一个批处理作业要运行:处理大量媒体文件。我有一个Kubernetes集群可以在上面运行,但是我不想更改集群的大小。我想将处理作为低优先级作业来运行。任何时候只要有备用的计算资源,它们都应该在媒体处理上工作。每当有其他需要资源的工作时,媒体过程都应该暂停。
当前,我正在为群集中的每个节点运行一个Deployment,其中有一个副本。我为批处理作业定义了PriorityClass,为其他所有事项定义了一个不同的PriorityClass(具有更高的优先级)。在其他需要资源的情况下,这似乎正在驱逐运行批处理作业。
我定义了Affinity,特别是WeightedPod(Anti)Affinity,以阻止批处理作业在同一台计算机上进行调度。
代码本身就是一个队列工作器:它从共享队列中拉出一个工作项并对其进行处理,然后返回下一个工作项。如果它被打断了(因为它被逐出了),那么部分工作就会丢失(没关系)。
这工作正常,但是我仍然在桌上留下很多资源。有什么方法可以将我的副本数定义为“您可以计划的尽可能多”?我可能要求的副本数量远远超过集群可以处理的数量。那将是一个好的解决方案吗?还是Kubernetes一次将10个豆荚卡住“待命”几个月有问题吗?
解决方法
我认为,请求的Pod数量超出集群可以容纳的数量并永远保持等待状态并没有什么害处。我唯一关心的是,调度程序是否能够识别正常优先级的待定Pod而不是低优先级的待定Pod,并且能够优先处理较紧急的Pod。
解决此问题的专业方法是恕我直言,是利用prometheus adapter并使用HPA通过Prometheus查询来确定群集的当前容量。这可以使您连续获得群集容量,并具有相应的自动扩展功能。 This medium article对该概念进行了很好的介绍。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。