批量计算,Monte Carlo,使用Docker镜像,在Google云上运行并由Kubernetes管理的多个作业。没有复制控制器,只有多个具有NoRestart策略的pod将计算的有效负载提供给我们的服务器。到现在为止还挺好。问题是,我有N
个节点/小兵的群集,并且要计算M
个作业,其中M > N
。所以我想立即触发M
pod并告诉Kubernetes以这样的方式安排它,以便只有N
在给定时间运行,而其他一切都保持在Pending状态。只要一个pod完成,下一个就会安排从Pending变为Running,依此类推,直到所有M
pod完成为止。
有可能这样做吗?
答案 0 :(得分:3)
是的,您可以让他们都要求每个节点上只有一个资源的资源,然后调度程序一次无法安排超过N个。最常见的方法是让每个pod在其ports
规范的containers
部分中要求hostPort
。
但是,我不能说我完全确定你为什么要将系统限制为每个节点一个这样的pod。如果有足够的资源可以在每个节点上一次运行多个,那么它应该加快你的工作,让它们运行。
答案 1 :(得分:2)
仅仅是为了记录,在与Alex讨论,试验和错误以及二进制搜索一个好数字之后,对我有用的是将Pod JSON中的CPU资源限制设置为:
"resources": {
"limits": {
"cpu": "490m"
}
}
我不知道这个特定值如何以及为什么会影响Kubernetes调度程序,但它会让节点在作业中流动,每个节点在任何给定时刻都只有一个pod。