Открыть сервис

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): специальные задачи, которые запускаются только при получении уведомления от других задач (например, перезапуск службы после изменения её конфигурации).

Процесс выполнения

  1. Пользователь запускает команду ansible-playbook на управляющем узле, указывая плейбук.
  2. Ansible считывает плейбук и инвентарь.
  3. Для каждого хоста из плейбука Ansible устанавливает SSH-соединение (или WinRM).
  4. Ansible собирает факты (facts) о системе — информацию об ОС, IP-адресах, дисках, установленных пакетах и т.д. (сбор фактов можно отключить для ускорения).
  5. Ansible последовательно выполняет задачи из плейбука. Для каждой задачи он копирует соответствующий модуль на управляемый узел, выполняет его и получает результат в формате JSON.
  6. Если задача изменяет состояние системы (например, устанавливает пакет), она считается «изменённой» (changed). Если состояние уже соответствует желаемому, задача считается «OK».
  7. После выполнения всех задач 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.

Источники

  1. Официальная документация Ansible: «Ansible Documentation» (docs.ansible.com).
  2. Книга: Lorin Hochstein, Rene Moser. «Ansible: Up and Running». O'Reilly Media, 2021.
  3. Статья: «Red Hat acquires IT automation startup Ansible for $150M» (ZDNet, 2015).
  4. Статья: «What is Ansible?» (Red Hat, официальный сайт).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →