第 7 章 作业分片
分片作业指的是分布式作业的概念。使用分布式作业在大量主机上运行作业。然后,您可以在清单的子集上运行多个 ansible-playbooks,您可以在集群间并行调度。
默认情况下,Ansible 从单个控制实例运行作业。对于不需要跨主机编配的作业,作业分片可以利用自动化控制器将工作分发到集群中的多个节点。
作业分片的工作原理方法是添加一个作业模板字段 job_slice_count
,它指定要将 Ansible 运行分片到的作业数量。当这个数字大于 1
时,自动化控制器会从作业模板而不是作业生成工作流。清单在分片作业中平均分配。然后,工作流作业启动,并像正常工作流一样继续。
在启动作业时,API 将返回作业资源(如果 job_slice_count = 1)或工作流作业资源。对应的用户界面(UI)重定向到适当的屏幕,以显示运行的状态。
7.1. 作业分片注意事项
在设置作业分片时,请考虑以下几点:
- 分片作业会创建一个工作流作业,然后创建作业。
- 作业分片由作业模板、清单和分片计数组成。
执行后,分片作业会将每个清单分成几个"分片大小"块。然后,它将 ansible-playbook 的作业排队在相应清单的每个块上运行。引入 ansible-playbook 的清单是原始清单的短版本,只有该特定片段中的主机。作业列表中显示的已完成分片作业会相应地标记,以及已运行的分片作业数量:
这些分片作业遵循常规调度行为(fork 数量,根据容量进行排队,根据清单映射分配给实例组)。
注意作业分片旨在水平扩展作业执行。在作业模板上启用作业分片会将清单划分成在启动时配置的分片数量,然后为每个分片启动作业。
通常,分片的数量等于或小于自动化控制器节点的数量。您可以设置大量作业分片,但可能会导致性能下降。作业调度程序不是同时调度数千个工作流节点,即分片作业成为哪些节点。
- 带有提示或额外变量的分片作业模板的行为与标准作业模板相同,将所有变量和限制应用到生成的工作流作业集合。但是,当将限制传递给分片作业时,如果限制导致分片没有分配主机,则这些分片将失败,从而导致整个作业失败。
- 计算分布式作业的作业分片作业状态的方式与工作流作业相同。如果其子作业中存在未处理的失败,则会失败。
- 任何计划在多个主机间编配(而不是只对单个主机应用更改)的作业都不能配置为分片作业。
- 任何作业都可能会失败,自动化控制器也不会尝试发现或考虑作为分片作业运行时失败的 playbook。