Nomad技术手册:调度(Scheduling)

19 篇文章 5 订阅
17 篇文章 10 订阅

调度是Nomad的核心功能之一。它是将任务从作业分配给客户机的过程。此过程必须遵循作业中声明的约束,并优化资源利用率。本文档记录了Nomad中调度工作方式的详细信息,以帮助用户和开发人员构建一个心智模型。这个设计很大程度上受到了谷歌在针对大型计算集群的灵活的、可伸缩的调度器Omega,以及使用Borg在谷歌进行大规模集群管理上的工作的启发。

高级主题!这个页面涵盖了Nomad的技术细节。您不需要了解这些细节就可以有效地使用Nomad。对于那些希望了解它们而不需要通过源代码进行深入研究的人来说,这里提供了详细的文档。

Nomad调度

Nomad Data Model

Nomad有四个主要的“术语”;作业(jobs)、节点(nodes)、分配(allocations)和评估(evaluations)。作业由用户提交,并表示所需的状态。作业是要运行的任务的声明性描述,这些任务受到约束并需要资源。可以在运行Nomad客户端的集群节点上调度任务。作业中任务到客户端的映射是使用分配完成的。分配用于声明作业中的一组任务应该在特定节点上运行。调度是确定适当分配的过程,是评估的一部分。

任何时候,外部状态(期望的或突发的)发生变化,都将创建一个评估。期望的状态是基于作业的,这意味着如果提交了新作业、更新了现有作业或注销了作业,期望的状态都将发生变更。突发状态是基于客户端节点的,因此我们必须处理系统中任何客户端的故障。这些事件触发了一个新评估的创建,因为Nomad必须评估环境的状态,并将其与期望的状态进行协调。

这张图显示了通过Nomad进行评估的流程:

Nomad Evaluation Flow

评估的生命周期始于导致创建评估的事件。在挂起状态中创建评估,并将其放入评估代理程序。在主服务器上运行了一个评估代理。评估代理用于管理未决评估的队列,提供优先级排序,并确保至少一次运行。

Nomad服务器运行调度进程(broker),默认为每个CPU内核一个进程,用于处理评估。进程从代理队列中取出评估,然后按照作业指定的方式调用适当的调度器。Nomad附带了一个优化的长存服务的服务调度器(service)、一个用于快速放置批作业的批调度器(batch)、一个用于在每个节点上运行作业的系统调度器(system)以及一个用于内部维护的核心调度器(core)。Nomad还可以扩展以支持定制调度器。

调度器负责处理评估并生成分配计划。计划是收回、更新或创建分配的一组集合。用于生成计划的特定逻辑可能因调度器而异,但通常情况下,调度器需要首先协调期望状态和实际状态,以确定必须执行的操作:需要放置新的分配,可能需要更新、迁移或停止现有的分配。

分配被分成两个不同的阶段,可行性校验和排名。在第一阶段,调度器通过过滤掉不健康的节点、缺少必要驱动程序的节点和没有达到指定约束的节点来找到可用的节点。

第二阶段是排名,调度程序对可用节点进行打分,以找到最合适的节点。评分主要基于装箱,用来优化应用程序的资源利用率和密度,但也增加了亲和性和反亲和性规则。Nomad自动应用了一个任务反亲和性规则,该规则阻止一个任务组的多个实例合并。这种反亲和性和装箱优化了的组合密度,同时减少了相关故障的概率。

一旦调度器对足够的节点进行了排序,就会选择最高级别的节点并将其添加到分配计划中。

当计划完成时,调度器将计划提交给将计划的主节点,主节点再将计划添加到计划队列。计划队列管理挂起的计划,提供优先顺序,并允许Nomad处理并发竞争。多个调度器并行运行,没有锁定或保留,使Nomad乐观地并行。因此,调度器可能会在同一个节点上重叠工作,导致资源过度订阅。计划队列允许主节点对此进行保护,并执行计划的部分或完全拒绝。

当主节点处理计划时,它在没有冲突时创建分配,否则会在计划结果中通知调度器失败。计划结果会向调度器提供反馈,允许它在前一个计划被部分或完全拒绝时终止或探查备用计划。

一旦调度器完成了评估的处理,它就会更新评估的状态,并向评估代理承认交付。这就完成了评估的生命周期。然后创建、修改或删除的分配将由客户端节点接收并开始执行。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值