21. 作业切片

一个 切片作业 指的是分布式作业的概念。分布式作业用于在大量主机上运行作业,允许您运行多个 ansible-playbook,每个 playbook 在库存的子集中运行,这些 playbook 可以并行地在集群中调度。

默认情况下,Ansible 从单个控制实例运行作业。对于不需要跨主机编排的作业,作业切片利用了 AWX 将工作分配到集群中的多个节点的能力。作业切片通过添加一个作业模板字段 job_slice_count 来实现,该字段指定将 Ansible 运行切分成多少个作业。当此数字大于 1 时,AWX 将从作业模板而不是作业生成一个工作流。库存将被均匀地分配到切片作业中。然后启动工作流作业,并像普通工作流一样进行。在启动作业时,API 将返回一个作业资源(如果 job_slice_count = 1)或一个工作流作业资源。相应的用户界面将重定向到适当的屏幕以显示运行状态。

21.1. 作业切片注意事项

在设置作业切片时,请考虑以下事项

  • 一个切片作业会创建一个工作流作业,然后该作业会创建作业。

  • 一个作业切片包含一个作业模板、一个库存和一个切片数量。

  • 执行时,一个切片作业会将每个库存分成多个“切片大小”块。然后,它会对每个库存块排队 ansible-playbook 运行的作业。提供给 ansible-playbook 的库存是一个简化的原始库存版本,只包含特定切片中的主机。作业列表中显示的已完成的切片作业会相应地标记,其中包括已运行的切片作业数量

Sliced job shown in Jobs list view
  • 这些切片作业遵循正常的调度行为(分叉数、由于容量而排队、根据库存映射分配给实例组)。

注意

作业切片旨在横向扩展作业执行。在作业模板上启用作业切片会将要执行的库存分成在启动时配置的切片数量,然后为每个切片启动一个作业。

预计切片数量将等于或小于控制器节点数量。设置极高的作业切片数量(例如,数千个),虽然允许,但会导致性能下降,因为作业调度程序不是为同时调度数千个工作流节点而设计的,而这些节点正是切片作业所变成的。

  • 带有提示和/或额外变量的切片作业模板的行为与标准作业模板相同,将所有变量和限制应用于结果工作流作业中的所有切片作业。但是,当向切片作业传递限制时,如果限制导致切片没有分配主机,则这些切片将失败,从而导致整个作业失败。

  • 分布式作业的作业切片作业状态以与工作流作业相同的方式计算;如果其子作业中存在任何未处理的失败,则表示失败。

警告

任何打算跨主机进行编排(而不是只对单个主机应用更改)的作业不应配置为切片作业。任何执行此操作的作业都可能会失败,并且 AWX 不会尝试发现或解释在作为切片作业运行时失败的 playbook。

21.2. 作业切片执行行为

当作业被切片时,它们可以在任何节点上运行,并且有些可能不会同时运行(例如,系统容量不足)。当切片作业正在运行时,作业详细信息会显示当前正在运行的工作流和作业切片,以及单独查看其详细信息的链接。

Sliced job shown in Jobs output view

默认情况下,作业模板通常不会配置为同时执行(allow_simultaneous 必须在 API 中勾选,或在 UI 中勾选 **启用并发作业**)。切片会覆盖此行为,并隐含 allow_simultaneous,即使该设置未勾选。有关如何指定此设置以及作业模板配置中的作业切片数量的信息,请参阅 作业模板

作业模板 部分提供了在用户界面中执行以下操作的更多详细信息

  • 使用切片数量大于一的作业模板启动工作流作业

  • 启动切片作业模板后,取消整个工作流或各个作业

  • 切片作业完成后,重新启动整个工作流或各个作业

  • 启动作业模板后,查看有关工作流和切片作业的详细信息

  • 在创建切片作业后,专门搜索切片作业(请参阅后续部分,搜索作业切片

21.3. 搜索作业切片

为了更轻松地找到切片作业,请使用搜索功能对以下内容应用搜索过滤器

  • 作业列表,仅显示切片作业

  • 作业列表,仅显示作业切片的父工作流作业

  • 作业模板列表,仅显示生成切片作业的作业模板

为了仅在作业列表中显示切片作业,与大多数情况一样,您可以根据类型(此处为作业)或 unified_jobs 进行过滤

/api/v2/jobs/?job_slice_count__gt=1

为了仅显示作业切片的父工作流作业

/api/v2/workflow_jobs/?job_template__isnull=false

为了仅显示生成切片作业的作业模板

/api/v2/job_templates/?job_slice_count__gt=1