Поиск по сайту:

Введение в управление конфигурациями


Введение

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

Автоматизация играет важную роль в управлении конфигурацией сервера. Это механизм, используемый для достижения сервером желаемого состояния, предварительно заданного с помощью сценариев подготовки с использованием определенного языка и функций инструмента. Автоматизация, по сути, является основой управления конфигурацией серверов, поэтому инструменты управления конфигурацией также часто называют Инструменты автоматизации или Инструменты автоматизации ИТ.

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

На рынке доступен ряд инструментов управления конфигурацией. Популярны Puppet, Ansible, Chef и Salt. Хотя каждый инструмент будет иметь свои собственные характеристики и работать немного по-разному, все они преследуют одну и ту же цель: убедиться, что состояние системы соответствует состоянию, описанному вашими сценариями подготовки.

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

Хотя использование управления конфигурацией обычно требует больше начального планирования и усилий, чем ручное системное администрирование, все серверные инфраструктуры, кроме самых простых, будут улучшены за счет преимуществ, которые оно предоставляет. Назвать несколько:

Быстрое предоставление новых серверов

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

Быстрое восстановление после критических событий

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

Нет больше серверов Snowflake

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

Контроль версий для серверной среды

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

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

Реплицированные среды

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

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

Несмотря на то, что каждый инструмент CM имеет свои собственные термины, философию и экосистему, они обычно имеют много общих характеристик и схожие концепции.

Большинство инструментов управления конфигурацией используют модели контроллер/мастер и узел/агент. По сути, контроллер управляет конфигурацией узлов на основе ряда инструкций или задач, определенных в ваших сценариях подготовки.

Ниже вы можете найти наиболее распространенные функции, присутствующие в большинстве инструментов управления конфигурацией для серверов:

Платформа автоматизации

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

Идемпотентное поведение

Инструменты управления конфигурацией отслеживают состояние ресурсов, чтобы избежать повторения задач, которые выполнялись ранее. Если пакет уже был установлен, инструмент не будет пытаться установить его снова. Цель состоит в том, чтобы после каждого запуска подготовки система достигала (или сохраняла) желаемое состояние, даже если вы запускаете ее несколько раз. Именно это характеризует эти инструменты как имеющие идемпотентное поведение. Однако такое поведение не обязательно применяется во всех случаях.

Факты о системе

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

Система шаблонов

Большинство инструментов CM предоставляют встроенную систему шаблонов, которую можно использовать для облегчения настройки файлов конфигурации и служб. Шаблоны обычно поддерживают переменные, циклы и условные операторы, которые можно использовать для максимальной универсальности. Например, вы можете использовать шаблон, чтобы легко настроить новый виртуальный хост в Apache, повторно используя один и тот же шаблон для нескольких установок сервера. Вместо жестко заданных статических значений шаблон должен содержать заполнители для значений, которые могут меняться от узла к узлу, например NameServer и DocumentRoot.

Расширяемость

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

Сторонние модули и плагины часто легко найти в Интернете, особенно для стандартных настроек сервера, таких как установка веб-сервера PHP. Инструменты CM, как правило, имеют сильное сообщество, построенное вокруг них, и пользователям предлагается делиться своими пользовательскими расширениями. Использование расширений, предоставленных другими пользователями, может сэкономить вам много времени, а также послужит отличным способом узнать, как другие пользователи решали распространенные проблемы с помощью выбранного вами инструмента.

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

На рынке доступно множество инструментов CM, каждый из которых имеет различный набор функций и разный уровень сложности. Популярные варианты включают Chef, Ansible и Puppet. Первая задача — выбрать инструмент, который подходит для ваших нужд.

Прежде чем сделать выбор, нужно учесть несколько моментов:

Инфраструктура Сложность

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

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

Кривая обучения

Как упоминалось ранее в этой статье, инструменты CM предоставляют настраиваемый синтаксис, иногда с использованием предметно-ориентированного языка (DSL), и набор функций, которые составляют их структуру для автоматизации. Как и в случае с обычными языками программирования, для освоения некоторых инструментов потребуется более высокая кривая обучения. Требования к инфраструктуре также могут повлиять на сложность инструмента и на то, как быстро вы сможете увидеть возврат инвестиций.

Расходы

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

Расширенный инструментарий

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

Сообщество и поддержка

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

Обзор популярных инструментов

В приведенной ниже таблице дается краткий обзор основных различий между тремя наиболее популярными инструментами управления конфигурацией, доступными сегодня на рынке: Ansible, Puppet и Chef.

Ansible Puppet Chef
Script Language YAML Custom DSL based on Ruby Ruby
Infrastructure Controller machine applies configuration on nodes via SSH Puppet Master synchronizes configuration on Puppet Nodes Chef Workstations push configuration to Chef Server, from which the Chef Nodes will be updated
Requires specialized software for nodes No Yes Yes
Provides centralized point of control No. Any computer can be a controller Yes, via Puppet Master Yes, via Chef Server
Script Terminology Playbook / Roles Manifests / Modules Recipes / Cookbooks
Task Execution Order Sequential Non-Sequential Sequential

Следующие шаги

До сих пор мы видели, как работает управление конфигурацией для серверов и что следует учитывать при выборе инструмента для построения инфраструктуры управления конфигурацией. В последующих руководствах этой серии мы познакомимся с тремя популярными инструментами управления конфигурацией: Ansible, Puppet и Chef.

Чтобы дать вам возможность самостоятельно сравнить эти инструменты, мы собираемся использовать простой пример настройки сервера, который должен быть полностью автоматизирован каждым инструментом. Эта установка состоит из сервера Ubuntu 18.04 с Apache для размещения простой веб-страницы.

Заключение

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