Мы начинаем смотреть на Ansible, чтобы заменить старую установку cfengine2. У меня есть простая пьеса, которая:
- копирует файл sudoers
- копирует шаблонный resolv.conf (снабженный данными group_vars и host_vars)
- проверяет пару сервисов работает
- проверяет наличие локального пользователя
Воспроизведение книги занимает более 4 минут времени настенного часового периода для работы с 97 компьютерами (все подключены через быструю 1-гигабитную или 10-гигабитную сеть, с задержкой локальной сети менее 1 мс) и потребляет более 50% ЦП на двухъядерной виртуальной памяти 4G с памятью, когда я запустить его.
Для запуска на одной машине требуется около 11 секунд, при этом около 4 секунд затрачивается пользовательского и системного процессорного времени, что TBH все равно кажется чрезмерным для объема выполняемой работы.
Очевидные биты:
- У меня явно включен конвейер в playbook-dir local ansible.cfg
- У меня есть факт кэширования в jsonfile, тот же локальный ansible.cfg
- У меня есть вилки 50, то же самое (я пробовал другие значения)
- Я уверен, что Ansible использует SSH, а не Paramiko, и использует постоянный сокет управления - я вижу, как SSH-процессы запускаются и сохраняются во время выполнения.
Этот уровень производительности нормальный или что-то не так с моими настройками? Как я могу определить, что, если так?
Изменить: По состоянию на август 2017 года, мы все еще видим эту проблему. Ansible версия 2.2.1 и размер playbook выросли. Современные номера:
- 98 хозяев
ansible -m ping all
принимает 4,6 с, 3,2 с, 2,5 сс- полный запуск playbook занимает 4 минуты, используя при этом 100% пользовательский и ~ 35% системный ЦП (на сервере развертывания 2-ядерных виртуальных машин, 100% - один полный ЦП)
- Целевая ОС в основном CentOS 7, некоторые CentOS 6
- профилирование не выявляет какие-либо конкретные задачи горячей точки AFAICT
Хотя 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_CALLBACK_WHITELIST=profile_tasks
и для более тщательной отладкиANSIBLE_DEBUG=1
. Также обратите пристальное внимание на начальную скорость ssh-соединения.watch cat /proc/sys/kernel/random/entropy_avail
пока плейбук работает. Если его меньше, чем, скажем, 1000, у вас есть потенциальная проблема; если его меньше, чем, скажем, 64, и он не восстанавливается, то у вас есть определенная проблема энтропийного голодания. (распространено в некоторых средах виртуальных машин). Это относится к вашему серверу управления, а также к узлам, которыми вы управляете.ansible -i all all -m ping
против более чем 300 хостов (в основном виртуальных машин) это заняло менее 1 минуты. Ваша игровая книга делает что-нибудь, чтобы изменить пользователя (стать / sudo / и т. Д.). Как работает -m ping? Я бы, исходя из опыта, сказал, что вы хотите иметь больше памяти на 50 вилок.Ответы:
в вашем
ansible.cfg
наборе следующее:Кроме того, в вашей игровой книге, установите стратегию как «бесплатно»
Наконец, отключите сбор фактов в вашей игре:
gather_facts: false
Если после профилирования вы видите многое из этого:
раздавить эти действия в
ansible.cfg
[по умолчанию]:например
squash_actions = yum,pip,bar
источник