Ответ
Forks — это параметр в Ansible, который определяет максимальное количество параллельных подключений (и, соответственно, одновременного выполнения задач) к управляемым хостам. По умолчанию это значение равно 5. Увеличение этого параметра — основной способ ускорить выполнение плейбука на большом парке серверов.
Как это работает: Если у вас 100 хостов и forks=10, Ansible будет выполнять задачи сначала на 10 хостах одновременно. Как только задача на одном из них завершится, Ansible подключится к следующему хосту из списка, поддерживая уровень параллелизма в 10 подключений, пока все хосты не будут обработаны.
Где и как задается:
- В конфигурационном файле
ansible.cfg(постоянная настройка):[defaults] forks = 20 - В командной строке при запуске плейбука (разовая настройка):
ansible-playbook site.yml --forks=25 - Через переменную окружения:
export ANSIBLE_FORKS=15
Практические соображения и ограничения:
- Лимит ресурсов управляющей ноды: Каждое соединение (
fork) потребляет CPU и память. Слишком высокое значение может привести к исчерпанию ресурсов или файловых дескрипторов на управляющей машине. - Сетевая нагрузка и лимиты целевых систем: Параллельное обновление 50 серверов может создать пиковую нагрузку на репозиторий пакетов или сеть. Для таких задач часто используют стратегию
serialв плейбуках. - Оптимальное значение: Зависит от конкретной инфраструктуры и задач. Для рутинных конфигураций на десятках серверов значение 10-20 обычно безопасно. Для масштабных операций в сотни хостов требуется тестирование и, возможно, увеличение системных лимитов.
Пример из практики: При развертывании конфигурации на 200 веб-серверах я устанавливаю forks=20 в ansible.cfg. Для задач обновления ядер (yum update kernel) использую serial: 10% в плейбуке, чтобы обновлять группы по 20 серверов с перезагрузкой, избегая одновременного вывода из строя всего кластера.