Управление конфигурацией

Как управление конфигурацией помогает техническим командам создавать надежные и стабильные системы

Ian Buchanan Ian Buchanan

В 1950-х годах Министерство обороны США разработало техническую управленческую дисциплину для отслеживания изменений при разработке сложных систем. У этой системы и ее итераций были сугубо технические названия, но в 2001 году Министерство опубликовало сводное руководство, в котором закрепило понятие системы технического управления. Сегодня это называется «управление конфигурацией». В настоящее время управление конфигурацией используется не только в министерстве обороны, но и при разработке программного обеспечения, управлении ИТ-услугами, в гражданском строительстве, промышленном машиностроении и многих других отраслях.

Что такое управление конфигурацией?

Схема управления конфигурацией

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

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

Важность управления конфигурацией

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

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

Эти конфигурационные значения могут легко отойти на второй план, что приведет к беспорядку и разрозненности в конфигурации. Представьте себе множество стикеров с паролями и URL-адресами, разлетающихся по всему офису. Управление конфигурацией решает эту проблему благодаря централизованному «достоверному источнику информации» для конфигурации.

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

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

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

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

Как управление конфигурацией вписывается в принципы DevOps, CI/CD и Agile

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

Рост количества облачных инфраструктур привел к разработке и внедрению новых моделей управления инфраструктурой. Развертывание сложных облачных системных архитектур и управление ими выполняется с помощью файлов с конфигурационными данными. Новые облачные платформы позволяют командам указывать необходимые аппаратные ресурсы и сетевые подключения с помощью человеко- и машиночитаемых файлов данных, таких как YAML. Затем эти файлы данных считываются, а инфраструктура становится доступна в облаке. Такая модель называется «инфраструктура как код», или «IaC-обработка».

Управление конфигурацией DevOps

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

Управление конфигурацией — это основной элемент жизненного цикла DevOps. Конфигурация DevOps возникла в результате развития и автоматизации роли системного администратора: она позволяет автоматизировать управление инфраструктурой и ее развертывание.

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

Управление конфигурацией CI/CD

В управлении конфигурацией CI/CD используются рабочие процессы проверки кода на основе запросов pull, которые автоматизируют развертывание изменений кода в действующей системе программного обеспечения. Эти процессы можно применять и к изменениям конфигурации. Принцип CI/CD можно настроить таким образом, чтобы подтвержденные запросы на изменение конфигурации сразу развертывались в работающей системе. В качестве примера такого процесса можно привести рабочий процесс GitOps.

Управление конфигурацией Agile

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

  • Обновление производственных SSL-сертификатов.
  • Добавление новой конечной точки базы данных.
  • Изменение пароля для почтовых служб среды разработки, раздела проиндексированных файлов и рабочей среды.
  • Добавление ключей API для новой интеграции сторонних производителей.

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

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

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

Git

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

Docker

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

Terraform

Terraform — платформа для управления конфигурацией с открытым исходным кодом, созданная компанией HashiCorp. На платформе Terraform подготовка кластеров, облачной инфраструктуры или служб и управление ими выполняется с помощью IaC-обработки. Terraform поддерживает Amazon Web Services (AWS), Microsoft Azure и другие облачные платформы. Каждая облачная платформа имеет собственный способ представления и интерфейс для стандартных компонентов инфраструктуры, таких как серверы, базы данных и очереди. На Terraform создан уровень абстракции инструментов конфигурации для облачных платформ, благодаря чему команды могут писать файлы, которые являются воспроизводимыми определениями их инфраструктуры.

Ansible, SaltStack, Chef и Puppet

Ansible, SaltStack и Chef — это платформы автоматизации ИТ. Они автоматизируют многие стандартные процессы системного администрирования. Каждая платформа использует ряд конфигурационных файлов данных (обычно YAML или XML), которые оцениваются исполняемым файлом.

В конфигурационных файлах данных указана последовательность действий, которые необходимо выполнить для настройки системы. Впоследствии эти действия выполняются исполняемым файлом. Язык исполняемого файла в разных системах различается: Ansible и SaltStack основаны на Python, а Chef — на Ruby. Этот рабочий процесс аналогичен запуску специальных скриптов оболочки, но предлагает более структурированный и усовершенствованный интерфейс через экосистемы соответствующих платформ. Эти инструменты обеспечивают автоматизацию, необходимую для достижения CI/CD.

Как внедрить управление конфигурацией

Обнаружение

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

База

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

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

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

Аудит

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

Заключение

Управление конфигурацией является обязательным инструментом для управления сложными программными системами. Его отсутствие может привести к серьезным проблемам с надежностью, уровнем доступности и масштабированием системы. Многие современные средства разработки программного обеспечения имеют встроенные возможности управления конфигурацией. Решение Bitbucket предлагает мощную систему управления конфигурацией, построенную на основе рабочих процессов с запросами pull в системе Git и конвейеров CI/CD.