1

我试图了解 Nomad 如何spread处理客户端故障。

在 Nomad 作业中,您可以定义一个spread节,以便作业的实例传播到所有客户端。

以下是文档: https ://www.nomadproject.io/docs/job-specification/spread

由于这spread是一个软偏好,如果某个客户端出于任何原因出现故障,Nomad 会将在丢失的客户端上运行的所有作业迁移到另一个可用的客户端。(即使使用 bin-packing 也会生效)。

如果有 2 个客户端网格和具有两个分配的作业,如果一个客户端失败,则两个分配将在同一个客户端上运行。

当网格恢复并启动新客户端时会发生什么?作业是否会在该节之后重新传播spread到两个节点,或者两个分配是否会继续在同一个客户端上运行,直到作业重新运行?

4

1 回答 1

2

很难找到答案。我的印象是,除非有资源限制,否则 Nomad 不会迁移分配。因此,在您的示例中,工作不会重新传播。

寻找更多确定性的几个地方:

  1. 有节点亲和力:https ://learn.hashicorp.com/tutorials/nomad/affinity , binpack, job-anti-affinity, 并且node-reschedule-penalty可能会影响您的分配被移动(但同样,我认为这只是资源争用)
  2. 抢占现在是一回事,但似乎更多的是关于资源限制:https ://www.nomadproject.io/docs/internals/scheduling/preemption
  3. 这里有一个扩展测试,我认为可以对其进行修改以测试您的用例:https ://github.com/hashicorp/nomad/blob/235f938e87afbdc73037c1868a17668c06a8cf94/scheduler/generic_sched_test.go#L616 ,我自己尝试这样做,但是在复杂性中有点陷入困境。

有趣的是,我从未见过分配自愿迁移到具有空闲资源的节点上,也没有看到分配自由移动到新的空节点。

于 2020-09-30T14:57:11.913 回答