Kubernetes pods N:M 调度方法

Kubernetes pods N:M scheduling how-to

批量计算,Monte Carlo,使用 Docker 图像,多个作业 运行 在 Google 云上运行并由 Kubernetes 管理。没有 Replication Controllers,只有多个 pods 和 NoRestart 策略将计算的有效负载传递到我们的服务器。到目前为止,一切都很好。问题是,我有 N nodes/minions 集群,并且有 M 个作业要计算,其中 M > N。所以我想立即触发 M pods 并告诉 Kubernetes 以这样的方式安排它,以便在给定时间只有 N 运行ning,并且一切else 保持在 Pending 状态。一旦一个 pod 完成,下一个 pod 将被安排 运行 从 Pending 移动到 运行 等等,直到所有 M pods 完成。

可以吗?

是的,你可以让他们都请求一个资源,而每个节点上只有一个资源,那么调度程序将无法一次调度超过 N 个。最常见的方法是让每个 pod 在其 containers 规范的 ports 部分请求一个 hostPort

但是,我不能说我完全确定为什么要将系统限制为每个节点一个这样的 pod。如果每个节点上一次有足够的资源可供 运行 多个使用,那么让它们 运行.

应该会加快你的工作

仅作记录,在与 Alex 讨论、反复试验和二进制搜索一个好的数字后,对我有用的是将 Pod JSON 中的 CPU 资源限制设置为:

    "resources": {
        "limits": {
            "cpu": "490m"
        }
    }

我不知道这个特定值如何以及为什么会影响 Kubernetes 调度程序,但它使节点在作业中不断变化,在任何给定时刻每个节点只有一个 pod 运行。