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, можно настраивать файрволы, создавать и управлять пользователями и группами, применять индивидуальные политики безопасности; имеется большое количество готовых модулей.
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 описывают конфигурацию, развёртывание и оркестрацию с помощью 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].
Ansible поддерживает установку и администрирование сред хранения и анализа больших данных, включая Hadoop, Riak, Aerospike. Решения ориентированы на эффективное использование CPU и памяти на каждом узле, а также на мониторинг доступных ресурсов[8].
Пользователи
Примечания
Ссылки
- Официальный сайт Ansible (на английском)
- Colectivo Ansible: инструмент ACS с открытым исходным кодом и без агентов (на испанском)