Как работает Ansible
Создана 25.06.2024
Отредактирована 02.02.2023
Отредактирована 02.02.2023
Ansible - это радикально простой механизм автоматизации ИТ, который автоматизирует выделение облачных ресурсов, управление конфигурацией, развертывание приложений, внутрисервисную оркестровку и многие другие ИТ-потребности.
Разработанный с первого дня для многоуровневого развертывания, Ansible моделирует вашу ИТ-инфраструктуру, описывая взаимосвязь всех ваших систем, а не просто управляя одной системой за раз.
Разработанный с первого дня для многоуровневого развертывания, Ansible моделирует вашу ИТ-инфраструктуру, описывая взаимосвязь всех ваших систем, а не просто управляя одной системой за раз.
В нем не используются агенты и дополнительная настраиваемая инфраструктура безопасности, поэтому его легко развернуть - и, что наиболее важно, он использует очень простой язык (YAML в форме Ansible Playbooks), который позволяет описывать ваши задачи автоматизации подходящим способом.
На этой странице мы дадим вам действительно краткий обзор, чтобы вы могли видеть вещи в контексте. Для получения более подробной информации перейдите на docs.ansible.com
ЭФФЕКТИВНАЯ АРХИТЕКТУРА
Ansible работает путем подключения к вашим узлам и отправки им небольших программ, называемых «модулями Ansible». Эти программы написаны как ресурсные модели желаемого состояния системы. Затем Ansible выполняет эти модули (по умолчанию через SSH) и удаляет их по завершении.
Ваша библиотека модулей может находиться на любом компьютере, и для этого не требуются серверы, демоны или базы данных. Обычно вы будете работать со своей любимой программой-терминалом, текстовым редактором и, возможно, с системой контроля версий, чтобы отслеживать изменения в вашем контенте.
КЛЮЧИ SSH - ВАШИ ДРУЗЬЯ
Пароли поддерживаются, но ключи SSH с ssh-agent - один из лучших способов использования Ansible. Хотя, если вы хотите использовать Kerberos, это тоже хорошо. Множество вариантов! Вход в систему с правами root не требуется, вы можете войти в систему как любой пользователь, а затем su или sudo для любого пользователя.
Модуль «authorized_key» в Ansible - отличный способ использовать ansible для управления тем, какие машины могут получить доступ к каким хостам. Также можно использовать другие варианты, такие как Kerberos или системы управления идентификацией.
ssh-agent bash
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa
УПРАВЛЯЙТЕ INVENTORY В ПРОСТОЙ ТЕКСТОВЫЙ ФАЙЛ
По умолчанию Ansible представляет, какими машинами он управляет, с помощью очень простого файла INI, который объединяет все ваши управляемые машины в группы по вашему выбору.
Чтобы добавить новые машины, не требуется дополнительный сервер подписи SSL, поэтому никогда не будет проблем с решением, почему конкретная машина не была подключена из-за неясных проблем с NTP или DNS.
Если в вашей инфраструктуре есть еще один источник правды, Ansible также может подключиться к нему, например получить инвентарную, групповую и переменную информацию из таких источников, как EC2, Rackspace, OpenStack и других.
Вот как выглядит простой текстовый файл inventory:
[webservers]
www1.example.com
www2.example.com
[dbservers]
db0.example.com
db1.example.com
После того, как хосты инвентаризации перечислены, переменные могут быть назначены им в простых текстовых файлах (в подкаталоге с именем 'group_vars /' или 'host_vars /') или непосредственно в файле inventory
Или, как уже упоминалось, используйте динамический inventory для извлечения inventory из таких источников данных, как EC2, Rackspace или OpenStack.
ОСНОВЫ: ИСПОЛЬЗОВАНИЕ ПОДХОДЯЩЕГО ДЛЯ СПЕЦИАЛЬНОГО ПАРАЛЛЕЛЬНОГО ВЫПОЛНЕНИЯ ЗАДАЧ
Когда у вас есть доступный экземпляр, вы можете сразу же поговорить с ним без дополнительной настройки:
ansible all -m ping
ansible foo.example.com -m yum -a "name=httpd state=installed"
ansible foo.example.com -a "/usr/sbin/reboot"
Обратите внимание, что у нас есть доступ к модулям ресурсов на основе состояния, а также к запуску необработанных команд. Эти модули очень легко написать, и Ansible поставляется с их флотом, так что большая часть вашей работы уже сделана.
Ansible содержит огромный набор встроенных модулей, более 750 из которых.
PLAYBOOKS: ПРОСТОЙ И МОЩНЫЙ ЯЗЫК АВТОМАТИЗАЦИИ
С помощью Playbooks можно точно организовать несколько срезов топологии вашей инфраструктуры с очень подробным контролем над тем, сколько машин нужно обрабатывать одновременно. Именно здесь начинается самое интересное в Ansible.
Подход Ansible к оркестровке - это тонко настроенная простота, поскольку мы считаем, что ваш код автоматизации должен иметь для вас идеальный смысл спустя годы, и о специальном синтаксисе или функциях нужно очень мало помнить.
Вот как выглядит playbook. Напоминаем, что это только в качестве тизера - перейдите на docs.ansible.com, чтобы получить полную документацию и все, что возможно.
Пример
apache.yml
может выглядить так: - name: Apache server installed hosts: web become: true tasks: - name: latest Apache version installed yum: name: httpd state: latest - name: Apache enabled and running service: name: httpd enabled: true state: started - name: copy index.html copy: src: web.html dest: /var/www/html/index.html
Документация Ansible исследует это гораздо глубже. Вы можете сделать намного больше, в том числе:
- Подключать машины и выходить из балансировщиков нагрузки и окон мониторинга
- Один сервер должен знать IP-адреса всех остальных, используя факты, собранные об этих конкретных серверах, и использовать их для динамического создания файлов конфигурации.
- Задайте одни переменные и запрос для других и установите значения по умолчанию, когда они не установлены
- Используйте результат одной команды, чтобы решить, запускать ли другую
Есть много дополнительных возможностей, но начать легко.
Что наиболее важно, язык остается читаемым и прозрачным, и вам никогда не придется делать такие вещи, как объявление явных отношений упорядочения или писать код на языке программирования.
ДОПОЛНИТЕЛЬНОЕ РАСШИРЕНИЕ: МОДУЛИ, ПЛАГИНЫ и API
Если вы хотите написать свои собственные, модули Ansible могут быть написаны на любом языке, который может возвращать JSON (Ruby, Python, bash и т. Д.). Inventory также может подключаться к любому источнику данных, написав программу, которая обращается к этому источнику данных и возвращает JSON. Также существуют различные API-интерфейсы Python для расширения типов подключения Ansible (SSH - не единственный возможный транспорт), обратных вызовов (как журналы Ansible и т. Д.) И даже для добавления нового поведения на стороне сервера.