Оглавление
Представьте, что вам требуется управлять множеством серверов, расположенных в различных точках земного шара. Каждое устройство нужно настроить, обновлять ПО и мониторить.
Самый простой способ делать это – подключаться к каждому серверу через 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 происходит методом Push. При необходимости осуществляется запуск сценария и последовательное его выполнение на удаленных серверах. Но создатели позаботились о возможности использования метода pull. С этой целью был написан специальный модуль для установки части программного решения на удаленные хосты.
Модули Ansible
При установке Ansible загружается большая библиотека модулей. При этом каждый из них выполняет строго обозначенную задачу. Можно ли выполнять модули отдельно?
Безусловно.
Это можно делать в ad-hoc командах и собирать в определенный сценарий и затем в playbook.
Система управления конфигурациями позволяет использовать более 200 модулей для настройки ИТ инфраструктуры.
Командный модуль command
Модуль принимает имя команды и аргументы. Не работают с модулем command переменные оболочки или операции (<,>, |, &), поскольку обрабатываются оболочкой. Данный модуль может принимать следующие параметры:
chdir: смена директории исполнения команды
creates: создание файла
removes: удаление файла
Командный модуль raw
Его используют при невозможности использования других командных модулей. С помощью него осуществляется запуск удаленных команд серверам по SSH. Raw работает на серверах даже без установленного Python.
Командный модуль shell
Этот модуль отличается от command использованием /bin/sh по умолчанию для запуска команд. Возможно использование переменных оболочек и иных функций.
Файловый модуль file
Он меняет атрибуты файла. С помощью него возможно создание файла, создание или удаление директории и символической ссылки.
В официальной документации Ansible можно ознакомиться с полным списком используемых модулей. Их там не мало.
Повышение привилегий в плейбуках Ansible
Иногда, когда модуль или команда требуют расширенных системных привилегий или другого пользователя, требуется запустить модуль повышения привилегий become. Он представляет собой абстракцию для sudo и других программных решений для повышения привилегий.
Запуск задач для повышения привилегий осуществляется от имени пользователя, который подключается. Это может быть пользователь root или обычный пользователь с доступом SSH к удаленным нодам.
Чтобы запустить команду с расширенными привилегиями, необходимо включить в плей директиву become со значением yes. Такая настройка может быть глобальной, в этом случае она будет распространять свое действие на все задачи в этом плее. Индивидуальные параметры распространяются на одну задачу. Возможно вам придется ввести ключ, в зависимости от того, как осуществлена настройка пользователя на удаленных нодах.
Также возможно изменение пользователя, на которого вы хотите переключиться во время выполнения задачи. Для этого нужно указать имя пользователя в директиве become_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 – прекрасное решение для автоматизации и внедрения системы удаленного управления конфигурациями.
В результате осуществляется экономия времени и трудоемкости на выполнение однообразных операций. Достаточно лишь описать требуемое состояние узла, а система всё сделает.
Глубже изучить Ansible можно на курсе: Ansible: Infrastructure as Code
Вы научитесь конфигурировать рутинные задачи и никакие правки конфигураций вас не остановят. Будете не просто конфигурировать, но и делать это с помощью удобного и простого инструмента. Сможете выполнять сложные задачи, настраивать под свои задачи и смело залезать под капот Ansible. Пойметё, когда и как писать свои модули.
Курс состоит не только из теории, но и из опыта спикера, его набитых шишек, кейсов, а также 78 тестовых и 46 практических заданий на стендах в личном кабинете.
Коротко о программе:
— Узнаете как работать с переменными, как писать плейбуки и роли;
— Развернете LEMP стек, PostgreSQL и Mongo кластеры, задеплоите Flask приложение;
— Напишите свой модуль для Ansible;
— Настроите IaC в Gitlab;
— Разберетесь с работой с облаками и enterprise решениями.
Посмотреть подробную программу и записаться: https://slurm.io/ansible