Введение
Управление конфигурацией — это процесс обработки изменений в системе таким образом, чтобы обеспечить её целостность с течением времени, обычно включающий инструменты и процессы, которые облегчают автоматизацию и наблюдаемость. Хотя эта концепция не возникла в IT-индустрии, термин широко используется для обозначения управления конфигурацией серверов.
В контексте серверов управление конфигурацией также часто называют IT-автоматизацией или оркестрацией серверов. Оба термина подчёркивают практические аспекты управления конфигурацией и возможность контролировать несколько систем с центрального сервера.
Это руководство проведёт вас через преимущества использования инструмента управления конфигурацией для автоматизации настройки вашей серверной инфраструктуры, и как один из таких инструментов, Ansible, может вам в этом помочь.
Преимущества использования инструмента управления конфигурацией
На рынке доступно множество инструментов управления конфигурацией с различными уровнями сложности и разнообразными архитектурными стилями. Несмотря на то, что каждый из этих инструментов имеет свои особенности и работает несколько по-разному, все они выполняют одну и ту же функцию: обеспечивают соответствие состояния системы состоянию, описанному в наборе скриптов подготовки.
Многие преимущества управления конфигурацией для серверов связаны с возможностью определять инфраструктуру как код. Это позволяет вам:
- Использовать систему контроля версий для отслеживания любых изменений в вашей инфраструктуре
- Повторно использовать скрипты подготовки для нескольких сред серверов, таких как разработка, тестирование и производство
- Делиться скриптами подготовки между коллегами для облегчения совместной работы в стандартизированной среде разработки
- Упрощать процесс репликации серверов, что облегчает восстановление после критических ошибок
Кроме того, инструменты управления конфигурацией предоставляют вам возможность управлять одним или сотнями серверов из централизованного места, что может значительно повысить эффективность и целостность вашей серверной инфраструктуры.
Обзор Ansible
Ansible — это современный инструмент управления конфигурацией, который облегчает задачу настройки и поддержания удаленных серверов, с минималистичным дизайном, предназначенным для быстрого начала работы.
Пользователи пишут сценарии подготовки Ansible на языке YAML, удобном стандарте сериализации данных, который не привязан к конкретному языку программирования. Это позволяет пользователям создавать сложные сценарии подготовки более интуитивно по сравнению с аналогичными инструментами в той же категории.
Ansible не требует установки специального программного обеспечения на управляемые узлы. Машина управления настраивается с программным обеспечением Ansible, которое затем взаимодействует с узлами через стандартный SSH.
Как инструмент управления конфигурацией и автоматизации, Ansible инкапсулирует все общие функции, присутствующие в других инструментах той же категории, сохраняя при этом сильное внимание к простоте и производительности:
Идемпотентное Поведение
Ansible отслеживает состояние ресурсов в управляемых системах, чтобы избежать повторения задач, которые уже были выполнены. Если пакет уже установлен, он не будет пытаться установить его снова. Цель состоит в том, чтобы после каждого выполнения подготовки система достигала (или сохраняла) желаемое состояние, даже если вы запускаете его несколько раз. Это характеризует Ansible и другие инструменты управления конфигурацией как имеющие идемпотентное поведение. При запуске playbook вы увидите статус каждой выполняемой задачи и то, выполнила ли задача изменение в системе.
Поддержка переменных, условий и циклов
При написании скриптов автоматизации Ansible вы можете использовать переменные, условия и циклы для того, чтобы сделать вашу автоматизацию более универсальной и эффективной.
Системные факты
Ansible собирает ряд подробной информации о управляемых узлах, таких как сетевые интерфейсы и операционная система, и предоставляет её в виде глобальных переменных, называемых системными фактами. Факты могут быть использованы в плейбуках для того, чтобы сделать вашу автоматизацию более универсальной и адаптивной, ведущей себя по-разному в зависимости от системы, которая подготавливается.
Система шаблонов
Ansible использует систему шаблонов Jinja2 на Python, чтобы позволить использовать динамические выражения и доступ к переменным. Шаблоны могут быть использованы для упрощения настройки конфигурационных файлов и сервисов. Например, вы можете использовать шаблон для настройки нового виртуального хоста в Apache, при этом используя один и тот же шаблон для нескольких установок серверов.
Поддержка Расширений и Модулей
Ansible поставляется с сотнями встроенных модулей, которые облегчают написание автоматизации для стандартных задач системного администрирования, таких как установка пакетов с помощью apt
и синхронизация файлов с rsync
, а также для работы с популярным программным обеспечением, таким как системы управления базами данных (например, MySQL, PostgreSQL, MongoDB и другие) и инструменты управления зависимостями (такие как composer
для PHP, gem
для Ruby, npm
для Node и другие). Кроме того, существует несколько способов расширения функциональности Ansible: плагины и модули являются хорошими вариантами, когда вам нужна кастомная функциональность, которая не предоставляется по умолчанию.
Вы также можете найти сторонние модули и плагины на портале Ansible Galaxy.
Знакомство с Концепциями Ansible
Теперь мы рассмотрим терминологию и концепции Ansible, чтобы помочь вам ознакомиться с этими терминами, так как они будут встречаться на протяжении всей этой серии.
Узел управления
Узел управления — это система, на которой установлен и настроен Ansible для подключения к вашему серверу. Вы можете иметь несколько узлов управления, и любая система, способная запускать Ansible, может быть настроена как узел управления, включая персональные компьютеры или ноутбуки под управлением Linux или Unix-подобной операционной системы. В настоящее время Ansible не может быть установлен на хостах Windows, но вы можете обойти это ограничение, настроив виртуальную машину с Linux и запуская Ansible оттуда.
Управляемые узлы
Системы, которыми вы управляете с помощью Ansible, называются управляемыми узлами. Ansible требует, чтобы управляемые узлы были доступны по SSH и имели установленный Python 2 (версия 2.6 или выше) или Python 3 (версия 3.5 или выше).
Ansible поддерживает различные операционные системы, включая серверы Windows в качестве управляемых узлов.
Инвентарь
Файл инвентаря содержит список хостов, которыми вы будете управлять с помощью Ansible. Хотя Ansible обычно создает файл инвентаря по умолчанию при установке, вы можете использовать инвентари на уровне проектов для лучшего разделения вашей инфраструктуры и избежания ошибок при выполнении команд или плейбуков на неправильном сервере. Статические инвентари обычно создаются в виде файлов формата .ini
, но вы также можете использовать динамически генерируемые инвентари, написанные на любом языке программирования, способном возвращать JSON.
Задачи
В Ansible задача представляет собой отдельную единицу работы, выполняемой на управляемом узле. Каждая выполняемая операция определяется как задача. Задачи могут выполняться как единичное действие с помощью ad-hoc команд или включаться в плейбук как часть автоматизированного сценария.
Плейбук
Плейбук содержит упорядоченный список задач и несколько других директив, указывающих, на каких хостах должна выполняться эта автоматизация, использовать ли систему повышения привилегий для выполнения этих задач, а также необязательные разделы для определения переменных или включения файлов. Ansible выполняет задачи последовательно, а полное выполнение плейбука называется плей. Плейбуки пишутся в формате YAML.
Обработчики
Обработчики используются для выполнения действий над сервисом, таких как перезапуск или остановка сервиса, который активно работает в системе управляемого узла. Обработчики обычно запускаются задачами, и их выполнение происходит в конце плейбука, после завершения всех задач. Таким образом, если несколько задач запускают перезапуск сервиса, например, сервис будет перезапущен только один раз и после выполнения всех задач. Хотя поведение обработчиков по умолчанию более эффективно и в целом является лучшей практикой, также возможно принудительное немедленное выполнение обработчиков, если это требуется задачей.
Роли
Роль представляет собой набор плейбуков и связанных файлов, организованных в предопределенную структуру, которая известна Ansible. Роли упрощают повторное использование и переработку плейбуков в совместно используемые пакеты детализированной автоматизации для конкретных целей, таких как установка веб-сервера, установка среды PHP или настройка сервера MySQL.
Заключение
Ansible – это минималистичный инструмент автоматизации IT с плавной кривой обучения, что во многом обусловлено использованием YAML для скриптов подготовки. Он обладает большим количеством встроенных модулей, которые могут абстрагировать такие задачи, как установка пакетов и работа с шаблонами. Его упрощенные требования к инфраструктуре и достубный синтаксис могут быть хорошим выбором для тех, кто только начинает осваивать управление конфигурациями.
В следующей части этой серии мы увидим как установить и начать работу с Ansible на сервере Ubuntu 20.04.