Руководство по Ansible

Руководство по Ansible


Что такое Ansible?


Ansible это очень гибкий и легкий инструмент для написания сценариев автоматизации любой сложности. Вы можете описать в нем как простое окружение разработчика так сложную структуру крупного проекта с несколькими окружениями (dev/stage/prod).


  • Работает без установки агента на управляемые хосты
  • Использует SSH для подключения к управляемым хостам
  • Выполняет изменения с помощью модулей Python, которые выполняются на управляемых хостах
  • Может выполнять действия локально на управляющем хосте
  • Использует YAML для описания сценариев
  • Содержит множество модулей (их количество постоянно растет)
  • Легко писать свои модули


Для чего?


Можно решать следующие задачи:

Установка/удаление ПО;

Конфигурирование ПО;

Создание/удаление пользователей;

Контроль пользовательских паролей/ключей;

Создание/удаление контейнеров/виртуальных машин;

Деплой кода вашего ПО;

Запуск различных скриптов/тестов.


Терминология

  • Control machine — управляющий хост. Сервер Ansible, с которого происходит управление другими хостами
  • Manage node — управляемые хосты
  • Inventory — инвентарный файл. В этом файле описываются хосты, группы хостов, а также могут быть созданы переменные
  • Playbook — файл сценариев
  • Play — сценарий (набор задач). Связывает задачи с хостами, для которых эти задачи надо выполнить
  • Task — задача. Вызывает модуль с указанными параметрами и переменными
  • Module — модуль Ansible. Реализует определенные функции



Структура Playbook


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

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




Плюсы Ansible


Легкость в изучении

По правде говоря, это одно из самых крутых качеств Ansible – изучить его можно за один вечер и уже запускать веб – сервер из YAML, например. Ansible задачи запускаются последовательно, что сильно облегчает траблшутинг конфигураций. Например, можно сделать Playbook для Ansible, который позволит получить минимальный веб сервер примерно так:

  • Создаем файл формата .yml и наполняем командами;
  • Установить через yum apache;
  • Запустить apache как сервис в операционной системе;
  • Скопировать в корень веб – сервера html страничку с заглушкой («Мы готовим информацию по сайту, скоро здесь все будет, бла бла бла..»);
  • Скорректировать iptables, открыв порты и сохранить конфигурацию;


Написан на Python

Если мы возьмем 10 программистов, вероятность, что кто-то из них знает Python гораздо выше, чем то, что кто – то из них знает Ruby. Именно это делает Ansible крутым – он написан на питоне в отличие от Ruby – based конкурентов. Так же отмечу, что Python библиотека, обычно, по умолчанию присутствует в любом Linux дистрибутиве, чего не сказать о Ruby.

Продолжая экскурсию – Ansible поддерживает написание модулей на любом языке программирования. Единственное требование – формат ответа. Это должен быть JSON.


Не нужно ставить клиента (агента) на машину


Для управления узлами, Ansible обрабатывает все коммуникации между мастер – узлами и узлами – агентами по стандартному SSH, или через модуль Paramiko, который является частью Python SSH второй версии.

Не нужно ставить агентское ПО на удаленные машины – только SSH подключение. Как следствие, упрощение обслуживания и траблшутинга.


YAML плейбуки

Плейбуки в Ансибл невероятно просты и читаемы. Все DevOps инженеры, могут освоить их за один вечер. Они даже проще чем JSON


Портал Ansible Galaxy

Портал, на котором вы наверняка найдете решение для своей задачи. Это объединение Ansible сообщества, где люди делятся наработками и решениями той или иной задачи. Тонны плейбуков, фреймворков, дистрибутивов и сопутствующего ПО.


Минусы Ansible


Проблемы с интерфейсом (UI)

Изначально Ansible разработан для работы с командной строкой. Первые наметки в сторону визуализации конфигурации Ансибл начались через AWX – графический интерфейс пользователя, который являлся первой попыткой упрощения конфигураций через интерфейсную составляющую. В последствии, AWX превратился в Anbile Tower, который дает возможность через GUI управлять Ansible, рисовать workflow и так далее.

Несмотря на улучшение Tower перед AWX, он все равно позволяет делать только 85% рабочего функционала Ansible, который можно делать через командную строку. В добавок, конфигурации внесенный через интерфейс зачастую не синхронизируются с CLI – конфигами.

Ansible Tower находится на стадии разработки и пока весьма сыроват.


Нет работы с состоянием машин/процессов

Если сравнивать с тем же Puppet, Ansible не имеет понятия «состояние» и, соответственно, не отслеживает его. Ансибл не смотрит на зависимости, а просто выполняет последовательный ряд задач/процессов.


Слабая поддержка совместимости с Windows

С версии 1.7 Ansible умеет работать с Unix и Windows узлами, но надо признаться, работа с первыми реализована гораздо лучше. Взаимодействие с Windows машинами происходит через PowerShell, и, что важно, вам все равно потребуется Linux хост (управляющая тачка) для такой коммуникации.


Поддержка крупного бизнеса

Ansible Enterprise Tower и Premiun Tower имеют имеют меньше опыта поддержки крупнякых клиентов, в сравнении, например, с Chef и Puppet.


Новизна продукта

Ansible находится на рынке меньше своих конкурентов и, само собой, баги будут всплывать. К тому же, комьюнити Ансибл только растет и развивается, в отличие от более крупных игроков, упомянутых в этой статье.



Итоги

Подведем черту: Ansible это просто, гибкий и мощный инструмент, для управления конфигами и автоматизацией. Ansible Tower имеет графический веб – интерфейс, REST API, с помощью которого вы можете интегрировать свой сторонние приложения и поддержку, которая только учится и осваивает азы сопровождения крупного энтерпрайза.



Report Page