Ansible
Ansible — это открытое программное обеспечение для управления конфигурациями, автоматизации развёртывания приложений и оркестрации IT-инфраструктуры. Разрабатывается компанией Red Hat (подразделение IBM). Ansible относится к классу систем управления конфигурациями (Configuration Management, CM) наряду с такими инструментами, как Puppet, Chef и SaltStack. Ключевая особенность Ansible — отсутствие необходимости устанавливать на управляемые узлы какое-либо специальное агентское программное обеспечение (агент). Взаимодействие с узлами происходит по протоколу SSH (для Linux/Unix) или WinRM (для Windows). Ansible использует декларативный подход, описывая желаемое состояние системы на языке YAML.
История
Проект Ansible был создан в 2012 году Майклом ДеХааном (Michael DeHaan), автором таких систем, как Cobbler (автоматизация установки ОС) и Func (инструмент удалённого управления). Первая версия была выпущена в феврале 2012 года. В 2013 году компания Ansible, Inc. привлекла венчурное финансирование.
В октябре 2015 года Red Hat объявила о приобретении Ansible, Inc. за 150 миллионов долларов США. После этого Ansible стал ключевым продуктом Red Hat в области автоматизации, интегрированным с Red Hat Enterprise Linux (RHEL) и другими продуктами экосистемы. В 2017 году Red Hat выпустила продукт Red Hat Ansible Tower (позднее переименованный в Red Hat Ansible Automation Platform), предоставляющий веб-интерфейс, API и дополнительные возможности для управления Ansible в корпоративной среде. В 2020 году проект Ansible Core (базовая библиотека) был передан под управление сообщества, а Red Hat сосредоточилась на коммерческой платформе.
Архитектура и принципы работы
Ansible основан на архитектуре «без агента» (agentless). Это означает, что на управляемых хостах не требуется установка и запуск фонового демона. Вместо этого Ansible подключается к ним удалённо через SSH (по умолчанию) или WinRM, выполняет команды и модули, а затем отключается. После выполнения задачи никаких следов на управляемом узле не остаётся (кроме изменений, внесённых в соответствии с задачей).
Ключевые компоненты
- Управляющий узел (Control Node): машина, на которой установлен Ansible. На ней хранятся плейбуки, инвентари и роли. С неё инициируются все операции.
- Управляемые узлы (Managed Nodes): хосты (серверы, сетевые устройства, контейнеры), которыми управляет Ansible. На них не требуется установка агента, но должен быть доступен SSH-сервер или WinRM.
- Инвентарь (Inventory): файл (в формате INI или YAML), содержащий список управляемых узлов и их переменные. Может быть статическим (текстовый файл) или динамическим (скрипт, получающий данные из внешних источников — облачных провайдеров, систем CMDB).
- Модули (Modules): исполняемые скрипты (на Python, PowerShell или любом другом языке), которые выполняют конкретные действия: установка пакетов, копирование файлов, управление службами, работа с облачными API. Ansible поставляется с тысячами встроенных модулей.
- Плейбуки (Playbooks): файлы в формате YAML, описывающие желаемое состояние системы в виде последовательности «пьес» (plays). Каждая пьеса определяет набор хостов и список задач (tasks), которые необходимо выполнить. Плейбуки являются основным инструментом для написания сценариев автоматизации.
- Роли (Roles): способ организации плейбуков и связанных файлов (переменные, шаблоны, файлы, обработчики) в повторно используемые структуры. Роли позволяют разбить сложную конфигурацию на логические компоненты (например, роль
nginx, рольpostgresql). - Обработчики (Handlers): специальные задачи, которые запускаются только при получении уведомления от других задач (например, перезапуск службы после изменения её конфигурации).
Процесс выполнения
- Пользователь запускает команду
ansible-playbookна управляющем узле, указывая плейбук. - Ansible считывает плейбук и инвентарь.
- Для каждого хоста из плейбука Ansible устанавливает SSH-соединение (или WinRM).
- Ansible собирает факты (facts) о системе — информацию об ОС, IP-адресах, дисках, установленных пакетах и т.д. (сбор фактов можно отключить для ускорения).
- Ansible последовательно выполняет задачи из плейбука. Для каждой задачи он копирует соответствующий модуль на управляемый узел, выполняет его и получает результат в формате JSON.
- Если задача изменяет состояние системы (например, устанавливает пакет), она считается «изменённой» (changed). Если состояние уже соответствует желаемому, задача считается «OK».
- После выполнения всех задач Ansible закрывает соединения и выводит отчёт.
Классификация и компоненты экосистемы
Ansible можно разделить на несколько уровней:
- Ansible Core (Community Ansible): бесплатная базовая версия с открытым исходным кодом (лицензия GPLv3). Включает движок, модули, плейбуки и роли из сообщества.
- Red Hat Ansible Automation Platform (AAP): коммерческий продукт Red Hat, включающий:
- Ansible Controller (ранее Ansible Tower): веб-интерфейс и REST API для централизованного управления, планирования заданий, контроля доступа (RBAC), ведения журналов и интеграции с LDAP/Active Directory.
- Ansible Automation Hub: репозиторий для хранения и распространения сертифицированных коллекций модулей и ролей.
- Ansible Lightspeed: сервис на основе генеративного ИИ (IBM watsonx), помогающий создавать плейбуки на естественном языке.
- Execution Environments: контейнеризированные среды выполнения для задач Ansible, обеспечивающие изоляцию и воспроизводимость.
Применение
Ansible широко используется в различных областях IT-инфраструктуры:
- Управление конфигурациями: приведение серверов к единому состоянию (установка одинаковых пакетов, настройка файлов конфигурации, управление пользователями). Пример: настройка веб-сервера Nginx на 100 серверах.
- Развёртывание приложений: автоматизация установки и обновления программного обеспечения (например, развёртывание кластера Kubernetes или установка стека LAMP).
- Оркестрация: координация сложных многошаговых процессов, включающих несколько серверов (например, обновление базы данных с последующим перезапуском приложения).
- Автоматизация сетевых устройств: управление конфигурацией маршрутизаторов, коммутаторов и межсетевых экранов (Cisco, Juniper, Arista, Huawei) через модули Ansible, использующие SSH или API.
- Работа с облачными платформами: создание и управление виртуальными машинами, сетями и другими ресурсами в AWS, Azure, Google Cloud, OpenStack и других облаках.
- Обеспечение безопасности: автоматизация применения политик безопасности, установка обновлений, настройка средств защиты (например, установка и конфигурация Fail2ban).
Преимущества и недостатки
Преимущества
- Отсутствие агентов: упрощает развёртывание и обслуживание, снижает нагрузку на управляемые узлы.
- Простота изучения: плейбуки пишутся на YAML — читаемом и понятном даже для новичков языке разметки.
- Декларативный подход: описание желаемого состояния, а не последовательности команд, что делает конфигурацию идемпотентной (повторное применение плейбука не приводит к ошибкам).
- Обширная экосистема: тысячи готовых модулей, ролей и коллекций в Ansible Galaxy (общедоступный репозиторий).
- Интеграция с существующей инфраструктурой: работает через SSH, не требуя изменений в сетевой архитектуре или установки дополнительного ПО.
- Модульность и переиспользуемость: роли позволяют легко делиться конфигурациями и повторно использовать их в разных проектах.
Недостатки
- Производительность: из-за отсутствия агента и необходимости устанавливать SSH-соединение для каждой задачи, Ansible может работать медленнее, чем агентные системы (Puppet, Chef), особенно при управлении тысячами узлов. Для ускорения используется механизм
pipeliningи параллельное выполнение. - Сложность отладки: при возникновении ошибок в плейбуках диагностика может быть затруднена, особенно для новичков. Отсутствие встроенного интерактивного отладчика в базовой версии (появился в Ansible 2.5).
- Ограниченная поддержка Windows: хотя Ansible может управлять Windows-хостами через WinRM, функциональность и количество модулей для Windows меньше, чем для Linux.
- Отсутствие централизованного хранилища состояния: в отличие от Terraform или Puppet, Ansible не хранит состояние инфраструктуры в явном виде, что может усложнить отслеживание изменений при ручном вмешательстве.
Интересные факты
- Название «Ansible» происходит из научной фантастики: в романе Урсулы Ле Гуин «Обитатели неба и огня» (1971) ансибль — это устройство для мгновенной связи на любых расстояниях. Майкл ДеХаан выбрал это название, чтобы подчеркнуть скорость и простоту коммуникации инструмента с управляемыми узлами.
- Ansible использует идиомы «push» (проталкивание) — управляющий узел инициирует соединение и отправляет команды, в отличие от агентных систем, которые работают по модели «pull» (вытягивание), где агенты периодически опрашивают центральный сервер.
- В 2020 году Red Hat выпустила Ansible Content Collections — новый способ распространения модулей, ролей и плейбуков, заменивший старую структуру модулей в Ansible Core.
Источники
- Официальная документация Ansible: «Ansible Documentation» (docs.ansible.com).
- Книга: Lorin Hochstein, Rene Moser. «Ansible: Up and Running». O'Reilly Media, 2021.
- Статья: «Red Hat acquires IT automation startup Ansible for $150M» (ZDNet, 2015).
- Статья: «What is Ansible?» (Red Hat, официальный сайт).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →