Система управления конфигурацией Ansible: как одновременно управлять множеством серверов

4b3f87b3abdda073c5ec12ce571719c1.png

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

Самый простой способ делать это — подключаться к каждому серверу через ssh и вносить изменения. Но, несмотря на свою простоту, такой метод трудозатратен. На выполнение типовых операций тратится большое количество времени.

Что можно сделать в такой ситуации? Для упрощения процессов настройки и конфигурации серверов можно прописать shell-скрипты. Но является ли такой способ идеальным?

Нет. Скрипты подлежат регулярному изменению и настройке под конкретную задачу. При этом важно учитывать различие ОС и версий. При этом налаживание скриптов трудоёмкий процесс и требует много времени.

В такой ситуации хороший вариант — внедрение системы удаленного управления конфигурацией. Требуется лишь указать нужное состояние узла, а система самостоятельно определит, что для этого нужно и сделает это.

Для автоматизации и внедрения системы удаленного управления конфигурациями отличным решением является Ansible.

Управление парком серверов: причины выбора Ansible

Ansible — инструмент для удаленного управления конфигурациями, с помощью которого настраивают удаленные машины. Самое яркое отличие его от подобных систем — использование существующей инфраструктуры SSH. Если говорить о других инструментах, таких как Chef и Puppet, то они требуют специального PKI-окружения.

Основой работы Ansible является push mode. В этом режиме вручную или с помощью скрипта удаленно осуществляется накатывание изменений на сервере. В других системах наблюдается обратный процесс: в режиме pull агентом сравниваются конфигурации и, при наличии изменений, осуществляется копирование и применение её.

Режим Push — это простая архитектура и хранение всех конфигураций локально в удобном для администратора виде. Он является хорошей заменой run-once скриптов при развертывании виртуальных машин.

Ansible позволяет привести удаленные серверы в нужное состояние. Для этого администратору требуется всего-лишь описать путь, как добиться этого состояния с помощью сценариев. Благодаря такой технологии оперативно осуществляется переконфигурация системы. Стоит лишь дополнить новыми строками существующий сценарий.

Преимущества продукта по сравнению с аналогами

Рассмотрим преимущества Ansible в сравнении с Puppet и Chef:

  • работа инструмента выполняется через SSH. Нет никакой необходимости устанавливать на управляемые узлы дополнительное программное обеспечение. Если всё же нужно будет использовать дополнительные модули, получить их можно из официального репозитория;

  • Ansible создан на Python. Данный язык программирования очень прост. При необходимости на нем всегда можно легко написать новые модули;

  • простота использования: работе с Ansible можно научиться за непродолжительный срок;

  • вся информация о продукте и сопутствующая документация написана ясно и понятна даже начинающим пользователям;

  • работа Ansible осуществляется в режиме Pull и Push;

  • состояние узлов можно последовательно обновлять.

Ansible перегнал Puppet на рынке систем управления конфигурациями. Разработка его на Python, а не на Ruby делает его похожим на Salt. Преимущество данного языка в том, что он используется во множестве Unix и Linux приложений. Поэтому разработанные на Python SCM легко устанавливаются и функционируют.

Уникальность Ansible — это простое и оперативное развертывание. По факту, такая система не использует развертываемые агенты. Для написания такого продукта могут быть использованы любые языки программирования. Они распространяются через классические модули JSON. Это огромный плюс преимущественно перед выбором определенного языка.

Функции данного продукта делают его востребованным для развертывания больших дата-центров.

В сравнении с Chef, созданном на Ruby, Ansible занимает лидирующие позиции. Этот язык программирования рассчитан на опытных пользователей. И абсолютно не подходит тем, у кого не имеется или имеется малый опыт программирования. Чтобы изучить такой сложный язык, вам понадобится колоссальный опыт программирования или сильнейшая мотивация.

Одно из самых главных преимуществ Ansible — то, что учиться работе с продуктом может кто угодно. Безусловно, имеющие опыт работы в сфере ИТ и DevOps пользователи могут изучить его быстрее. При этом буквально каждый сможет освоить его за счет простого пользовательского интерфейса.

