Управление конфигурацией – это автоматизированный процесс внесения изменений в систему, который обеспечивает целостность конфигураций в кластере. Обычно для этого используются инструменты, которые облегчают автоматизацию и отслеживание.
В контексте серверов и кластеров управление конфигурацией также часто называют IT-автоматизацией или оркестровкой серверов. Оба термина подчеркивают практические аспекты управления конфигурацией и возможность управления несколькими системами с центрального сервера.
В этой статье мы поговорим о преимуществах инструментов управления конфигурацией для автоматизации настройки инфраструктуры вашего сервера и о том, как работает инструмент Ansible.
Преимущества использования инструментов управления конфигурацией
Сегодня в доступе есть несколько инструментов управления конфигурацией с различными уровнями сложности и архитектурными стилями. Хотя каждый из этих инструментов имеет свои индивидуальные характеристики и работает немного иначе, чем другие, все они предоставляют одну и ту же функцию: они гарантируют, что текущее состояние системы соответствует состоянию, описанному набором сценариев оркестровки.
Многие преимущества управления конфигурацией связаны с возможностью определять инфраструктуру как код. Это позволяет вам:
- Использовать систему контроля версий, чтобы отслеживать все изменения в вашей инфраструктуре
- Повторно использовать сценарии оркестровки в нескольких серверных средах (в среде разработки, тестирования и производства).
- Делиться сценариями оркестровки с коллегами, что упрощает совместную работу в стандартизированной среде разработки.
- Оптимизировать процесс репликации серверов, что облегчает восстановление после критических ошибок.
Кроме того, инструменты управления конфигурацией позволяют централизованно управлять сотнями серверов, что может значительно повысить эффективность и целостность вашей серверной инфраструктуры.
Краткий обзор Ansible
Ansible – это современный инструмент управления конфигурацией, который облегчает задачу настройки и обслуживания удаленных серверов благодаря своему простому дизайну.
Сценарии оркестровки Ansible пишутся на YAML, дружественном и удобном стандарте сериализации данных, который не привязан к конкретному языку программирования. Это позволяет пользователям создавать сложные сценарии оркестровки более интуитивно (по сравнению с аналогичными инструментами этой же категории).
Ansible не требует установки специального программного обеспечения на всех нодах кластера. Ansible нужно установить только на главную ноду, которая затем связывается с другими нодами через стандартный SSH.
Как инструмент управления конфигурацией и фреймворк автоматизации, Ansible предоставляет все базовые функции, присутствующие в других инструментах той же категории, фокусируясь при этом на простоте и производительности. В основные функции Ansible включены:
- Идемпотентность. Ansible отслеживает состояние ресурсов в управляемых системах, чтобы избежать повторения задач, которые уже были выполнены ранее. Если пакет уже установлен, Ansible не будет пытаться установить его снова. Цель Ansible состоит в том, чтобы после каждой оркестровки система достигала (или сохраняла) желаемого состояния, даже если вы запускаете этот процесс несколько раз. Это называется идемпотентное поведение, оно присуще всем подобным инструментам. При запуске плейбука вы увидите состояние каждой выполняемой задачи и отчет о том, внесла ли задача изменение в системе.
- Поддержка переменных, условных выражений и циклов. При написании сценариев автоматизации Ansible вы можете использовать переменные, условные выражения и циклы, что позволяет сделать вашу автоматизацию более универсальной и эффективной.
- Системные факты. Ansible собирает подробную информацию об управляемых нодах (включая сетевые интерфейсы и операционную систему) и предоставляет ее в виде глобальных переменных, которые называются системными фактами. Факты можно использовать в плейбуках, чтобы сделать процесс автоматизации более адаптивным: благодаря этому Ansible будет вести себя по-разному в зависимости от системы.
- Система шаблонов. Ansible использует систему шаблонов Jinja2 Python для динамических выражений и доступа к переменным. Шаблоны упрощают настройку конфигурационных файлов и сервисов. Например, вы можете создать шаблон для настройки нового виртуального хоста в Apache и применить его на нескольких серверах.
- Поддержка расширений и модулей. Ansible поставляется с сотнями встроенных модулей, что упрощает написание общих задач (таких как установка пакетов через apt и синхронизация файлов с помощью rsync), а также работу с популярным программным обеспечением, таким как системы баз данных (MySQL, PostgreSQL, MongoDB и другие) и инструменты управления зависимостями (PHP composer, гемы Ruby, npm). Кроме того, 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 – это единица работы, выполняемой на управляемой ноде. Проще говоря, каждое действие определяется как задача. Задачи можно выполнять как одноразовое действие с помощью специальных команд или включать в плейбук как часть сценария автоматизации.
Плейбук – это файл, который содержит упорядоченный список задач и несколько других указаний, которые помогают Ansible понять, какие хосты являются целью этой автоматизации, нужно ли использовать систему повышения привилегий для выполнения этих задач. Также в файле есть дополнительные разделы для определения переменных или включения файлов. Ansible выполняет задачи последовательно, а полное выполнение плейбука называется плей. Плейбуки пишутся в формате YAML.
Обработчики используются для выполнения действий с сервисами (для перезапуска или остановки), которые активно работают в системе управляемой ноды. Обработчики обычно запускаются задачами, и их выполнение происходит в конце плея, после того как все задачи были выполнены. Таким образом, если перезапуск какого-то сервиса инициируется несколькими задачами, то сервис будет перезапущен только один раз и после выполнения всех задач. Стандартное поведение обработчика является более эффективным и в целом более практичным, но при необходимости вы можете принудительно немедленно запустить обработчик, если это требуется для задачи.
Роль – это набор плейбуков и связанных файлов, организованных в предопределенную структуру, известную Ansible. Роли облегчают повторное использование и перепрофилирование плейбуков в общие пакеты автоматизации для конкретных целей, таких как установка веб-сервера, установка среды PHP или настройка сервера MySQL.
Заключение
Ansible – это простой и дружественный инструмент для автоматизации, который легко выучить, отчасти благодаря использованию YAML для сценариев обеспечения. Он имеет большое количество встроенных модулей, которые можно использовать для абстрагирования таких задач, как установка пакетов и работа с шаблонами. Его упрощенные требования к инфраструктуре и доступный синтаксис – отличные условия для тех, кто только начинает знакомиться с управлением конфигурациями.
Читайте также: