Назад | Перейти на главную страницу

Какова разумная производительность для простого Ansible playbook с ~ 100 хостами?

Мы начинаем рассматривать Ansible, чтобы заменить старую установку cfengine2. У меня есть простая инструкция, которая:

Playbook требует более 4 минут времени настенной синхронизации для работы на 97 машинах (все подключены через быструю сеть 1 или 10 гигабайт, с задержкой LAN менее 1 мс) и потребляет более 50% ЦП на 2-ядерной виртуальной машине памяти 4G, когда я запустил это.

Для запуска на одной машине требуется около 11 секунд, при этом потребляется около 4 секунд пользовательского + системного процессорного времени, что по-прежнему кажется чрезмерным для объема работы.

Очевидные биты:

Это нормальный уровень производительности или что-то не так с моей настройкой? Как я могу определить, что, если да?

Изменить: по состоянию на август 2017 года мы все еще наблюдаем эту проблему. Версия Ansible - 2.2.1, и теперь размер playbook увеличился. Актуальные номера:

Хотя playbook теперь намного больше, я все же не думаю, что там есть что-то, что могло бы оправдать такой уровень загрузки ЦП на сервере playbook - возможно, время настенных часов, но сервер развертывания должен большую часть времени простаивать, насколько я понимаю, это в основном копии файлов и некоторые расширения шаблонов.

Обратите внимание, что мы довольно широко используем host / groupvars.

Несколько человек спрашивали о профилировании, хвосте серии с профилированием:

Tuesday 01 August 2017  16:02:24 +0100 (0:00:00.539)       0:06:22.991 ******** 
=============================================================================== 
yumrepo : centos repos -------------------------------------------------- 9.77s
sshd : copy CentOS 6 sshd config ---------------------------------------- 7.41s
sshd : copy CentOS 7 sshd config ---------------------------------------- 6.94s
core : ensure core packages are present --------------------------------- 6.28s
core : remove packages on VM guests ------------------------------------- 5.39s
resolv : stop NetworkManager changing resolv.conf ----------------------- 5.25s
yumrepo : epel6 gpg key ------------------------------------------------- 3.94s
yumrepo : epel7 gpg key ------------------------------------------------- 3.71s
yumrepo : nsg gpg key --------------------------------------------------- 3.57s
resolv : build resolv.conf ---------------------------------------------- 3.30s
yumrepo : nsg repo ------------------------------------------------------ 2.66s
resolv : check NetworkManager running ----------------------------------- 2.63s
yumrepo : psp repo ------------------------------------------------------ 2.62s
yumrepo : ucs repo ------------------------------------------------------ 2.44s
yumrepo : epel repo ----------------------------------------------------- 2.27s
resolv : check for nmcli ------------------------------------------------ 2.08s
core : remove various unwanted files ------------------------------------ 1.42s
telegraf : write telegraf.conf file ------------------------------------- 1.13s
core : copy sudoers in place -------------------------------------------- 0.94s
core : ensure sshd is running ------------------------------------------- 0.90s

в твоем ansible.cfg установите следующее:

[defaults]

# profile each task
callback_whitelist = profile_tasks

# [don't validate host keys](http://docs.ansible.com/ansible/intro_configuration.html#host-key-checking)
host_key_checking = False

[ssh_connection]
pipelining = True

Кроме того, в своем учебнике установите стратегию как «бесплатную».

- hosts: all
  strategy: free
  tasks: [...]

Наконец, отключите сбор фактов в своей игре: gather_facts: false

Если после профилирования вы часто видите следующее:

TASK [pip foo]
ok: [10.192.197.252] => (item=ansible)
ok: [10.192.197.252] => (item=boto)
ok: [10.192.197.252] => (item=boto3)
ok: [10.192.197.252] => (item=passlib)
ok: [10.192.197.252] => (item=cryptography)

подавить эти действия в ansible.cfg под [по умолчанию]:

например squash_actions = yum,pip,bar