我们小组最近建立了一个3节点的Kubernetes集群,我们一直在使用Jobs在其上安排批处理任务。我们有很多工作要做,而没有一个特别大的集群来执行,因此在任何给定时间,都有一堆“待处理”的Pod等待在集群上运行。
这些Pod具有不同的资源请求;有些比其他的大很多。例如,某些Pod需要4 GB RAM,而某些Pod需要100 GB RAM。
我们遇到的问题是,只要有足够的小容器来保持集群繁忙,我们的大容器就不会真正运行。一旦一个4 GB的Pod完成,Kubernetes就会发现一个4 GB的Pod将适合,而100 GB的Pod将不适合,并且它计划一个新的4 GB的Pod。似乎从未决定100 GB的Pod已经等待了足够长的时间,并且没有在特定节点上调度新的Pod,直到足够的时间使100 GB的Pod可以容纳在那里为止。也许不能说我们的吊舱来自工作,并且有望最终完成,这与Web服务器不同。
如何配置Kubernetes以确保小型Pod不会无限期地饿死大型Pod?我们是否需要某种第三方调度程序来执行这种行为?还是有某种方法可以配置默认调度程序来避免此行为?