Анализ настроек Chef
Средства управления конфигурациями обеспечивают развертывание последовательного и предсказуемого кода и конфигураций с сервера централизованного управления на множестве клиентских компьютеров. Chef является одним из самых популярных инструментов управления конфигурациями. Он основан на Ruby. Chef обрабатывает конфигурации и код и упаковывает компоненты в так называемые «рецепты».
Chef предоставляет быстрый способ развёртывания полноценных окружений, а не отдельных приложений. При создании необходимого окружения, как правило, приходится тратить много времени на загрузку программного обеспечения и редактирование его настроек. Chef позволяет автоматизировать этот процесс.
Данное руководство представляет общий обзор Chef: как Chef систематизирует файлы, какие инструменты и системы он использует, и т.п.
Примечание: Для работы нужно предварительно установить Chef 12.
Терминология Chef
Рассмотрим подробнее компоненты, из которых состоит Chef.
Управление инфраструктурой
Для начала следует ознакомиться с различными моделями, которые составляют стратегию развертывания.
В процессе развёртывания система Chef определяет роли для каждой машины и ресурса.
- Сервер Chef – это ведущий сервер, на котором хранятся «рецепты» конфигураций, кукбуки, а также определения нод и рабочих станций. Настройки всех остальных машин зависят от этого сервера.
- Ноды – это целевые машины (физические или виртуальные) для развёртывания конфигураций Chef. Каждая нода является отдельным окружением. Для взаимодействия с сервером Chef нодам необходимо клиентское приложение Chef.
- Рабочая станция (workstation) – это рабочее место администратора, где создаются и редактируются конфигурации. Затем конфигурационные файлы передаются на сервер Chef, после чего они доступны для развёртывания на нодах.
Настройка Chef позволяет иметь несколько рабочих станций и нод. Ноды можно настроить, как только у них появится подключение к сети и к серверу.
Одна машина может одновременно выполнять все эти роли или несколько из них.
Сервер Chef
Сервер является центральным, ведущим компонентом, на котором хранятся конфигурации для клиентов Chef. По сути это большой репозиторий или БД. Сервер управляет соединениями и правами доступа нод и рабочих станций, а также и систематизирует данные и подготавливает их к загрузке на клиенты. Для управления конфигурациями сервер может использовать веб-интерфейс.
Ноды Chef
Как говорилось ранее, ноды могут быть физическими или виртуальными машинами. Единственным требованием является обязательный доступ к сети и к серверу Chef. Конечно, пользователь также должен иметь возможность загружать и устанавливать программное обеспечение.
Каждая нода взаимодействует с ведущим сервером при помощи приложения chef-client. Оно обрабатывает загруженные данные и выполняет настройку ноды. Программа chef-client и сервер chef взаимодействуют на основе ключей RSA.
Клиентская программа Chef использует инструмент ohai для сбора статистики о ноде. Эти данные используются для подготовки конфигураций и установки переменных.
Рабочие станции Chef
Рабочая станция предоставляет инструменты, необходимые для создания и редактирования сведений о конфигурации для любой из доступных нод, и может обмениваться данными с сервером Chef.
Важным инструментом для управления Chef с помощью консоли является инструмент knife. Он действует как шлюз, при помощи которого можно настроить все, что будет храниться на сервере. Он может управлять нодами и конфигурациями, а также предоставить доступ к серверу. SSH-подключения являются нетипичными для Chef.
Настройки и определения, созданные или отредактированные из консоли, находятся под контролем версий. Перед отправкой данных на сервер нужно отправить сообщение о коммите.
Репозиторий Chef называется chef-repo.
Структура файлов chef-repo
Chef обрабатывает конфигурации и информацию о зависимостях на рабочей станции в рамках заданной структуры каталогов. Важно понять эту иерархию для того, чтобы эффективно создавать рецепты и загружать обновления.
Как говорилось ранее, файлы сервера хранятся под контролем версий в каталоге chef-repo (это обычный каталог, хранящий файлы chef).
В этом каталоге находится такая структура:
- certificates/: содержит SSL-сертификаты, которые могут использовать клиенты для авторизации.
- chefignore: содержит список файлов и папок в пределах структуры, которые не нужно загружать на сервер.
- config/: содержит один-два конфигурационных файла репозитория.
- rake.rb: определяет некоторые переменные для создания SSL-сертификатов и некоторых базовых опций.
- cookbooks/: хранит кукбуки (книги «рецептов») инфраструктуры.
- data_bags/: содержит различные data bags для конфигураций. Data bags – это защищённые подкаталоги, хранящие конфиденциальные данные. Доступ к ним есть только у нод с SSL-сертификатами и поддержкой JSON.
- environments/: содержит местоположение верхнего уровня для хранения данных для развертывания окружения. Каждое окружение, которое отличается от стандартного окружения, нужно добавить в этот каталог.
- Rakefile: этот файл определяет задачи, которые может выполнять chef в своих конфигурациях.
- roles/: хранит файлы, определяющие роли для нод.
Структура кукбуков
В каталоге cookbooks находятся подкаталоги, определяющие кукбуки для приложений. В каталоге конфигураций каждого отдельного приложения существует структура, которая определяет способ установки данного сервиса и настройки, которые нужно изменить.
В приложении можно найти файлы, которые определяют, как должны быть установлены и настроены приложения.
Файлы metadata.rb или metadata.json содержат метаданные о сервисе. Такой файл включает в себя базовую информацию (имя и версия кукбука) и данные о зависимостях. Если кукбук зависит от других кукбуков, которые нужно установить, их можно перечислить в этом файле и chef установит и соответствующим образом настроит их.
Каталог attributes содержит определения атрибутов, которые могут быть использованы для переопределения или настройки параметров нод, использующих этот сервис.
Каталог definitions содержит файлы, которые описывают ресурсы. Это значит, что функции можно сгруппировать под одним заголовком.
Каталог files описывает, как chef распространяет файлы по всем нодам, на которых развернут этот кукбук.
Каталог recipes содержит «рецепты», которые определяют конфигурацию сервиса. «Рецепты» – это, как правило, небольшие файлы, которые отвечают за настройку определённых аспектов больших систем. Если, к примеру, кукбук используется для установки и настройки веб-сервера, то «рецепт» может включить модуль или задать разумную конфигурацию брандмауэра.
Каталог templates отвечает за управление более сложными настройками. Здесь можно хранить целые конфигурационные файлы со встроенными командами Ruby. Переменные можно определить в других файлах.
Заключение
Теперь вы знакомы с базовыми понятиями системы управления конфигурациями Chef и знаете особенности работы каждого компонента.
Tags: Chef, Chef 12, Ruby