Ansible¶
Ansible 配置在 Ansible 文档 中有详细描述。本指南的其他部分解释了如何为 Kayobe 和 Kolla Ansible 配置 Ansible。
在本节中,我们将介绍一些调整 Ansible 以提高性能和扩展性的选项。
SSH 管道¶
Ansible 默认情况下禁用 SSH 管道,但通常可以安全地启用,并提供合理的性能提升。
$KAYOBE_CONFIG_PATH/ansible.cfg¶[ssh_connection]
pipelining = True
分叉数¶
默认情况下,Ansible 使用相对保守的 5 个进程分叉来执行任务。这限制了 Ansible 可以扩展的并行性。大多数 Ansible 控制主机能够处理比这更多的分叉数。您需要进行实验,以找出您的机器的 CPU、内存和 IO 限制。
例如,要将分叉数增加到 20
$KAYOBE_CONFIG_PATH/ansible.cfg¶[defaults]
forks = 20
事实缓存¶
注意
在 Ussuri 版本之前的 Kayobe 中,事实缓存将无法正常工作。
默认情况下,Ansible 在每个 play 的开始时为每个主机收集 facts,除非 gather_facts 设置为 false。对于大量主机,这可能会导致花费大量时间收集 facts。
一种改进方法是利用 Ansible 对 事实缓存 的支持。为了使这与 Kayobe 协同工作,有必要将 Ansible 的 收集 配置选项更改为 smart。此外,由于某些 facts(例如 ansible_facts.user_uid 和 ansible_facts.python)不同,因此有必要为 Kayobe 和 Kolla Ansible 使用单独的事实缓存。
示例¶
在下面的示例中,我们配置 Kayobe 和 Kolla Ansible 使用 jsonfile 缓存插件 来使用事实缓存。
$KAYOBE_CONFIG_PATH/ansible.cfg¶[defaults]
gathering = smart
fact_caching = jsonfile
fact_caching_connection = /tmp/kayobe-facts
$KAYOBE_CONFIG_PATH/kolla/ansible.cfg¶[defaults]
gathering = smart
fact_caching = jsonfile
fact_caching_connection = /tmp/kolla-ansible-facts
您还可以通过 [defaults] fact_caching_timeout 设置缓存的过期超时时间。
事实收集¶
事实过滤¶
事实过滤可用于加速 Ansible。具有大量网络接口的网络和计算节点的环境在使用 Kayobe 和 Kolla Ansible 时可能会遇到非常慢的处理速度。这是由于每次任务处理大量的 per-interface facts 所致。为了避免存储某些 facts,我们可以使用 kayobe_ansible_setup_filter 变量,该变量用作 setup 模块的 filter 参数。
一个特别有用的情况是避免收集 Neutron 创建的虚拟 tap(以 t 开头)和桥接(以 q 开头)接口的 facts。这些 facts 是大型 map 值,可能会消耗 Ansible 控制主机上的大量资源。Kayobe 和 Kolla Ansible 通常不需要引用它们,因此可以对其进行过滤。例如,要避免收集以 q 或 t 开头的 facts
$KAYOBE_CONFIG_PATH/globals.yml¶kayobe_ansible_setup_filter: "ansible_[!qt]*"
同样,对于 Kolla Ansible(请注意相似但不同的文件名)
$KAYOBE_CONFIG_PATH/kolla/globals.yml¶kolla_ansible_setup_filter: "ansible_[!qt]*"
这会导致 Ansible 收集但不存储匹配该模式的 facts,其中包括虚拟接口 facts。目前,我们不在 Kolla Ansible 中引用其他匹配该模式的 facts。请注意,包含“ansible”前缀会导致 meta facts module_setup 和 gather_subset 被过滤,但似乎这是获得接口 facts 良好匹配的唯一方法。
确切的改进会有所不同,但据报道,在具有许多虚拟接口的系统上,改进幅度可达 18 倍。
事实收集子集¶
也可以通过 kayobe_ansible_setup_gather_subset 配置要收集的事实子集,该子集用作 setup 模块的 gather_subset 参数。例如,如果有人想避免通过 facter 收集 facts
$KAYOBE_CONFIG_PATH/globals.yml¶kayobe_ansible_setup_gather_subset: "all,!facter"
同样,对于 Kolla Ansible(请注意相似但不同的文件名)
$KAYOBE_CONFIG_PATH/kolla/globals.yml¶kolla_ansible_setup_gather_subset: "all,!facter"
最大失败百分比¶
可以使用 kayobe_max_fail_percentage 指定 最大失败百分比。默认情况下,此值未定义,相当于 100 的值,这意味着 Ansible 将继续执行,直到所有主机都失败或完成。例如
$KAYOBE_CONFIG_PATH/globals.yml¶kayobe_max_fail_percentage: 50
可以使用 host_configure_max_fail_percentage 为 kayobe * host configure 命令设置最大失败百分比,或者可以使用 <playbook>_max_fail_percentage 为特定 playbook 设置,其中 <playbook> 是 playbook 名称,用下划线替换破折号,并且不带 .yml 扩展名。例如
$KAYOBE_CONFIG_PATH/globals.yml¶kayobe_max_fail_percentage: 50
host_configure_max_fail_percentage: 25
time_max_fail_percentage: 100