Мы начинаем рассматривать Ansible, чтобы заменить старую установку cfengine2. У меня есть простая инструкция, которая:
Playbook требует более 4 минут времени настенной синхронизации для работы на 97 машинах (все подключены через быструю сеть 1 или 10 гигабайт, с задержкой LAN менее 1 мс) и потребляет более 50% ЦП на 2-ядерной виртуальной машине памяти 4G, когда я запустил это.
Для запуска на одной машине требуется около 11 секунд, при этом потребляется около 4 секунд пользовательского + системного процессорного времени, что по-прежнему кажется чрезмерным для объема работы.
Очевидные биты:
Это нормальный уровень производительности или что-то не так с моей настройкой? Как я могу определить, что, если да?
Изменить: по состоянию на август 2017 года мы все еще наблюдаем эту проблему. Версия Ansible - 2.2.1, и теперь размер playbook увеличился. Актуальные номера:
ansible -m ping all
занимает 4,6 с в реальном времени, 3,2 с пользователем, 2,5 с системного времениХотя 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