Выполнение всех сценариев и команд в Ansible выполняются методом Push. При необходимости осуществляется запуск сценария и последовательное его выполнение на удаленных серверах. Но создатели позаботились о возможности использования метода pull. С этой целью было написано специальное приложение для установки части программного решения на удаленные хосты.

Модули Ansible

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

Безусловно.

Это можно делать в ad-hoc командах и собирать в определенный сценарий и затем в playbook.

Система управления конфигурациями позволяет использовать более 200 модулей для настройки ИТ инфраструктуры.

Командный модуль command

Модуль принимает имя команды и аргументы. Не работают с модулем command переменные оболочки или операции (<,>, |, &), поскольку обрабатываются оболочкой. Данный модуль может принимать следующие параметры:

  • chdir: смена директории исполнения команды

  • creates: создание файла

  • removes: удаление файла

Командный модуль raw

Его используют при невозможности использования других иных командных модулей. С помощью него осуществляется запуск удаленных команд серверам по SSH. Работа raw осуществляется на серверах даже без установленного Python.

Командный модуль shell

Этот модуль отличается от command использованием /bin/sh по умолчанию для запуска команд. Возможно использование переменных оболочек и иных функций.

Файловый модуль file

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

В официальной документации данного программного решения можно ознакомиться с полным списком используемых модулей. Их перечень по-настоящему впечатляет.

Повышение привилегий в плейбуках Ansible

Иногда, когда модуль или команда требуют расширенных системных привилегий или другого пользователя, требуется запустить модуль повышения привилегий become. Он представляет собой абстракцию для sudo и других программных решений для повышения привилегий.  

Разобравшись с тем, как функционирует повышение привилегий Ansible, удастся выполнять задачи с соответствующими разрешениями. Запуск задач осуществляется от имени пользователя, который подключается. Это может быть пользователь root или обычный пользователь с доступом SSH к удаленным нодам.

Чтобы запустить команду с расширенными привилегиями, необходимо включить в плей директиву become со значением yes. Такая настройка может быть глобальной, в этом случае она будет распространять свое действие на все задачи в этом плее. Индивидуальные параметры распространяются на одну задачу. Возможно вам придется ввести ключ, в зависимости от того, как осуществлена настройка пользователя на удаленных нодах.

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

 Системы повышения привилегий, а именно sudo, требуют подтверждения информации от пользователя. Для этого предлагается осуществить ввод пароля.  Но следствием этого может стать невозможность Ansible запуска команды. Потому возможно использование параметра –ask-become-pass или -K, чтобы Ansible запросил у вас пароль sudo:

ansible server1 -i inventory -a "tail /var/log/nginx/error.log" --become -K

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

К примеру, требуется включение параметра — become, при желании запуска команды tail с целью вывода крайних сообщений из лога ошибок Nginx на server1 из инвентаря:

ansible server1 -i inventory -a "tail /var/log/nginx/error.log" --become

Это тождественно передаче команды sudo tail /var/log/nginx/error.log на удаленном хосте.

Перезагрузка серверов при установке системы удаленного управления конфигурацией

Ansible — инструмент, в котором не предусмотрен модуль, позволяющий перезагрузить серверы. Однако, выполнение такой команды возможно. Это команда bash, которая запускает /sbin/reboot на удаленном хосте.

Чтобы осуществить перезапуск сервера, нужно позаботиться о расширенных системных привилегиях. По этой причине важно убедиться в наличии у удаленного пользователя доступа к sudo и включении параметра –become. Флаг -K предложит вам ввод пароля sudo вашего пользователя.

Внимание! Очередная команда осуществит перезапуск серверов, находящихся под управлением Ansible. Такое событие может привести к неполадкам в работе всех использующих эти серверы приложений на непродолжительное время.

К примеру, для перезапуска всех серверов в группе webservers, необходимо задать следующую команду:

ansible webservers -i inventory -a "/sbin/reboot"  --become  -K

С помощью команд для управления серверами, возможно выполнение большого спектра задач. Ansible — прекрасное решение для автоматизации и внедрения системы удаленного управления конфигурациями.

В результате осуществляется экономия времени и трудоемкости на выполнение однообразных операций. Достаточно лишь описать требуемое состояние узла, а система самостоятельно определить, какие действия нужно совершить для такого состояния и совершит их незамедлительно.

© Habrahabr.ru