跳转至

Ansible 优化

Ansible 默认情况下,没有做任何的优化。通过下列的几种方式,可以在执行效率,时间上做进一步的优化。

Profile_tasks

开启Ansible任务的执行时间, 可有助于我们了解playbook中的task任务执行时间,以便于后续优化。

ansible.cfg 中配置

[defaults]
callback_whitelist = timer, profile_tasks

Fork

Ansible 默认情况下,并行执行的数量是5,对于较多的节点,就需要扩大这个并行数量。

Fork 数量越大对控制节点的cpu消耗越高。

ansible.cfg 中配置

[defaults]
forks = 20

Poll_interval

降低轮询间隔时间,有助于加快获取任务结果。

ansible.cfg 中配置

[defaults]
poll_interval  = 1
internal_poll_interval = 0.001

Fact cache

将 Facts 信息第一次收集后缓存到memory或者redis或者文件中,从而为后续执行减少收集时间。

ansible.cfg 中配置

[defaults]
fact_caching            = jsonfile
fact_caching_connection = /tmp/.ansible_fact_cache

Gather_subset

可选择性的收集network,hardware等信息,而不是全部

ansible.cfg 中配置

# 在配置文件中,排除收集
[defaults]
gather_subset=!hardware

也可以在在play中定义

# 不收集数据
- hosts: whatever
  gather_facts: no

# 只收集minimal
- hosts: all
  gather_facts: False
  pre_tasks:
   - setup:
      gather_subset:
       - '!all'

SSH 连接参数

增加control_path的使用时间

ansible.cfg 中配置

[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=1800s

默认ssh的认证方式会有 -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey, 如果只有publickey一种方式认证,可以只指定publickey -o PreferredAuthentications=publickey

Control_path

开启ssh socket持久化,复用ssh连接。

ansible.cfg 中配置

[ssh_connection]
control_path = %(directory)s/ansible-ssh-%%h-%%p-%%r

Pipelinling

开启ssh pipelining,客户端从管道中读取执行渲染后的脚本,而不是在客户端创建临时文件。

ansible.cfg 中配置

[ssh_connection]
pipelining = True

Serial

将play_hosts中主机再分批执行,降低控制机的cpu使用

- hosts: whatever
  serial:50%

Strategy

默认linear,每个主机的单个task执行完成会等待其他都完成后再执行下个任务,设置free可不等待其他主机。

- hosts: web-servers
  strategy: linear

mitogen strategy 插件

提高ansible的执行效率,比原生执行速度提高1.25x-7x,CPU减少2倍的使用。

下载

wget https://networkgenomics.com/try/mitogen-0.2.9.tar.gz
tar zxf mitogen-0.2.9.tar.gz /path/to/

ansible.cfg 中配置

[defaults]
strategy_plugins = /path/to/mitogen-0.2.9/ansible_mitogen/plugins/strategy
strategy = mitogen_linear

也可在play中设置

- hosts: web-servers
  strategy: mitogen_linear

执行

ANSIBLE_STRATEGY_PLUGINS=/path/to/mitogen-0.2.9/ansible_mitogen/plugins/strategy ansible-playbook test.yaml

更多内容见mitogen介绍


最后更新: 2020-12-03 08:40:01

评论