HTML Diff
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>