Что нужно знать перед началом работы с Ansible
Пару слов про управление конфигурацией¶
Управление конфигурацией — автоматизированный процесс внесения изменений в систему. Он находится на стыке разработки и администрирования и решает широкий спектр задач, среди которых настройка серверной инфраструктуры, настройка облачной инфраструктуры, настройка локальной среды и деплой.
Справиться с перечисленными задачами получится и без систем управления конфигурацией. Например, мы можем вносить исправления руками прямо на целевых машинах или использовать bash-скрипты. Такие подходы работают, но вызывают ряд проблем:
-
Сервера будут отличаться. Если у вас существует экосистема, где более одного сервера, делать синхронные изменения и контролировать, что они выполняются одинаково везде, практически невозможно. Всегда найдётся тот, кто случайно зайдёт и поменяет что-нибудь в одном месте, забыв синхронизировать с остальными. Можно пытаться администрировать этот процесс, но вряд ли вы добьётесь больших успехов, потому что всё упирается в человеческий фактор.
-
Сложно воспроизвести конфигурацию. Если по какой-то причине ляжет машина, поднять её в том виде, в котором она была, вряд ли получится. Настройки софта могут быть раскиданы по всей файловой структуре, и вспомнить «как всё было» крайне тяжело. Плюс, это просто неэффективно тратить несколько дней, чтобы восстановить и отладить все настройки вместо того, чтобы за несколько минут поднять новую машину с помощью современных средств виртуализации.
-
Отсутствует контроль изменений. Если что-то пойдёт не так, вы не сможете сходу определить, кто и что менял. Придётся выяснять это в ручном режиме.
-
Знания хранятся в головах (обычно в одной). Кто-то один знает, что и как делать, а остальные стараются вносить изменения через него. Всё концентрируется вокруг конкретного человека, и если он увольняется, возникают сложности, потому что нет какой-то прозрачной схемы. Плюс, это ещё больше отдаляет программистов от администраторов вместо того, чтобы сближать их и делать одной командой.
Автоматическое управление конфигурацией решает большинство этих проблем. Во-первых, вы описываете всё в одном месте, и ваша конфигурация не разбросана по серверам. Есть репозиторий, в котором лежит код, и вы всегда можете отследить изменения.
Во-вторых, работает принцип infrastructure as a code. Вы не производите никаких изменений руками. Вы пишите код, который затем применяется с помощью специальных систем, и так ваша конфигурация эволюционирует. Поднять новый сервер становится тривиальной задачей, потому что у вас есть конфигурация, вы просто её накатываете, и всё работает.
В-третьих, системы управления конфигурацией декларируют идемпотентность как одну из своих главных фишек. Идемпотентность — свойство операции при повторном применении давать тот же результат, что и при первом. Если проще: независимо от того, сколько раз вы вызовете операцию, результат будет одинаковым. Если вы отправите скрипт на установку Python версии 3.9, а он там уже установлен, проблем не возникнет — команда просто проигнорируется.
В то же время большинство команд bash-скриптов не являются идемпотентными. Здесь повторное выполнение приведёт к сбою. Соответственно, когда вы пишите bash-скрипт, приходится вручную делать проверки и при необходимости вносить исправления.
Что такое Ansible¶
Ansible — система управления конфигурациями, написанная на Python. Берёт на себя всю работу по приведению удалённых серверов в нужное состояние. Администратору достаточно лишь описать, как достичь этого состояния с помощью сценариев — плейбуков.
В плейбуках описывается желаемое состояние управляемой системы. Затем Ansible проверяет, соответствует ли удалённый компьютер описанию, и если это не так, приводит его в должный вид. Такой подход позволяет быстро осуществлять переконфигурирование.
Зачем нужен Ansible¶
Когда у вас один сервер, им можно управлять вручную: набирать команды, что-то править, настраивать. Если их десять — это всё ещё реально. Но, представим, что у вас сотни серверов, которые разбросаны по разным городам. Как быть? Вряд ли собрать чемодан и отправиться в кругосветное путешествие, чтобы сделать всё вручную, — хорошая идея. Возникает потребность в автоматизированном и централизованном управлении.
Ansible удовлетворяет эту потребность. Он позволяет за несколько минут отправить инструкции на все сервера и произвести нужные изменения.
Ключевое в Ansible¶
Ansible — не единственная система управления конфигурациями. Ещё есть Pulumi, Chef, Otter, Puppet и другие. Что же отличает Ansible от аналогичных инструментов?
Безагентная модель работы. В основном в подобных Ansible средах для доставки инструкций используется pull-метод — вытягивание конфигураций с главного компьютера. В этом случае на управляемых машинах нужны специальные клиентские приложения. В Ansible этот метод присутствует, но есть и немного другой. Его можно назвать «проталкиванием инструкций» — push-метод. Доступ здесь обеспечивает через SSH, в связи с чем установка дополнительного ПО на целевые машины не обязательна. Достаточно, чтобы на компьютере, с которого вы производите изменения, стоял Ansible.
Управление небольшим числом серверов. Ansible можно использовать для управления сотнями и даже тысячами узлов. Но управлять единственным узлом с помощью Ansible также очень легко — вам нужно лишь написать один сценарий. Ansible подтверждает принцип: «Простое должно оставаться простым, а сложное — возможным».
Декларативный язык разметки для описания конфигураций. Да, когда есть ограниченное описание, не всегда можно легко выразить то, что задумывалось. Но для 90% случаев стандартных задач это удобнее, чем программирование сценариев, потому что достигается полное единообразие на всех уровнях.
Встроенные модули. Мощная сторона Ansible — набор модулей. Они покрывают всё, а не только базовые настройки операционной системы. Модули позволяют устанавливать приложения, перезапускать службы, копировать файлы конфигурации, работать с системами мониторинга и алертинга. Модули являются идемпотентными — сценарии Ansible можно запускать на сервере много раз. Это важно, потому что помогает избежать незапланированных последствий.
Тонкий слой абстракции. Некоторые системы управления конфигурациями предоставляют настолько мощный уровень абстракции, что позволяют использовать одни и те же сценарии для управления серверами с разными операционными системами. Ansible работает не так. На первый взгляд это может показаться недостатком, но на практике упрощает использование инструмента. Ansible не требует изучения новых наборов абстракций, сглаживающих разницу между операционными системами. Это сокращает объем документации для изучения перед началом написания сценариев.
Легко начать. В отличие от большинства других систем, Ansible очень прост в работе — вам не нужно глубоко знать систему, чтобы её использовать. Минимум, который нужен для старта:
-
подготовить инвентарный файл, где описаны устройства;
-
разобраться ad-hoc командами, позволяющими выполнять действия с устройствами из командной строки.
Хотя при использовании плейбуков появляется намного больше возможностей, с ad-hoc командами гораздо легче работать.
Какие задачи решает Ansible¶
Ansible решает широкий спектр задач, среди которых:
-
Подготовка сервера. Если вам нужна программа для отладки или запуска приложения, Ansible позаботится о том, чтобы все пакеты программ были установлены заранее, как требуется.
-
Управления конфигурацией. Ansible помогает настроить и записать подробную информацию о множестве программных или аппаратных пакетов во всех системах.
-
Ускоренное развёртывание приложений. С помощью Ansible Tower вы можете управлять жизненным циклом приложения, ускорять общий уровень развёртывания. Все, что нужно сделать, это описать команды в плейбуке и выполнить их.
-
Соответствие безопасности. Вам нужно определить параметры безопасности один раз, и они будут применяться ко всем узлам автоматически. Самое приятное — все учётные данные для входа в систему не могут быть получены сторонним пользователем в виде обычного текста.
-
IT-оркестрация. Ansible позволяет управлять сложными конфигурациями и обеспечивать оркестрацию для согласования бизнес-процессов с другими IT-ресурсами: сетью, службами, приложениями и др.