Архитектура Ansible
Ansible — это радикально простой инструмент автоматизации ИТ-инфраструктуры, который автоматизирует развертывание облаков, управление конфигурацией, развертывание приложений, интрасервисную оркестрацию и многие другие потребности ИТ.
Разработанный для многоуровневых развертываний с самого начала, Ansible моделирует вашу ИТ-инфраструктуру, описывая взаимосвязи всех ваших систем, а не просто управление каждой системой по отдельности.
Он не использует агентов и дополнительную инфраструктуру безопасности, поэтому его легко развернуть — и, что наиболее важно, использует очень простой язык (YAML в формате Ansible Playbooks), позволяющий описывать задачи автоматизации способом, близким к простому английскому.
В этом разделе мы дадим вам очень краткий обзор работы Ansible, чтобы вы могли увидеть, как все части складываются вместе.
Модули
Ansible работает, подключаясь к узлам и отправляя на них небольшие программы, называемые «Ansible Модули». Эти программы написаны как модели ресурсов желаемого состояния системы. Затем Ansible выполняет эти модули (по умолчанию по SSH) и удаляет их по завершении.
Ваша библиотека модулей может находиться на любом компьютере, и не требуются серверы, демоны или базы данных. Обычно вы будете работать с любимой программой терминала, текстовым редактором и, вероятно, системой контроля версий для отслеживания изменений в вашем контенте.
Плагины
Плагины — это фрагменты кода, которые расширяют основные функции Ansible. Ansible поставляется с несколькими полезными плагинами, и вы можете легко написать свои собственные.
Инвентаризация
По умолчанию Ansible представляет управляемые машины с помощью очень простого файла INI, который помещает все управляемые машины в группы по вашему выбору.
Для добавления новых машин не требуется дополнительный сервер подписи SSL, поэтому никогда нет проблем с определением причины, по которой определенная машина не была подключена из-за неясных проблем с NTP или DNS.
Если в вашей инфраструктуре есть другой источник истины, Ansible также может подключаться к нему, например, извлекая информацию об инвентаризации, группах и переменных из источников, таких как EC2, Rackspace, OpenStack и других.
Вот как выглядит обычный текстовый файл инвентаризации:
--- [webservers] www1.example.com www2.example.com [dbservers] db0.example.com db1.example.com
После того, как узлы инвентаризации перечислены, переменные могут быть назначены им в простых текстовых файлах (в подкаталоге «group_vars/» или «host_vars/» или непосредственно в файле инвентаризации).
Или, как уже упоминалось, используйте динамическую инвентаризацию для извлечения данных инвентаризации из таких источников, как EC2, Rackspace или OpenStack.
Playbooks
Playbooks могут тонко координировать несколько слоев вашей топологии инфраструктуры с очень подробным контролем над тем, сколько машин обрабатывать за раз. Именно здесь Ansible начинает становиться наиболее интересным.
Подход Ansible к оркестрации — это тонко настроенная простота, поскольку мы считаем, что ваш код автоматизации должен быть понятен вам и через много лет, а особой синтаксической структуры или функций нужно будет помнить немного.
Вот как выглядит простой playbook:
--- - hosts: webservers serial: 5 # update 5 machines at a time roles: - common - webapp - hosts: content_servers roles: - common - content
Расширение Ansible с помощью плагинов и API
Если вы захотите написать свои собственные, модули Ansible могут быть написаны на любом языке, который может возвращать JSON (Ruby, Python, bash и т. д.). Инвентаризация также может подключаться к любому источнику данных, написав программу, которая взаимодействует с этим источником данных и возвращает JSON. Также существуют различные Python-API для расширения типов подключений Ansible (SSH — не единственный возможный транспорт), обратных вызовов (как Ansible регистрирует и т. д.), а также для добавления новых серверных функций.
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.4/dev_guide/overview_architecture.html