Ansible

Ansible — платформа свободного программного обеспечения для настройки и управления компьютерами. Позволяет выполнять мультиузловое развёртывание (то есть массовое внедрение конфигураций серверов и сервисов), запускать задачи ad hoc и осуществлять управление конфигурациями. Кроме того, Ansible классифицируется как инструмент оркестрации[1]. Управление узлами осуществляется через SSH и не требует установки дополнительного ПО на удалённые системы (кроме Python 2.4 или новее). Поддерживаются модули, работающие с JSON, а выходные данные могут обрабатываться на любом языке программирования. Для описания конфигураций повторного использования nативно применяется YAML.

Платформа была создана Майклом ДеХааном (Michael DeHaan), также автором системы автоматизированного развёртывания Cobbler и соавтором фреймворка для удалённого управления Func[2]. Ansible включён в дистрибутив Fedora (унаследованную компанией Red Hat) и доступен также для Red Hat Enterprise Linux, CentOS, Scientific Linux через репозитории EPEL, а также для других операционных систем[3]. Корпоративную поддержку продукта осуществляет компания Ansible, Inc[4].

Название выбрал ДеХаан по аналогии с системой моментальной связи сквозь гиперпространство из романа Орсона Скотта Карда «Игра Эндера», впервые же термин появился у Урсулы К. Ле Гуин в романе 1966 года «Мир Роканнона».

Общие сведения
Ansible
Тип Автоматизация, Оркестрация, Управление конфигурациями
Автор Майкл ДеХаан
Разработчик Майкл ДеХаан
Написана на Python, PowerShell, Unix Shell, Ruby
Операционные системы GNU/Linux, Unix, macOS, Windows
Первый выпуск 20 февраля 2012
Последняя версия 2.14.0 (7 ноября 2022)
Репозиторий github.com/ansible/ansib…
Лицензия Проприетарное ПО / GNU GPL v3
Сайт ansible.com

Основные возможности

Обычно Ansible сравнивают с другими инструментами управления конфигурациями — такими как Puppet, Chef[5] и др. Однако Ansible используется не только для управления конфигурациями, но и в других сценариях[6].

Развёртывание инфраструктуры

С помощью Ansible можно управлять современными облачными платформами, виртуализированными хостами и гипервизорами, сетевым оборудованием и физическими серверами.

Управление конфигурациями

Позволяет устанавливать и поддерживать работоспособность продуктов, отслеживая и обновляя информацию о программном и аппаратном обеспечении предприятия — такие как версии установленных программ, обновления, местоположения и сетевые адреса устройств.

Развёртывание приложений

При описании приложения и управлении его развёртыванием через Ansible Tower можно отслеживать полный жизненный цикл приложения — от разработки до промышленной эксплуатации.

Безопасность и соответствие требованиям

Ansible позволяет просто определить параметры безопасности на управляемых системах. Используя синтаксис Playbook, можно настраивать файрволы, создавать и управлять пользователями и группами, применять индивидуальные политики безопасности; имеется большое количество готовых модулей.

Оркестрация[7]

Ansible используется для оркестрации развёртывания, например, OpenStack. Такие компании, как Rackspace, CSC, HP, Cisco и IBM, доверяют Ansible обеспечение стабильной работы своих облачных решений на базе OpenStack.

Архитектура

Как и большинство решений по управлению конфигурациями, Ansible выделяет два типа серверов: управляющий и узлы. Управление начинается с единственной управляющей (контролирующей) машины, с которой посредством SSH производится управление узлами. Узлы определяются через специальный инвентарь.

Для управления Ansible развёртывает модули на узлы по протоколу SSH. Временные копии модулей хранятся на узлах и взаимодействуют с управляющей машиной через JSON, используя стандартный вывод[8]. Ansible не поддерживает никаких фоновых процессов или агентов на узлах — модули выполняются только на этапе задания и после этого удаляются[9].

В отличие от других систем управления, таких как Chef и Puppet, Ansible использует безагентную архитектуру[9]. В системах с агентами, узлы должны дополнительно запускать специальные процессы для связи с сервером управления. Безагентная архитектура не требует запуска каких-либо процессов на узлах для связи с управляющей машиной, что снижает нагрузку на сеть и предотвращает использование агрессивных методов мониторинга сервером (например, постоянные опросы)[9].

Принципы дизайна

К особенностям Ansible[8] относятся:

  • Минимализм. Системы управления не должны накладывать лишних зависимостей на целевые узлы[9].
  • Консистентность.
  • Безопасность. Ansible не устанавливает уязвимых агентов на целевых системах, требования сведены к OpenSSH, который широко используется и тщательно протестирован[9].
  • Высокая надёжность. Модель идемпотентности помогает избежать побочных действий при повторном выполнении задач[1].
  • Простота освоения. Playbooks (сценарии) пишутся на простом декларативном языке, основанном на YAML.

