Обзор Chef
Добро пожаловать в Chef!
Chef — это мощная платформа автоматизации, которая превращает инфраструктуру в код. Независимо от того, работаете ли вы в облаке, на локальном сервере или в гибридной среде, Chef автоматизирует конфигурацию, развертывание и управление инфраструктурой по всей вашей сети любого размера.
На этой схеме показано, как вы разрабатываете, тестируете и развёртываете свой код Chef.
Компоненты Chef
На следующей схеме показаны взаимоотношения между различными элементами Chef, включая узлы, сервер и рабочие станции. Эти элементы работают вместе, чтобы предоставить chef-клиенту информацию и инструкции, необходимые для выполнения его работы. При просмотре остальной части документа используйте значки в таблицах для ссылки на этот рисунок.
Chef состоит из трех основных элементов: сервера, одного (или нескольких) узлов и как минимум одной рабочей станции.
- Сервер Chef служит центральным узлом, доступным для каждого узла в организации. Это гарантирует, что доступны правильные кулинарные книги (и рецепты), применяются правильные политики, объект узла, используемый во время предыдущего запуска chef-клиента, доступен для текущего запуска chef-клиента, и все узлы, которые будут обслуживаться chef-клиентом, зарегистрированы и известны серверу Chef.
- Рабочая станция — это место, где создаются кулинарные книги (и рецепты), кулинарные книги (и рецепты) тестируются, определяются данные политики (например, роли, среды и пакеты данных), данные синхронизируются с chef-репозиторием, и данные загружаются на сервер Chef.
- Каждый узел содержит chef-клиент, который выполняет различные задачи автоматизации инфраструктуры, необходимые для извлечения данных конфигурации с сервера Chef по мере необходимости во время запуска chef-клиента.
В следующих разделах эти элементы (и их различные компоненты) рассматриваются более подробно.
Узлы
Узел — это любое устройство — физическое, виртуальное, облачное, сетевое устройство и т. д. — которое находится под управлением Chef.
Типы узлов, которые может управлять Chef, включают, но не ограничиваются:
| Тип узла | Описание |
|---|---|
|
| Физический узел обычно представляет собой сервер или виртуальную машину, но это может быть любое активное устройство, подключенное к сети, которое способно отправлять, получать и пересылать информацию по каналу связи. Другими словами, физический узел — это любое активное устройство, подключенное к сети, которое может запускать chef-клиент, а также позволить этому chef-клиенту взаимодействовать с сервером Chef. |
|
| Облачный узел размещается в внешней облачной службе, такой как Amazon Web Services (AWS), OpenStack, Rackspace, Google Compute Engine или Microsoft Azure. Для внешних облачных служб доступны плагины для knife. Knife может использовать эти плагины для создания экземпляров в облачных службах. После создания chef-клиент может использоваться для развертывания, конфигурирования и поддержки этих экземпляров. |
|
| Виртуальный узел — это машина, которая работает только как программная реализация, но в остальном ведет себя как физическая машина. |
|
| Сетевой узел — это любое сетевое устройство — коммутатор, маршрутизатор — которое управляется chef-клиентом, например, сетевые устройства Juniper Networks, Arista, Cisco и F5. Используйте Chef для автоматизации общих сетевых конфигураций, таких как физические и логические свойства Ethernet-соединений и VLAN на этих устройствах. |
|
| Контейнеры — это подход к виртуализации, который позволяет одной операционной системе размещать много рабочих конфигураций, где каждой рабочей конфигурации — контейнеру — назначается одна задача, изолированная от всех других задач. Контейнеры популярны как способ управления распределёнными и масштабируемыми приложениями и службами. |
Ключевые компоненты узлов, которые находятся под управлением Chef, включают:
| Компонент | Описание |
|---|---|
|
|
Chef-клиент — это агент, который работает локально на каждом узле, находящемся под управлением Chef. При запуске chef-клиента он выполнит все необходимые шаги для приведения узла в ожидаемое состояние, включая:
Для аутентификации chef-клиента на сервере Chef каждый раз, когда chef-клиенту нужен доступ к данным, хранящимся на сервере Chef, используются пары открытых и закрытых ключей RSA. Это предотвращает доступ любого узла к данным, к которым он не должен иметь доступ, и гарантирует, что управлять могут только узлы, должным образом зарегистрированные на сервере Chef. |
|
|
Ohai — это инструмент, который используется для обнаружения атрибутов на узле, а затем предоставляет эти атрибуты chef-клиенту в начале каждого запуска chef-клиента. Ohai необходим chef-клиенту и должен присутствовать на узле. (Ohai устанавливается на узле в процессе установки chef-клиента.) Типы атрибутов, которые собирает Ohai, включают (но не ограничиваются):
Атрибуты, которые собираются Ohai, являются автоматическими атрибутами, так как эти атрибуты используются chef-клиентом для обеспечения того, чтобы эти атрибуты оставались неизменными после завершения конфигурирования узла chef-клиентом. |
Рабочие станции
Рабочая станция — это компьютер, настроенный для запуска различных инструментов командной строки Chef, синхронизирующихся с chef-репозиторием, создания кулинарных книг, взаимодействия с сервером Chef и взаимодействия с узлами.
Рабочая станция — это место, где большинство пользователей выполняют большую часть своей работы, включая:
- Разработка кулинарных книг и рецептов (и их создание с использованием синтаксиса и шаблонов Ruby)
- Поддержание синхронизации chef-репозитория с системой управления версиями
- Использование инструментов командной строки
- Настройка политики организации, включая определение ролей и сред, и обеспечение того, что критические данные хранятся в пакетах данных
- Взаимодействие с узлами по мере необходимости, например, выполнение операции загрузки
Некоторые важные компоненты рабочих станций включают:
| Компонент | Описание |
|---|---|
|
| Chef включает инструмент командной строки knife для взаимодействия с узлами или работы с объектами на сервере Chef |
|
|
Chef-репозиторий — это структура репозитория, в которой создаются, тестируются и поддерживаются кулинарные книги:
Структура каталогов в chef-репозитории различается. Некоторые организации предпочитают хранить все свои кулинарные книги в одном chef-репозитории, а другие предпочитают использовать chef-репозиторий для каждой кулинарной книги. |
Системные администраторы и разработчики лучше всего знают, как должна быть построена их инфраструктура. Поэтому chef-клиент принимает как можно меньше решений самостоятельно. Когда необходимо принять решение, chef-клиент использует разумное значение по умолчанию, которое может быть легко изменено системными администраторами и разработчиками, чаще всего путём определения атрибутов в кулинарных книгах, которые имеют приоритет над атрибутами по умолчанию, присутствующими на узлах.
Сервер
Сервер Chef служит центром для данных конфигурации. Сервер Chef хранит кулинарные книги, политики, применяемые к узлам, и метаданные, описывающие каждый зарегистрированный узел, управляемый chef-клиентом. Узлы используют chef-клиент для запроса у сервера Chef подробностей конфигурации, таких как рецепты, шаблоны и распределение файлов. Затем chef-клиент выполняет как можно больше работы по конфигурации на самих узлах (а не на сервере Chef). Этот масштабируемый подход распределяет усилия по конфигурации по всей организации.
Существует три типа серверов:
| Сервер | Описание |
|---|---|
| Enterprise Chef | Enterprise Chef эволюционировал из-за потребности клиентов в высокомасштабируемом сервере с такой же функциональностью, как у размещенного Enterprise Chef, но расположенного локально и управляемого за брандмауэром. |
| Hosted Enterprise Chef | Размещенный сервер Chef — это версия сервера Chef, размещенная компанией Chef. Размещенный сервер Chef — это облачный, масштабируемый и доступный (24x7/365) сервер с контролем доступа на основе ресурсов. Размещенный сервер Chef обладает теми же возможностями автоматизации, что и любой сервер Chef, но без необходимости его настройки и управления за брандмауэром. |
| Open Source Chef | Сервер Open Source Chef — это бесплатная версия сервера Chef. Каждый экземпляр сервера Open Source Chef должен быть настроен и на локальном уровне, включая миграции данных, применение обновлений и обеспечение адекватного масштабирования локальной инфраструктуры. Сервер Open Source Chef поддерживается сообществом. Поддержка от Chef является дополнительной. |
Клиент API — это любое устройство, имеющее разрешение на использование API сервера Chef для связи с сервером Chef. Клиент API обычно является узлом (на котором запущен chef-клиент) или рабочей станцией (на которой запущен knife), но также может быть любым другим устройством, настроенным для использования API сервера Chef.
Помимо объектов узлов, политики и кулинарных книг, сервер Chef включает:
| Функция | Описание |
|---|---|
|
| Индексы поиска позволяют выполнять запросы к любому типу данных, индексируемому сервером Chef, включая пакеты данных (и элементы пакетов данных), среды, узлы и роли. Для поддержки шаблонов поиска, таких как точное, с подстановкой, диапазон и приблизительное совпадение, используется определенный синтаксис запроса. Поиск — это полнотекстовый запрос, который можно выполнить из нескольких мест, включая рецепт, используя подкоманду search в knife, метод search в DSL рецептов, поле поиска в консоли управления Chef и используя конечные точки /search или /search/INDEX в API сервера Chef. Двигатель поиска основан на Apache Solr и работает на сервере Chef. |
|
|
Консоль управления Chef — это веб-интерфейс для сервера Chef, предоставляющий пользователям способ управления следующими объектами:
|
Объекты узлов
Для chef-клиента две важные составляющие узлов — это группы атрибутов и списки выполнения. Атрибут — это конкретная информация об узле, например сетевой интерфейс, файловая система, количество клиентов, которые может обслуживать запущенная на узле служба, и так далее. Список выполнения — это упорядоченный список рецептов и/или ролей, которые выполняются в строго определенном порядке. Объект узла состоит из списка выполнения и атрибутов узла, которые представляют собой файл JSON, хранящийся на сервере Chef. Chef-клиент получает копию объекта узла с сервера Chef во время каждого запуска chef-клиента и размещает обновленную копию на сервере Chef в конце каждого запуска chef-клиента.
Некоторые важные объекты узлов включают:
| Функция | Описание |
|---|---|
|
|
Атрибут — это конкретная деталь об узле. Атрибуты используются chef-клиентом для понимания:
Атрибуты определяются:
Во время каждого запуска chef-клиента, chef-клиент строит список атрибутов, используя:
После перестроения объекта узла все атрибуты сравниваются, а затем узел обновляется на основе приоритета атрибутов. В конце каждого запуска chef-клиента объект узла, определяющий текущее состояние узла, загружается на сервер Chef, чтобы его можно было проиндексировать для поиска. |
|
|
Список выполнения определяет всю информацию, необходимую Chef для настройки узла в нужном состоянии. Список выполнения:
|
Политика
Политика отображает бизнес- и операционные требования, процессы и рабочие потоки на настройки и объекты, хранящиеся на сервере Chef:
- Роли определяют типы серверов, такие как «веб-сервер» или «сервер базы данных»
- Среды определяют процессы, такие как «разработка», «предоставление» или «производство»
- Некоторые типы данных — пароли, данные учетных записей пользователей и другие конфиденциальные данные — могут храниться в пакетах данных, которые расположены в защищенной подплощадке на сервере Chef, доступ к которой могут иметь только узлы, авторизованные на сервере Chef с правильными сертификатами SSL
- Кулинарные книги (и версии кулинарных книг), в которых хранятся политики конфигурации организации
Некоторые важные аспекты политики включают:
| Функция | Описание |
|---|---|
|
| Роль — это способ определения определенных шаблонов и процессов, которые существуют на узлах в организации и относятся к одной функциональной обязанности. Каждая роль состоит из нуля (или более) атрибутов и списка выполнения. Каждый узел может иметь ноль (или более) назначенных ролей. При запуске роли на узле параметры конфигурации этого узла сравниваются с атрибутами роли, а затем содержимое списка выполнения этой роли применяется к параметрам конфигурации узла. При запуске chef-клиента он объединяет собственные атрибуты и списки выполнения с атрибутами и списками выполнения каждой назначенной роли. |
|
| Пакет данных — это глобальная переменная, хранящаяся как данные JSON и доступная с сервера Chef. Пакет данных индексируется для поиска и может загружаться рецептом или использоваться при поиске. |
|
| Среда — это способ сопоставить реальный рабочий процесс организации с тем, что можно настроить и управлять при использовании сервера Chef. Каждая организация начинается с одной среды, называемой _default средой, которую нельзя изменить (или удалить). Для отражения шаблонов и рабочих процессов каждой организации можно создать дополнительные среды. Например, создание production, staging, testing, и development сред. Как правило, среда также связана с одной (или несколькими) версиями кулинарных книг. |
Кулинарные книги
Кулинарная книга — это базовая единица конфигурации и распределения политики. Кулинарная книга определяет сценарий и содержит все необходимое для поддержки этого сценария:
- Рецепты, которые указывают ресурсы, которые нужно использовать, и порядок их применения
- Значения атрибутов
- Распределения файлов
- Шаблоны
- Расширения Chef, такие как библиотеки, определения и пользовательские ресурсы
Chef-клиент использует Ruby в качестве языка-справочника для создания кулинарных книг и определения рецептов, с расширенным DSL для конкретных ресурсов. Для chef-клиента доступен разумный набор ресурсов, достаточный для поддержки многих распространенных сценариев автоматизации инфраструктуры; однако этот DSL также можно расширить при необходимости дополнительных ресурсов и возможностей.
Кулинарные книги состоят из следующих компонентов:
| Компонент | Описание |
|---|---|
|
| Атрибут можно определить в кулинарной книге (или рецепте) и затем использовать для переопределения стандартных настроек узла. При загрузке кулинарной книги во время выполнения chef-клиента, эти атрибуты сравниваются с атрибутами, которые уже присутствуют на узле. Атрибуты, определенные в файлах атрибутов, сначала загружаются в соответствии с порядком кулинарных книг. Для каждой кулинарной книги атрибуты в файле default.rb загружаются первыми, а затем дополнительные файлы атрибутов (если они присутствуют) загружаются в лексикографическом порядке. Когда атрибуты кулинарной книги имеют приоритет над стандартными атрибутами, chef-клиент применит эти новые настройки и значения во время выполнения chef-клиента на узле. |
|
|
Определение — это код, который повторно используется в рецептах, аналогично макросу времени компиляции. Определение создается с использованием произвольного кода, обернутого вокруг встроенных ресурсов chef-клиента — file, execute, template и так далее — объявляя эти ресурсы в определении, как если бы они были объявлены в рецепте. Затем определение используется в одном (или нескольких) рецептах, как если бы оно было ресурсом. Хотя определение ведет себя как ресурс, существуют некоторые ключевые отличия. Определение:
Используйте определение, когда повторяющиеся шаблоны существуют в ресурсах и/или когда желателен простой, прямой подход. Нет ограничений на количество ресурсов, которые могут быть включены в определение: используйте столько встроенных ресурсов chef-клиента, сколько необходимо. |
|
| Используйте ресурс cookbook_file для передачи файлов из подкаталога COOKBOOK_NAME/files/ в указанный путь на хосте, на котором выполняется chef-клиент. Файл выбирается в соответствии со специфичностью файла, что позволяет использовать разные исходные файлы в зависимости от имени хоста, платформы хоста (операционной системы, дистрибутива или соответствующим образом) или версии платформы. Файлы, которые находятся в подкаталоге COOKBOOK_NAME/files/default , могут использоваться на любой платформе. |
|
| Библиотека позволяет включить произвольный Ruby-код в кулинарную книгу, либо как способ расширения встроенных классов chef-клиента — Chef::Recipe, например — или для реализации совершенно новых функций, аналогично миксину в Ruby. Файл библиотеки — это Ruby-файл, который находится в каталоге /libraries кулинарной книги. Поскольку библиотека создается с использованием Ruby, всё, что можно сделать с Ruby, можно сделать в файле библиотеки. |
|
| Каждая кулинарная книга требует небольшого количества метаданных. Файл с именем metadata.rb находится в верхней части каждой структуры каталога кулинарной книги. Содержимое файла metadata.rb предоставляет подсказки для сервера Chef, чтобы гарантировать, что кулинарные книги развертываются на каждом узле правильно. |
|
|
Рецепт — это самый базовый элемент конфигурации в организации. Рецепт:
Chef-клиент будет запускать рецепт только по запросу. Когда chef-клиент запускает тот же рецепт более одного раза, результаты каждый раз будут одинаковым состоянием системы. Когда рецепт запускается на системе, но ничего не изменилось ни на системе, ни в рецепте, chef-клиент ничего не изменит. DSL рецепта — это Ruby DSL, который в основном используется для объявления ресурсов внутри рецепта. DSL рецепта также помогает гарантировать, что рецепты взаимодействуют с узлами (и свойствами узлов) желаемым образом. Большинство методов в DSL рецепта используются для поиска определённого параметра и затем сообщают chef-клиенту о действиях, которые необходимо предпринять, в зависимости от того, присутствует ли этот параметр на узле. |
|
|
Ресурс — это утверждение политики конфигурации, которое:
Где ресурс представляет собой часть системы (и её желаемое состояние), поставщик определяет шаги, необходимые для перевода этой части системы из её текущего состояния в желаемое состояние. Chef имеет множество встроенных ресурсов, которые охватывают все наиболее распространённые действия на всех наиболее распространённых платформах. Вы можете создать собственные ресурсы для обработки любой ситуации, которая не покрывается встроенным ресурсом. |
|
| Шаблон кулинарной книги — это шаблон встроенного Ruby (ERB), используемый для динамической генерации статических текстовых файлов. Шаблоны могут содержать выражения и операторы Ruby и являются отличным способом управления конфигурационными файлами. Используйте ресурс template для добавления шаблонов кулинарной книги в рецепты; поместите соответствующий файл шаблона встроенного Ruby (ERB) в каталог /templates кулинарной книги. |
|
| Тестирование кулинарных книг улучшает качество этих кулинарных книг, гарантируя, что они делают то, что должны, и что они написаны последовательно. Тестирование единиц и интеграции проверяет рецепты в кулинарных книгах. Синтаксическое тестирование (часто называемое линтингом) проверяет качество самого кода. Следующие инструменты являются популярными инструментами для тестирования рецептов Chef: Kitchen, ChefSpec и Foodcritic. |
Заключение
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-archive.chef.io/release/11-18/chef_overview.html