HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#подборки</a></p>
1 <p><a>#подборки</a></p>
2 <ul><li>19 апр 2024</li>
2 <ul><li>19 апр 2024</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Мощный инструмент управления серверами для настоящих космических рейнджеров.</p>
4 </ul><p>Мощный инструмент управления серверами для настоящих космических рейнджеров.</p>
5 <p>Иллюстрация: Оля Ежак для Skillbox Media</p>
5 <p>Иллюстрация: Оля Ежак для Skillbox Media</p>
6 <p>Онлайн-журнал для тех, кто влюблён в код и информационные технологии. Пишем для айтишников и об айтишниках.</p>
6 <p>Онлайн-журнал для тех, кто влюблён в код и информационные технологии. Пишем для айтишников и об айтишниках.</p>
7 <p>В фильме "Игра Эндера" ансиблом называли параллакс-коммуникатор для передачи сообщений на межпланетные расстояния. Наш, земной Ansible работает почти так же - только связывает он не звездолёты, а веб-серверы с управляющим компьютером. Да и используют его вовсе не жукеры, а вполне миролюбивые DevOps-инженеры и сисадмины.</p>
7 <p>В фильме "Игра Эндера" ансиблом называли параллакс-коммуникатор для передачи сообщений на межпланетные расстояния. Наш, земной Ansible работает почти так же - только связывает он не звездолёты, а веб-серверы с управляющим компьютером. Да и используют его вовсе не жукеры, а вполне миролюбивые DevOps-инженеры и сисадмины.</p>
8 <p>Из этой статьи вы узнаете:</p>
8 <p>Из этой статьи вы узнаете:</p>
9 <ul><li><a>что такое Ansible</a>;</li>
9 <ul><li><a>что такое Ansible</a>;</li>
10 <li><a>как он работает</a>;</li>
10 <li><a>как он работает</a>;</li>
11 <li><a>для чего нужен</a>;</li>
11 <li><a>для чего нужен</a>;</li>
12 <li><a>его особенности</a>;</li>
12 <li><a>его особенности</a>;</li>
13 <li><a>из чего состоит</a>;</li>
13 <li><a>из чего состоит</a>;</li>
14 <li><a>где изучать Ansible</a>.</li>
14 <li><a>где изучать Ansible</a>.</li>
15 </ul><p><strong>Эксперт</strong></p>
15 </ul><p><strong>Эксперт</strong></p>
16 <p>CTO Flocktory, программный директор профессии "<a>DevOps-инженер</a>" в Skillbox, директор программного комитета<a>DevOpsConf</a>.</p>
16 <p>CTO Flocktory, программный директор профессии "<a>DevOps-инженер</a>" в Skillbox, директор программного комитета<a>DevOpsConf</a>.</p>
17 <p>Представьте, что у вас есть много удалённых серверов, на каждый из которых нужно накатить изменения: обновить систему, создать папку, добавить пользователя, сделать бэкап - что угодно. Как это сделать?</p>
17 <p>Представьте, что у вас есть много удалённых серверов, на каждый из которых нужно накатить изменения: обновить систему, создать папку, добавить пользователя, сделать бэкап - что угодно. Как это сделать?</p>
18 <p>Можно пойти стандартным путём: открыть консоль, подключиться к серверу по протоколу SSH, ввести пароль, отправить нужную команду - и так по кругу, пока не обработаете каждый сервер. Загвоздка в том, что, если серверов в проекте много, а изменения нужно вносить регулярно, ваша работа превратится в бесконечную рутину.</p>
18 <p>Можно пойти стандартным путём: открыть консоль, подключиться к серверу по протоколу SSH, ввести пароль, отправить нужную команду - и так по кругу, пока не обработаете каждый сервер. Загвоздка в том, что, если серверов в проекте много, а изменения нужно вносить регулярно, ваша работа превратится в бесконечную рутину.</p>
19 <p><strong>Ansible</strong>- это инструмент, который берёт на себя управление серверами. Вам не нужно по кругу запускать одни и те же скрипты и команды. Вместо этого вы прописываете все действия, которые нужно выполнить, в одном файлике, а Ansible автоматически рассылает их на серверы.</p>
19 <p><strong>Ansible</strong>- это инструмент, который берёт на себя управление серверами. Вам не нужно по кругу запускать одни и те же скрипты и команды. Вместо этого вы прописываете все действия, которые нужно выполнить, в одном файлике, а Ansible автоматически рассылает их на серверы.</p>
20 <p>А ещё, в отличие от большинства конкурентов, Ansible - безагентная система. Это значит, что для работы не нужно накатывать на серверы программы-агенты. Главное, чтобы клиент Ansible был установлен на управляющем хосте - им может быть что угодно, вплоть до вашего домашнего компьютера.</p>
20 <p>А ещё, в отличие от большинства конкурентов, Ansible - безагентная система. Это значит, что для работы не нужно накатывать на серверы программы-агенты. Главное, чтобы клиент Ansible был установлен на управляющем хосте - им может быть что угодно, вплоть до вашего домашнего компьютера.</p>
21 <p>Интересно, что название вполне утилитарного Ansible взято из научной фантастики. В романах Урсулы Ле Гуин так называется аппарат для связи между космическими кораблями. Поэтому во время настройки серверов ансиблом вы заслуженно можете считать себя космическим инженером :)</p>
21 <p>Интересно, что название вполне утилитарного Ansible взято из научной фантастики. В романах Урсулы Ле Гуин так называется аппарат для связи между космическими кораблями. Поэтому во время настройки серверов ансиблом вы заслуженно можете считать себя космическим инженером :)</p>
22 <p>Как мы отметили ранее, в Ansible все манипуляции с сервером можно описать в едином файле. Называется такой файл<strong>плейбуком</strong> - по сути, это набор инструкций, которые нужно выполнить на сервере. Плейбуки пишутся на декларативном языке YAML - выглядит это так:</p>
22 <p>Как мы отметили ранее, в Ansible все манипуляции с сервером можно описать в едином файле. Называется такой файл<strong>плейбуком</strong> - по сути, это набор инструкций, которые нужно выполнить на сервере. Плейбуки пишутся на декларативном языке YAML - выглядит это так:</p>
23 --- - name: Example Ansible Playbook hosts: all gather_facts: no tasks: # Устанавливаем пакет Vim - name: Install vim package ansible.builtin.apt: name: vim state: present # Добавляем пользователя 'newuser' - name: Add user 'newuser' ansible.builtin.user: name: newuser state: present shell: /bin/bash # Копируем файл на удалённый хост - name: Copy file to remote host ansible.builtin.copy: src: /path/to/local/file.txt dest: /path/to/remote/file.txt # Устанавливаем и запускаем Nginx - name: Install and start nginx ansible.builtin.apt: name: nginx state: present notify: - Start nginx<p>В этом примере плейбук по очереди выполняет разные действия - словно актёр на сцене по заученному сценарию:</p>
23 --- - name: Example Ansible Playbook hosts: all gather_facts: no tasks: # Устанавливаем пакет Vim - name: Install vim package ansible.builtin.apt: name: vim state: present # Добавляем пользователя 'newuser' - name: Add user 'newuser' ansible.builtin.user: name: newuser state: present shell: /bin/bash # Копируем файл на удалённый хост - name: Copy file to remote host ansible.builtin.copy: src: /path/to/local/file.txt dest: /path/to/remote/file.txt # Устанавливаем и запускаем Nginx - name: Install and start nginx ansible.builtin.apt: name: nginx state: present notify: - Start nginx<p>В этом примере плейбук по очереди выполняет разные действия - словно актёр на сцене по заученному сценарию:</p>
24 <ul><li>устанавливает редактор кода Vim;</li>
24 <ul><li>устанавливает редактор кода Vim;</li>
25 <li>создаёт нового пользователя с именем newuser;</li>
25 <li>создаёт нового пользователя с именем newuser;</li>
26 <li>копирует файл на удалённый хост;</li>
26 <li>копирует файл на удалённый хост;</li>
27 <li>устанавливает веб-сервер Nginx.</li>
27 <li>устанавливает веб-сервер Nginx.</li>
28 </ul><p>Видно, что за каждое действие в плейбуке отвечает отдельный кусочек кода - в Ansible они называются<strong>модулями</strong>. Это такие небольшие программки, которые и творят всю серверную магию. Например, ansible.builtin.user добавляет на хост нового пользователя.</p>
28 </ul><p>Видно, что за каждое действие в плейбуке отвечает отдельный кусочек кода - в Ansible они называются<strong>модулями</strong>. Это такие небольшие программки, которые и творят всю серверную магию. Например, ansible.builtin.user добавляет на хост нового пользователя.</p>
29 <p>Модулей для Ansible<a>написано великое множество</a> - можно собирать свои плейбуки словно из деталек Lego. А если ваши инженерные вкусы весьма специфичны, можно написать свой собственный модуль.</p>
29 <p>Модулей для Ansible<a>написано великое множество</a> - можно собирать свои плейбуки словно из деталек Lego. А если ваши инженерные вкусы весьма специфичны, можно написать свой собственный модуль.</p>
30 <p>Для удобства модули заворачивают в <strong>задачи</strong>, или "таски". Сами по себе они не выполняют никаких операций - лишь запускают нужные модули в нужное время. Например, в этом фрагменте задача Copy file to remote host запускает модуль ansible.builtin.copy, чтобы "залить" файл на хост:</p>
30 <p>Для удобства модули заворачивают в <strong>задачи</strong>, или "таски". Сами по себе они не выполняют никаких операций - лишь запускают нужные модули в нужное время. Например, в этом фрагменте задача Copy file to remote host запускает модуль ansible.builtin.copy, чтобы "залить" файл на хост:</p>
31 # Копируем файл на удалённый хост - name: Copy file to remote host ansible.builtin.copy: src: /path/to/local/file.txt dest: /path/to/remote/file.txt<p>С механикой работы разобрались - теперь давайте посмотрим на задачи, где Ansible может быть полезен.</p>
31 # Копируем файл на удалённый хост - name: Copy file to remote host ansible.builtin.copy: src: /path/to/local/file.txt dest: /path/to/remote/file.txt<p>С механикой работы разобрались - теперь давайте посмотрим на задачи, где Ansible может быть полезен.</p>
32 <p><strong>Настройка конфигураций.</strong>Парой движений можно привести серверы в рабочее состояние. Например, если вы хотите установить обновление системы сразу на все машины организации, всё, что нужно, - это записать IP-адреса узлов в плейбук и запустить его со своего компьютера.</p>
32 <p><strong>Настройка конфигураций.</strong>Парой движений можно привести серверы в рабочее состояние. Например, если вы хотите установить обновление системы сразу на все машины организации, всё, что нужно, - это записать IP-адреса узлов в плейбук и запустить его со своего компьютера.</p>
33 <p><strong>Управление безопасностью.</strong>С помощью Ansible можно задать серверам единую политику безопасности. Например, с помощью модуля iptables можно настроить брандмауэры сразу всех подконтрольных машин - а ansible-vault зашифрует файлы с паролями и другие ценные данные.</p>
33 <p><strong>Управление безопасностью.</strong>С помощью Ansible можно задать серверам единую политику безопасности. Например, с помощью модуля iptables можно настроить брандмауэры сразу всех подконтрольных машин - а ansible-vault зашифрует файлы с паролями и другие ценные данные.</p>
34 <p><strong>Развёртывание приложений.</strong>Ansible можно использовать в паре с тем же Jenkins и другими инструментами потоковой сборки. В этом случае Jenkins будет подхватывать коммиты разработчиков из Git и рассылать их на серверы с помощью Ansible.</p>
34 <p><strong>Развёртывание приложений.</strong>Ansible можно использовать в паре с тем же Jenkins и другими инструментами потоковой сборки. В этом случае Jenkins будет подхватывать коммиты разработчиков из Git и рассылать их на серверы с помощью Ansible.</p>
35 <p><strong>Настройка облачных ресурсов.</strong>В Ansible есть модули для создания виртуальных машин в облачных средах - например, VK Cloud, VMware, OpenStack, AWS, Azure, Google Cloud Platform и многих других.</p>
35 <p><strong>Настройка облачных ресурсов.</strong>В Ansible есть модули для создания виртуальных машин в облачных средах - например, VK Cloud, VMware, OpenStack, AWS, Azure, Google Cloud Platform и многих других.</p>
36 <p><strong>Создание контейнеров.</strong>Контейнер - это программная "коробка", в которой находится приложение и всё, что ему нужно для работы: базы данных, фреймворки и другие зависимости. И хотя сам по себе Ansible не подходит для создания контейнеров, он здорово облегчает настройку инструментов, которые это "умеют" - например, Docker и Podman.</p>
36 <p><strong>Создание контейнеров.</strong>Контейнер - это программная "коробка", в которой находится приложение и всё, что ему нужно для работы: базы данных, фреймворки и другие зависимости. И хотя сам по себе Ansible не подходит для создания контейнеров, он здорово облегчает настройку инструментов, которые это "умеют" - например, Docker и Podman.</p>
37 <p>Вот за что платформу ценят инженеры и разработчики:</p>
37 <p>Вот за что платформу ценят инженеры и разработчики:</p>
38 <ul><li><strong>Идемпотентность</strong>- модули Ansible можно запускать многократно без риска нежелательных изменений. Если система уже находится в нужном состоянии, модули просто не сработают. Представьте, что хотите посолить борщ, но голос сверху говорит вам, что вы уже это сделали, - вот это и есть идемпотентность :)</li>
38 <ul><li><strong>Идемпотентность</strong>- модули Ansible можно запускать многократно без риска нежелательных изменений. Если система уже находится в нужном состоянии, модули просто не сработают. Представьте, что хотите посолить борщ, но голос сверху говорит вам, что вы уже это сделали, - вот это и есть идемпотентность :)</li>
39 <li><strong>Компактность</strong>- благодаря безагентной модели вам не нужно устанавливать на серверы лишний софт. Главное, чтобы все хосты поддерживали соединение по SSH и запуск скриптов на Python.</li>
39 <li><strong>Компактность</strong>- благодаря безагентной модели вам не нужно устанавливать на серверы лишний софт. Главное, чтобы все хосты поддерживали соединение по SSH и запуск скриптов на Python.</li>
40 <li><strong>Кросс-платформенность</strong>- управляющий узел можно развернуть на машине с любой системой на борту: Linux, FreeBSD, macOS, Ubuntu, Windows (с небольшими костылями) - или в облаке.</li>
40 <li><strong>Кросс-платформенность</strong>- управляющий узел можно развернуть на машине с любой системой на борту: Linux, FreeBSD, macOS, Ubuntu, Windows (с небольшими костылями) - или в облаке.</li>
41 <li><strong>Open source</strong>- приложение не собирает данные пользователей, а его код доступен для изучения разработчикам. Более того, Ansible можно использовать бесплатно в некоммерческих целях.</li>
41 <li><strong>Open source</strong>- приложение не собирает данные пользователей, а его код доступен для изучения разработчикам. Более того, Ansible можно использовать бесплатно в некоммерческих целях.</li>
42 <li><strong>Кэширование</strong><em></em>- Ansible кэширует данные о серверах, которыми управляет: список пользователей, настройки сети и другое. Когда вы захотите получить эти сведения, Ansible автоматически подтянет их из кэша, не тратя время на соединение с сервером.</li>
42 <li><strong>Кэширование</strong><em></em>- Ansible кэширует данные о серверах, которыми управляет: список пользователей, настройки сети и другое. Когда вы захотите получить эти сведения, Ansible автоматически подтянет их из кэша, не тратя время на соединение с сервером.</li>
43 <li><strong>Интеграция с DevOps-инструментами</strong>- Ansible может служить низкоуровневой "подложкой" для работы Kubernetes, Docker и других инструментов оркестрации и управления контейнерами.</li>
43 <li><strong>Интеграция с DevOps-инструментами</strong>- Ansible может служить низкоуровневой "подложкой" для работы Kubernetes, Docker и других инструментов оркестрации и управления контейнерами.</li>
44 </ul><p>Часть из этих понятий мы разобрали в предыдущих разделах - теперь попробуем уложить всё в единую картину.</p>
44 </ul><p>Часть из этих понятий мы разобрали в предыдущих разделах - теперь попробуем уложить всё в единую картину.</p>
45 <p><strong>Инвентарь.</strong>Список серверов, на которых будут выполняться задачи. Файл инвентаря создаётся автоматически после установки Ansible и хранится в директории /etc/ansible/hosts. Чтобы система работала, в файле нужно прописать IP-адреса подконтрольных серверов.</p>
45 <p><strong>Инвентарь.</strong>Список серверов, на которых будут выполняться задачи. Файл инвентаря создаётся автоматически после установки Ansible и хранится в директории /etc/ansible/hosts. Чтобы система работала, в файле нужно прописать IP-адреса подконтрольных серверов.</p>
46 <p><strong>Плейбук.</strong>Файл YAML, в котором прописаны задачи для выполнения на серверах. Плейбук может состоять из нескольких "плеев" - каждый из них отвечает за один или несколько хостов. Если плейбук - это книга, то плей можно условно сравнить с одной из глав.</p>
46 <p><strong>Плейбук.</strong>Файл YAML, в котором прописаны задачи для выполнения на серверах. Плейбук может состоять из нескольких "плеев" - каждый из них отвечает за один или несколько хостов. Если плейбук - это книга, то плей можно условно сравнить с одной из глав.</p>
47 <p><strong>Модули.</strong>Скрипты, которые совершают на сервере определённую работу: устанавливают пакеты, перезапускают службы, делают бэкапы, обновляют настройки и так далее. Модули можно загружать из <a>стандартной библиотеки</a>или создавать свои собственные.</p>
47 <p><strong>Модули.</strong>Скрипты, которые совершают на сервере определённую работу: устанавливают пакеты, перезапускают службы, делают бэкапы, обновляют настройки и так далее. Модули можно загружать из <a>стандартной библиотеки</a>или создавать свои собственные.</p>
48 <p><strong>Задачи.</strong>"Кусочки" скрипта, которые запускают модули и передают им параметры для выполнения.</p>
48 <p><strong>Задачи.</strong>"Кусочки" скрипта, которые запускают модули и передают им параметры для выполнения.</p>
49 <p><strong>Роли.</strong>Несколько однотипных задач можно объединять в роли. Допустим, у вас есть несколько задач, которые отвечают за один и тот же процесс: "установка Nginx", "копирование конфига Nginx", "перезагрузка Nginx". Чтобы не запускать эти задачи по отдельности, можно прописать в плейбуке роль "Установка и настройка Nginx".</p>
49 <p><strong>Роли.</strong>Несколько однотипных задач можно объединять в роли. Допустим, у вас есть несколько задач, которые отвечают за один и тот же процесс: "установка Nginx", "копирование конфига Nginx", "перезагрузка Nginx". Чтобы не запускать эти задачи по отдельности, можно прописать в плейбуке роль "Установка и настройка Nginx".</p>
50 <p><strong>Плагины.</strong>То же самое, что и модули, но работают не на хостах, а на управляющей машине. Нужны для автоматизации рутины: получения данных о серверах, фильтрации результатов, вывода журналов работы сервера и многих других действий.</p>
50 <p><strong>Плагины.</strong>То же самое, что и модули, но работают не на хостах, а на управляющей машине. Нужны для автоматизации рутины: получения данных о серверах, фильтрации результатов, вывода журналов работы сервера и многих других действий.</p>
51 <p><strong>Прикладные интерфейсы.</strong>С помощью API можно подключаться к сторонним приложениям - например, системам оркестрации, облачным провайдерам и сервисам IaC ("инфраструктура как код").</p>
51 <p><strong>Прикладные интерфейсы.</strong>С помощью API можно подключаться к сторонним приложениям - например, системам оркестрации, облачным провайдерам и сервисам IaC ("инфраструктура как код").</p>
52 <p>Освоить Ansible можно самостоятельно, изучив<a>официальную документацию</a>. Но если такой путь кажется вам сложным, можно попробовать записаться на курсы. Например, Stepik предлагает бесплатный<a>курс по Ansible</a>из 38 уроков - для прохождения не нужны глубокие знания в системном администрировании.</p>
52 <p>Освоить Ansible можно самостоятельно, изучив<a>официальную документацию</a>. Но если такой путь кажется вам сложным, можно попробовать записаться на курсы. Например, Stepik предлагает бесплатный<a>курс по Ansible</a>из 38 уроков - для прохождения не нужны глубокие знания в системном администрировании.</p>
53 <p>Если же вам интересно настраивать веб-серверы и вы хотите заниматься этим профессионально, можно присмотреться к программе "<a>Профессия DevOps-инженер</a>". На ней можно научиться всему, что нужно для старта и развития карьеры в DevOps, - в том числе и работе с Ansible.</p>
53 <p>Если же вам интересно настраивать веб-серверы и вы хотите заниматься этим профессионально, можно присмотреться к программе "<a>Профессия DevOps-инженер</a>". На ней можно научиться всему, что нужно для старта и развития карьеры в DevOps, - в том числе и работе с Ansible.</p>
54 <a>Практический курс: "Профессия DevOps-инженер" Узнать о курсе</a>
54 <a>Практический курс: "Профессия DevOps-инженер" Узнать о курсе</a>