Обзор Chef Infra
Chef Infra — это мощная платформа автоматизации, которая превращает инфраструктуру в код. Независимо от того, работаете ли вы в облаке, на локальных серверах или в гибридной среде, Chef Infra автоматизирует конфигурацию, развертывание и управление инфраструктурой по всей вашей сети любого размера.
На этой схеме показано, как вы разрабатываете, тестируете и развертываете свой код Chef Infra.
- Рабочая станция Chef — это место, где пользователи взаимодействуют с Chef Infra. С помощью рабочей станции Chef пользователи могут создавать и тестировать кулинарные книги с помощью таких инструментов, как Test Kitchen, и взаимодействовать с сервером Chef Infra с помощью командных инструментов knife и chef.
- Узлы клиента Chef Infra — это машины, которые управляются Chef Infra. Клиент Chef Infra устанавливается на каждом узле и используется для конфигурации узла в соответствии с требуемым состоянием.
- Сервер Chef Infra выполняет роль центрального хранилища данных конфигурации. Сервер Chef Infra хранит кулинарные книги, политики, применяемые к узлам, и метаданные, описывающие каждый зарегистрированный узел, который управляется. Узлы используют клиента Chef Infra для запроса у сервера Chef Infra данных конфигурации, таких как рецепты, шаблоны и распределение файлов.
Компоненты Chef Infra
На следующей схеме показаны взаимосвязи между различными элементами Chef Infra, включая узлы, сервер и рабочую станцию. Эти элементы взаимодействуют, чтобы предоставить клиенту Chef Infra необходимую информацию и инструкции для выполнения его задач. При просмотре остальной части этого раздела используйте значки в таблицах для ссылки на этот рисунок.
Chef Infra имеет следующие основные компоненты:
| Компонент | Описание |
|---|---|
|
Одна (или несколько) рабочих станций настроена для того, чтобы пользователи могли создавать, тестировать и поддерживать кулинарные книги. Системы рабочих станций работают с пакетом Chef Workstation, который включает инструменты, такие как Chef Infra Client, Chef InSpec, Test Kitchen, ChefSpec, Cookstyle и другие инструменты, необходимые для разработки и тестирования вашей инфраструктуры с продуктами Chef. |
|
Кулинарные книги загружаются на сервер Chef Infra с этих рабочих станций. Некоторые кулинарные книги являются пользовательскими для организации, а другие основаны на общедоступных кулинарных книгах, доступных из Chef Supermarket. |
|
Язык программирования Ruby — это синтаксис авторизации для кулинарных книг. Большинство рецептов представляют собой простые шаблоны (блоки, которые определяют свойства и значения, которые отображаются на определенные элементы конфигурации, такие как пакеты, файлы, службы, шаблоны и пользователи. Для сложных задач доступна вся мощь языка Ruby.) |
|
| Узел — это любое устройство (физическое, виртуальное, облачное, сетевое устройство и т. д.), которое находится под управлением Chef Infra. | |
Клиент Chef Infra устанавливается на каждом узле, который управляется с помощью Chef Infra. Клиент Chef Infra локально настраивает узел, выполняя задачи, указанные в списке запуска. Клиент Chef Infra также загружает необходимые данные конфигурации с сервера Chef Infra во время работы клиента. |
|
|
Сервер Chef Infra выполняет роль центра информации. Кулинарные книги и настройки политики загружаются пользователями с рабочих станций на сервер Chef Infra. (Настройки политики также могут храниться на самом сервере Chef Infra через веб-интерфейс консоли управления Chef.) Клиент Chef Infra обращается к серверу Chef Infra с узла, на котором он установлен, чтобы получить данные конфигурации, выполняет поиск данных по историческим работам клиента Chef Infra и затем загружает необходимые данные конфигурации. После завершения работы клиента Chef Infra клиент загружает обновленные данные работы на сервер Chef Infra. |
|
| Chef Supermarket — это место, в котором обмениваются и управляют общедоступными кулинарными книгами. Любой пользователь Chef может использовать кулинарные книги, которые являются частью Chef Supermarket. Способы использования общедоступных кулинарных книг различаются в зависимости от организации. |
Отчеты о работе клиента Chef Infra, отчеты о соответствии, конфигурации высокой доступности и репликация сервера Chef Infra доступны в составе Chef Automate.
В следующих разделах эти элементы (и их различные компоненты) рассматриваются более подробно.
Рабочие станции
Рабочая станция — это ваш локальный компьютер с установленным Chef Workstation, который вы используете для создания кулинарных книг, взаимодействия с сервером Chef Infra и взаимодействия с узлами.
На рабочей станции пользователи выполняют большую часть работы, включая:
- Разработку и тестирование кулинарных книг
- Синхронизацию репозитория Chef Infra с системой управления версиями
- Конфигурацию организации, включая определение и применение файлов или групп политики
- Взаимодействие с узлами при необходимости, например, выполнение операции загрузки
Компоненты и инструменты рабочей станции Chef
Некоторые важные инструменты и компоненты рабочей станции Chef включают:
| Компонент | Описание |
|---|---|
|
Chef Workstation содержит все необходимое для начала работы с Chef Infra и Chef InSpec:
|
|
|
|
Chef Workstation включает важные командные инструменты:
|
|
chef-repo — это структура репозитория, в которой создаются, тестируются и поддерживаются кулинарные книги:
Структура каталогов в chef-repo различается. Некоторые организации предпочитают хранить все свои кулинарные книги в одном chef-repo, в то время как другие предпочитают использовать chef-repo для каждой кулинарной книги. |
|
|
Используйте Test Kitchen, чтобы автоматически тестировать кулинарные книги на любой комбинации платформ и наборов тестов:
|
|
|
Используйте ChefSpec для моделирования сходимости ресурсов на узле:
|
Кулинарные книги
Кулинарная книга — это базовая единица конфигурации и распространения политики. Кулинарная книга определяет сценарий и содержит все необходимое для поддержки этого сценария:
- Рецепты, которые указывают используемые ресурсы и порядок их применения
- Значения атрибутов
- Распределение файлов
- Шаблоны
- Расширения Chef, такие как пользовательские ресурсы и библиотеки
Клиент Chef Infra использует Ruby в качестве языка для создания кулинарных книг и определения рецептов, с расширенным DSL для определенных ресурсов. Доступен разумный набор ресурсов для клиента Chef Infra, достаточно для поддержки многих распространенных сценариев автоматизации инфраструктуры; однако этот DSL также может быть расширен при необходимости дополнительных ресурсов и возможностей.
Компоненты
Кулинарные книги состоят из следующих компонентов:
| Компонент | Описание |
|---|---|
Атрибут может быть определён в кулинарной книге (или рецепте) и затем использован для переопределения стандартных настроек узла. При загрузке кулинарной книги во время выполнения Chef Infra Client эти атрибуты сравниваются с уже имеющимися на узле атрибутами. Атрибуты, определённые в файлах атрибутов, загружаются в первую очередь в соответствии с порядком кулинарных книг. Для каждой кулинарной книги атрибуты в файле default.rb загружаются в первую очередь, а затем дополнительные файлы атрибутов (если они присутствуют) загружаются в лексикографическом порядке. Когда атрибуты кулинарной книги имеют приоритет над стандартными атрибутами, Chef Infra Client применяет эти новые настройки и значения во время выполнения Chef Infra Client на узле. |
|
Используйте ресурс cookbook_file для передачи файлов из подкаталога COOKBOOK_NAME/files/ в указанный путь на хосте, на котором запущен Chef Infra Client. Файл выбирается в соответствии со спецификой файла, что позволяет использовать разные исходные файлы в зависимости от имени хоста, платформы хоста (операционной системы, дистрибутива или соответствующим образом) или версии платформы. Файлы, расположенные в подкаталоге COOKBOOK_NAME/files/default, могут использоваться на любой платформе. |
|
Библиотека позволяет включать произвольный код Ruby в кулинарную книгу. Наиболее распространённое использование библиотек — это написание вспомогательных функций, которые используются во всех рецептах и пользовательских ресурсах. Файл библиотеки — это файл Ruby, расположенный в каталоге /libraries кулинарной книги. Поскольку библиотека создаётся с использованием Ruby, всё, что можно сделать с Ruby, можно сделать и в файле библиотеки, включая расширенные функции, такие как расширение встроенных классов Chef. |
|
| Каждая кулинарная книга требует небольшого количества метаданных. Файл с именем metadata.rb расположен в верхней части структуры каталога каждой кулинарной книги. Содержимое файла metadata.rb предоставляет информацию, которая помогает Chef Infra Client и Server правильно развернуть кулинарные книги на каждом узле. | |
|
|
Рецепт — это самый фундаментальный элемент конфигурации в организации. Рецепт:
Chef Infra Client запустит рецепт только по запросу. При запуске Chef Infra Client одного и того же рецепта более одного раза, состояние системы будет одинаковым каждый раз. Если рецепт запускается на системе, но ничего не изменилось ни на системе, ни в рецепте, Chef Infra Client ничего не изменит. The Recipe DSL — это Ruby DSL, который в основном используется для объявления ресурсов изнутри рецепта. Recipe DSL также помогает убедиться, что рецепты взаимодействуют с узлами (и свойствами узлов) желаемым образом. Большинство методов в Recipe DSL используются для поиска определённого параметра и затем сообщают Chef Infra Client, какие действия необходимо предпринять, в зависимости от того, присутствует ли этот параметр на узле. |
|
Ресурс — это утверждение о политике конфигурации, которое:
У Chef есть множество встроенных ресурсов, которые охватывают все наиболее распространённые действия на всех наиболее распространённых платформах. Вы можете создать свои собственные ресурсы для обработки любой ситуации, которая не покрывается встроенным ресурсом. |
|
Шаблон кулинарной книги — это шаблон Embedded Ruby (ERB), который используется для динамического генерирования статических текстовых файлов. Шаблоны могут содержать выражения и операторы Ruby и являются отличным способом управления конфигурационными файлами. Используйте ресурс template для добавления шаблонов кулинарной книги в рецепты; поместите соответствующий файл шаблона Embedded Ruby (ERB) в каталог /templates кулинарной книги. |
|
| Тестирование кулинарных книг повышает качество этих кулинарных книг, обеспечивая, что они делают то, что должны делать, и что они написаны последовательно. Тестирование модулей и интеграции проверяет рецепты в кулинарных книгах. Синтаксическое тестирование — часто называемое линтингом — проверяет качество самого кода. Следующие инструменты являются популярными инструментами для тестирования рецептов Chef: Test Kitchen, ChefSpec и Cookstyle. |
Узлы
Узел — это любое устройство — физическое, виртуальное, облачное, сетевое устройство и т. д. — которое находится под управлением Chef Infra.
Типы узлов
Типы узлов, которые могут управляться Chef, включают, но не ограничиваются следующими:
| Тип узла | Описание |
|---|---|
| Физический узел обычно представляет собой сервер или виртуальную машину, но может быть любым активным устройством, подключённым к сети, способным отправлять, принимать и пересылать информацию по каналу связи. Другими словами, физический узел — это любое активное устройство, подключенное к сети, которое может запустить Chef Infra Client и также разрешить этому Chef Infra Client взаимодействовать с Chef Infra Server. | |
| Облачный узел размещён во внешней облачной службе, такой как Amazon Web Services (AWS), OpenStack, Rackspace, Google Compute Engine или Microsoft Azure. Доступны плагины для knife, которые обеспечивают поддержку внешних облачных служб. knife может использовать эти плагины для создания экземпляров в облачных службах. После создания можно использовать Chef Infra Client для развертывания, настройки и обслуживания этих экземпляров. | |
| Виртуальный узел — это машина, которая работает только как программная реализация, но в остальном ведёт себя как физическая машина. | |
| Сетевой узел — это любое сетевое устройство — коммутатор, маршрутизатор — которое управляется Chef Infra Client, например, сетевые устройства Juniper Networks, Arista, Cisco и F5. Используйте Chef для автоматизации распространённых сетевых конфигураций, таких как свойства физических и логических Ethernet-соединений и VLAN на этих устройствах. | |
| Контейнеры — это подход к виртуализации, который позволяет одной операционной системе размещать множество рабочих конфигураций, где каждая рабочая конфигурация — контейнер — получает одну ответственность, изолированную от всех остальных. Контейнеры популярны как способ управления распределёнными и масштабируемыми приложениями и службами. |
Chef на узлах
Ключевые компоненты узлов, которые находятся под управлением Chef:
| Компонент | Описание |
|---|---|
|
Chef Infra Client — это агент, который выполняется локально на каждом узле, находящемся под управлением Chef Infra Server. При запуске Chef Infra Client выполняет все необходимые шаги для приведения узла в ожидаемое состояние, в том числе:
|
|
|
Ohai — это инструмент, используемый для сбора данных о конфигурации системы, которые предоставляются Chef Infra Client для использования в кулинарных книгах. Ohai запускается Chef Infra Client в начале каждого выполнения Chef для определения состояния системы. Ohai включает много встроенных плагинов для обнаружения общих деталей конфигурации, а также модель плагинов для написания пользовательских плагинов. Типы атрибутов, которые собирает Ohai, включают, но не ограничиваются:
Атрибуты, собранные Ohai, являются атрибутами автоматического уровня, так как эти атрибуты используются Chef Infra Client, чтобы гарантировать, что эти атрибуты останутся неизменными после того, как Chef Infra Client закончит настройку узла. |
Сервер Chef Infra
Сервер Chef Infra выступает в качестве центра данных конфигурации. Сервер Chef Infra хранит кулинарные книги, политики, применяемые к узлам, и метаданные, описывающие каждый зарегистрированный узел, который управляется Chef Infra Client. Узлы используют Chef Infra Client, чтобы запросить у сервера Chef Infra информацию о конфигурации, такую как рецепты, шаблоны и распространение файлов. Chef Infra Client затем выполняет как можно больше работы по конфигурации на самих узлах (а не на сервере Chef Infra). Этот масштабируемый подход распределяет работу по конфигурации по всей организации.
| Функция | Описание |
|---|---|
Индексы поиска позволяют выполнять запросы к любому типу данных, индексированных сервером Chef Infra Server, включая пакеты данных (и элементы пакетов данных), среды, узлы и роли. Определённый синтаксис запроса поддерживает шаблоны поиска, такие как точное совпадение, подстановочные знаки, диапазон и приблизительное совпадение. Поиск — это полнотекстовый запрос, который можно выполнить из нескольких мест, включая рецепт, с помощью подкоманды search в knife, метода search в Recipe DSL, поля поиска в консоли управления Chef и с помощью конечных точек /search или /search/INDEX в API Chef Infra Server. Двигатель поиска основан на Elasticsearch и работает на сервере Chef Infra Server. |
|
|
Консоль управления Chef — это веб-интерфейс для сервера Chef Infra Server, предоставляющий пользователям возможность управления следующими объектами:
|
|
| Пакеты данных хранят глобальные переменные в формате JSON. Пакеты данных индексируются для поиска и могут быть загружены кулинарной книгой или обработаны во время поиска. | |
| Политика определяет, как бизнес- и операционные требования, процессы и рабочие потоки производства сопоставляются с объектами, хранящимися на сервере Chef Infra Server. Объекты политики на сервере Chef Infra Server включают роли, среды и версии кулинарных книг. |
Политика
Политика сопоставляет бизнес- и операционные требования, процессы и рабочие потоки с настройками и объектами, хранящимися на сервере Chef Infra Server:
- Роли определяют типы серверов, такие как «веб-сервер» или «сервер базы данных»
- Среды определяют процессы, такие как «dev», «staging» или «production»
- Некоторые типы данных — пароли, данные учетных записей пользователей и другие конфиденциальные данные — могут быть размещены в пакетах данных, которые находятся в защищённой подзоне на сервере Chef Infra Server, доступ к которой имеют только узлы, авторизованные на сервере Chef Infra Server с правильными сертификатами SSL
- Кухни (и версии кулинарных книг), в которых поддерживаются организационные политики конфигурации
Некоторые важные аспекты политики включают:
| Функция | Описание |
|---|---|
| Роль — это способ определения определённых шаблонов и процессов, которые существуют для узлов в организации, как относящиеся к одному функциональному назначению. Каждая роль состоит из нуля (или более) атрибутов и списка запуска. К каждому узлу может быть назначено ноль (или более) ролей. При выполнении роли на узле детали конфигурации этого узла сравниваются с атрибутами роли, а затем содержимое списка запуска этой роли применяется к деталям конфигурации узла. При запуске клиента Chef Infra он объединяет свои собственные атрибуты и списки запуска с теми, которые содержатся в каждой назначенной роли. | |
| Среда — это способ сопоставления реальных рабочих процессов организации с тем, что можно настроить и управлять с помощью Chef Infra. Это сопоставление достигается путём установки атрибутов и привязки кулинарных книг на уровне среды. С помощью сред можно изменять конфигурации кулинарных книг в зависимости от назначения системы. Например, назначив разные среды staging и production, вы можете определить правильный URL сервера базы данных для каждой среды. Среды также позволяют организациям уверенно переносить новые версии кулинарных книг из среды staging в production, последовательно выполняя тестирование релизов в тестовых средах перед переходом в production. | |
|
Версия кулинарной книги представляет собой набор функций, отличающийся от кулинарной книги, на основе которой она создана. Версия может существовать по многим причинам, таким как обеспечение правильного использования стороннего компонента, исправление ошибки или добавление улучшения. Версия кулинарной книги определяется с использованием синтаксиса и операторов, может быть связана со средами, метаданными кулинарных книг и/или списками запуска и может быть заморожена (чтобы предотвратить нежелательные обновления). Версия кулинарной книги поддерживается так же, как и кулинарная книга, в отношении контроля версий, загрузки её на сервер Chef Infra Server и способа, которым клиент Chef Infra Server применяет эту кулинарную книгу при конфигурировании узлов. |
|
|
Список запуска определяет всю необходимую информацию для Chef, чтобы настроить узел в требуемое состояние. Список запуска:
|
Заключение
Chef — это тонкий DSL (язык домен-специфического программирования) на базе Ruby. Этот подход позволяет Chef предоставить достаточную абстракцию, чтобы упростить работу с вашей инфраструктурой. Chef включает встроенную таксономию всех основных ресурсов, которые можно настроить на системе, а также определённый механизм расширения этой таксономии с использованием всех возможностей языка Ruby. Ruby был выбран, потому что он обеспечивает гибкость для использования как простой встроенной таксономии, так и для обработки любых пользовательских путей, необходимых вашей организации.
© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/chef_overview/