0 added
0 removed
Original
2026-01-01
Modified
2026-02-19
1
<p>На больших инфраструктурах Ansible может работать медленно. Как ускорить выполнение плейбуков? Разбираем на практике:</p>
1
<p>На больших инфраструктурах Ansible может работать медленно. Как ускорить выполнение плейбуков? Разбираем на практике:</p>
2
<p>1. Оптимизация SSH-соединения</p>
2
<p>1. Оптимизация SSH-соединения</p>
3
<p>✅ Отключите SSH-проверки</p>
3
<p>✅ Отключите SSH-проверки</p>
4
<p>Добавьте в ansible.cfg:</p>
4
<p>Добавьте в ansible.cfg:</p>
5
<p>[ssh_connection]</p>
5
<p>[ssh_connection]</p>
6
<p>ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s -o ConnectTimeout=5 -o GSSAPIAuthentication=no</p>
6
<p>ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s -o ConnectTimeout=5 -o GSSAPIAuthentication=no</p>
7
<p>pipelining = true</p>
7
<p>pipelining = true</p>
8
<p>Что это даёт?</p>
8
<p>Что это даёт?</p>
9
<ul><li>ControlMaster - переиспользование SSH-соединений;</li>
9
<ul><li>ControlMaster - переиспользование SSH-соединений;</li>
10
<li>pipelining - ускорение выполнения модулей.</li>
10
<li>pipelining - ускорение выполнения модулей.</li>
11
</ul><p>✅ Используйте persistent-соединения</p>
11
</ul><p>✅ Используйте persistent-соединения</p>
12
<p>[persistent_connection]</p>
12
<p>[persistent_connection]</p>
13
<p>connect_timeout = 30</p>
13
<p>connect_timeout = 30</p>
14
<p>command_timeout = 60</p>
14
<p>command_timeout = 60</p>
15
<p>2. Параллельное выполнение задач</p>
15
<p>2. Параллельное выполнение задач</p>
16
<p>✅ Запускайте задачи параллельно (-f N)</p>
16
<p>✅ Запускайте задачи параллельно (-f N)</p>
17
<p>ansible-playbook playbook.yml -f 20 # 20 потоков</p>
17
<p>ansible-playbook playbook.yml -f 20 # 20 потоков</p>
18
<p>✅ Используйте async для долгих задач</p>
18
<p>✅ Используйте async для долгих задач</p>
19
<p>- name: Долгая операция</p>
19
<p>- name: Долгая операция</p>
20
<p>command: /some/long/script.sh</p>
20
<p>command: /some/long/script.sh</p>
21
<p>async: 300 # таймаут в секундах</p>
21
<p>async: 300 # таймаут в секундах</p>
22
<p>poll: 0 # не ждать завершения</p>
22
<p>poll: 0 # не ждать завершения</p>
23
<p>3. Оптимизация инвентаря</p>
23
<p>3. Оптимизация инвентаря</p>
24
<p>✅ Динамический инвентарь</p>
24
<p>✅ Динамический инвентарь</p>
25
<p>Используйте генерацию инвентаря из облачных провайдеров (AWS, GCP) или CMDB.</p>
25
<p>Используйте генерацию инвентаря из облачных провайдеров (AWS, GCP) или CMDB.</p>
26
<p>✅ Группировка хостов</p>
26
<p>✅ Группировка хостов</p>
27
<p>Разбивайте хосты на группы ([web], [db]) для точечного применения плейбуков.</p>
27
<p>Разбивайте хосты на группы ([web], [db]) для точечного применения плейбуков.</p>
28
<p>4. Кэширование фактов (facts)</p>
28
<p>4. Кэширование фактов (facts)</p>
29
<p>✅ Отключите сбор фактов, если они не нужны</p>
29
<p>✅ Отключите сбор фактов, если они не нужны</p>
30
<p>- hosts: all</p>
30
<p>- hosts: all</p>
31
<p>gather_facts: false</p>
31
<p>gather_facts: false</p>
32
<p>✅ Кэшируйте факты в Redis/JSON</p>
32
<p>✅ Кэшируйте факты в Redis/JSON</p>
33
<p>В ansible.cfg:</p>
33
<p>В ansible.cfg:</p>
34
<p>[defaults]</p>
34
<p>[defaults]</p>
35
<p>fact_caching = jsonfile</p>
35
<p>fact_caching = jsonfile</p>
36
<p>fact_caching_connection = /tmp/ansible_facts</p>
36
<p>fact_caching_connection = /tmp/ansible_facts</p>
37
<p>5. Оптимизация самих плейбуков</p>
37
<p>5. Оптимизация самих плейбуков</p>
38
<p>✅ Используйте meta: flush_handlers</p>
38
<p>✅ Используйте meta: flush_handlers</p>
39
<p>- name: Apply config</p>
39
<p>- name: Apply config</p>
40
<p>template: src=config.j2 dest=/etc/app.conf</p>
40
<p>template: src=config.j2 dest=/etc/app.conf</p>
41
<p>notify: restart app</p>
41
<p>notify: restart app</p>
42
<p>- meta: flush_handlers # принудительно запускает handlers</p>
42
<p>- meta: flush_handlers # принудительно запускает handlers</p>
43
<p>✅ Замените command/shell на специализированные модули</p>
43
<p>✅ Замените command/shell на специализированные модули</p>
44
<p>❌ Плохо:</p>
44
<p>❌ Плохо:</p>
45
<p>- command: apt install nginx</p>
45
<p>- command: apt install nginx</p>
46
<p>✅ Лучше:</p>
46
<p>✅ Лучше:</p>
47
<p>- apt: name=nginx state=present</p>
47
<p>- apt: name=nginx state=present</p>
48
<p>Еще 5 способов оптимизации Ansible расскажем в следующий раз, а пока напомним - курс<a>"Ansible: Infrastructure as Code"</a>стартует через 10 дней. Если вы планировали освоить инструмент, который автоматизирует рутину и даст вам возможность работать эффективнее, быстрее и интереснее, самое время занять место на курсе.</p>
48
<p>Еще 5 способов оптимизации Ansible расскажем в следующий раз, а пока напомним - курс<a>"Ansible: Infrastructure as Code"</a>стартует через 10 дней. Если вы планировали освоить инструмент, который автоматизирует рутину и даст вам возможность работать эффективнее, быстрее и интереснее, самое время занять место на курсе.</p>
49
<p>👉 До 21 апреля действует спеццена! Все подробности -<a>по ссылке.</a></p>
49
<p>👉 До 21 апреля действует спеццена! Все подробности -<a>по ссылке.</a></p>
50
<p><strong>Читать вторую часть статьи<a>по ссылке.</a></strong></p>
50
<p><strong>Читать вторую часть статьи<a>по ссылке.</a></strong></p>