Модули

Модули — это единицы работы в системе Ansible. Каждый модуль является самостоятельным и может быть написан на любом скриптовом языке (Python, Perl, Ruby, Bash и др.). Ключевое свойство модулей — идемпотентность, гарантирующая достижение только необходимого состояния и предотвращающая лишние изменения при повторном запуске[8].

Инвентарь

Инвентарь — это описание управляемых узлов для Ansible. Обычно это конфигурационный файл в формате INI по умолчанию располагается по адресу /etc/ansible/hosts. В конфиге перечисляются IP-адреса или имена хостов, к которым требуется доступ.

Также узлы могут быть объединены в группы.

Пример конфигурационного файла:

192.168.6.1

[webservers]
foo.example.com
bar.example.com

Здесь указаны три узла: первый через IP-адрес, следующие два — по имени. Они объединены в группу webservers.

Сценарии (Playbooks)

Playbooks описывают конфигурацию, развёртывание и оркестрацию с помощью Ansible. Формат файлов сценариев — YAML[10]. Каждый Playbook связывает группу узлов с набором ролей (tasks), каждая роль реализуется вызовом модулей.

Пример простого Playbook для группы webservers:

---
- hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: Убедиться, что Apache последней версии
    yum: pkg=httpd state=latest
  - name: Записать файл конфигурации Apache
    template: src=/srv/httpd.j2 dest=/etc/httpd.conf
    notify:
    - Перезапустить Apache
  - name: Убедиться, что Apache запущен и включён при старте системы
    service: name=httpd state=started enabled=yes
  handlers:
    - name: Перезапустить Apache
      service: name=httpd state=restarted

Список задач

Каждая часть сценария содержит список задач, которые выполняются поочерёдно для всех подходящих узлов. Все узлы, подходящие под паттерн, получают одинаковую задачу. Цель сценария — отобразить набор хостов на список задач.

При выполнении задач, если какая-либо окажется неудачной, соответствующий узел исключается из последующих шагов сценария. После исправления ошибок можно повторно запустить Playbook.

Задачи определяют вызов конкретного модуля с заданными аргументами. Переменные могут использоваться как параметры модулей. Модули обладают идемпотентностью: повторный запуск не вносит изменений, если они не нужны. Это обеспечивает безопасность многократного повторного применения сценариев.

Имя задачи должно быть указано явно — оно выводится в ходе выполнения сценария. Это облегчает понимание происходящего для пользователя.

Рекомендуется использовать современный синтаксис задания задач модуль: параметры; формат action: module options считается устаревшим, хотя иногда встречается в старых Playbook.

Поддерживаемые платформы

Управляющие узлы (контроллеры)

На управляющих серверах требуется Python 2.6 или новее. Поддерживаются основные дистрибутивы Linux и UNIX, такие как Red Hat, Debian, CentOS, macOS, BSD и др. Возможен запуск также на macOS. Контроллер на Windows напрямую не поддерживается[11], однако есть обходные способы: запуск внутри виртуальной машины с Linux, Bash из Ubuntu для Windows, Cygwin, Vagrant.

Узлы (клиенты)

Управляемые узлы должны иметь Python 2.4 или новее. Для Python 2.5 и ниже требуется модуль python-simplejson. Для работы на Windows-узлах необходим установленный Windows Management Framework с поддержкой WinRM[12].

Интеграция с облачными платформами

Библиотека облачных модулей Ansible позволяет разворачивать инфраструктуру и управлять её настройкой в публичных, частных и гибридных облаках. Язык Playbook применяется как для автоматизации приложений, так и для управления инфраструктурой, обеспечивая непрерывность развертывания в облаках любого типа.

Ansible поддерживает более 300 модулей для различных облачных технологий и провайдеров, что позволяет реализовать полный цикл автоматизации для OpenStack, AWS, VMware, Eucalyptus, KVM, CloudStack и других[8].

Интеграция с Big Data

Ansible поддерживает установку и администрирование сред хранения и анализа больших данных, включая Hadoop, Riak, Aerospike. Решения ориентированы на эффективное использование CPU и памяти на каждом узле, а также на мониторинг доступных ресурсов[8].

Пользователи

Ansible используется компаниями Atlassian, X, OneKingsLane, EverNote, TrunkClub, edX, Hootsuite, GoPro, Care.com, а также многими другими[13].

Примечания