文档

17. 作业切片

一个 切片作业 指的是分布式作业的概念。分布式作业用于在大量主机上运行作业,允许您在集群中并行调度多个 Ansible 剧本,每个剧本在一个库存的子集上运行。

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

17.1. 作业切片注意事项

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

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

  • 一个作业切片由作业模板、库存和切片数量组成。

  • 执行时,切片作业会将每个库存分成多个“切片大小”的块。然后,它会将 ansible-playbook 运行作业排队到适当库存的每个块上。馈送到 ansible-playbook 的库存是原始库存的简化版本,只包含该特定切片中的主机。在“作业”列表中显示的已完成的切片作业将相应地标记,并显示已运行的切片作业数量

_images/sliced-job-shown-jobs-list-view.png
  • 这些切片作业遵循正常的调度行为(分叉数量、由于容量而排队、根据库存映射分配到实例组)。

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

  • 分布式作业的作业切片作业状态的计算方式与工作流作业相同;如果其子作业中有任何未处理的故障,则为失败。

警告

任何打算跨主机进行协调(而不是只对单个主机应用更改)的作业都应该不要配置为切片作业。任何执行此操作的作业可能会失败,并且 Tower 不会尝试发现或说明作为切片作业运行时失败的剧本。

17.2. 作业切片执行行为

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

_images/sliced-job-shown-jobs-output-view.png

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

有关在 Tower 用户界面中执行以下操作的更多详细信息,请参阅 作业模板 部分

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

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

  • 在切片作业运行完成后,重新启动整个工作流或单个作业

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

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

17.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