Обзор Chef
Добро пожаловать в Chef!
Chef — мощная платформа автоматизации, которая превращает инфраструктуру в код. Независимо от того, работаете ли вы в облаке, на локальном сервере или в гибридной среде, Chef автоматизирует конфигурацию, развертывание и управление инфраструктурой по всей вашей сети любого размера.
На этой схеме показано, как вы разрабатываете, тестируете и развертываете свой код Chef.
Компоненты Chef
На следующей схеме показаны взаимосвязи между различными элементами Chef, включая узлы, сервер, премиум-функции сервера и рабочую станцию. Эти элементы работают вместе, предоставляя chef-клиенту необходимую информацию и инструкции для выполнения его задачи. Во время ознакомления с остальной частью этого раздела используйте значки в таблицах для ссылки на данную схему.
Chef состоит из следующих основных компонентов:
| Компонент | Описание |
|---|---|
|
|
Одна (или несколько) рабочих станций настраиваются для того, чтобы пользователи могли создавать, тестировать и поддерживать кулинарии. Кулинарии загружаются на сервер Chef с рабочей станции. Некоторые кулинарии являются пользовательскими для организации, а другие основаны на кулинариях сообщества, доступных в Chef Supermarket. Язык программирования Ruby используется в качестве синтаксиса для написания кулинарий. Большинство рецептов представляют собой простые шаблоны (блоки, определяющие свойства и значения, которые сопоставляются со специфическими элементами конфигурации, такими как пакеты, файлы, службы, шаблоны и пользователи). Полная функциональность Ruby доступна для случаев, когда требуется язык программирования. Часто рабочая станция настраивается для использования набора инструментов разработки Chef в качестве инструментария разработки. Набор инструментов разработки Chef — это пакет от Chef, который предоставляет необязательный (но рекомендуемый) набор инструментов, включая сам Chef, утилиту командной строки chef, Kitchen, ChefSpec, Berkshelf и многое другое. |
|
|
Узел — это любое устройство — физическое, виртуальное, облачное, сетевое устройство и т. д. — находящееся под управлением Chef. На каждом узле, который находится под управлением Chef, установлен chef-клиент. chef-клиент выполняет все задачи конфигурации, указанные в списке выполнения, и будет загружать необходимые данные конфигурации с сервера Chef по мере необходимости во время выполнения chef-клиента. |
|
|
Сервер Chef служит центром информации. Кулинарии и параметры политики загружаются на сервер Chef пользователями с рабочих станций. (Настройки политики также могут поддерживаться непосредственно с сервера Chef через веб-интерфейс консоли управления Chef.) chef-клиент получает доступ к серверу Chef с узла, на котором он установлен, для получения данных конфигурации, поиска данных исторических запусков chef-клиента и последующей загрузки необходимых данных конфигурации. После завершения выполнения chef-клиента chef-клиент загружает обновленные данные выполнения на сервер Chef в качестве обновленного объекта узла. Консоль управления Chef — это пользовательский интерфейс для сервера Chef. Она используется для управления пакетами данных, атрибутами, списками выполнения, ролями, средами и кулинариями, а также для настройки ролевого доступа для пользователей и групп. |
|
| Chef Supermarket — это место, где создаются и поддерживаются кулинарии сообщества. Кулинарии, являющиеся частью Chef Supermarket, могут использоваться любым пользователем Chef. Способы использования кулинарий сообщества варьируются от организации к организации. |
Премиум-функции сервера Chef — консоль управления Chef, Chef Analytics, отчеты о выполнении chef-клиента, конфигурации высокой доступности и репликация сервера Chef — могут быть установлены и настроены для использования с сервером Chef. Каждая из этих премиум-функций легко активируется и может быть запущена в рамках любого развертывания сервера Chef!
В следующих разделах эти элементы (и их различные компоненты) обсуждаются более подробно.
Рабочие станции
Рабочая станция — это компьютер, настроенный для запуска различных инструментов командной строки Chef, которые синхронизируются с chef-repo, создают кулинарии, взаимодействуют с сервером Chef и взаимодействуют с узлами.
Рабочая станция — это место, где большинство пользователей выполняют большую часть своей работы, включая:
- Разработку кулинарий и рецептов (и их создание с использованием синтаксиса и шаблонов Ruby)
- Синхронизацию chef-repo с системой управления версиями
- Использование инструментов командной строки
- Настройка политики организации, включая определение ролей и сред, и обеспечение хранения критически важных данных в пакетах данных
- Взаимодействие с узлами по мере необходимости, например, выполнение операции инициализации
Хотя Chef включает инструменты, такие как набор инструментов разработки Chef, поощряет интеграцию и тестирование модулей, а также определяет рабочий процесс вокруг создания кулинарий и политики, важно отметить, что вы лучше всего знаете, как должна быть построена ваша инфраструктура. Поэтому Chef принимает как можно меньше решений самостоятельно. В тех случаях, когда необходимо принять решение, chef-клиент использует разумное значение по умолчанию, которое можно легко изменить. Хотя Chef рекомендует использовать инструменты, входящие в набор инструментов разработки Chef, ни один из этих инструментов не должен рассматриваться как требование или предварительное условие для успешного использования Chef.
Инструменты
Некоторые важные компоненты рабочих станций включают:
| Компонент | Описание |
|---|---|
|
|
Набор инструментов разработки Chef — это пакет, содержащий все необходимое для начала работы с Chef:
|
|
|
Chef включает два важных инструмента командной строки:
|
|
|
chef-repo — это структура репозитория, в которой создаются, тестируются и поддерживаются кулинарии:
Структура каталогов внутри chef-repo варьируется. Некоторые организации предпочитают хранить все свои кулинарии в одном chef-repo, в то время как другие предпочитают использовать chef-repo для каждой кулинарии. |
|
|
Используйте Kitchen для автоматического тестирования данных кулинарии на любой комбинации платформ и наборов тестов:
|
|
|
Используйте ChefSpec для моделирования сходимости ресурсов на узле:
|
Кулинарии
Кулинария — это базовая единица конфигурации и распространения политики. Кулинария определяет сценарий и содержит все необходимое для поддержки этого сценария:
- Рецепты, которые определяют используемые ресурсы и порядок их применения
- Значения атрибутов
- Распространение файлов
- Шаблоны
- Расширения Chef, такие как библиотеки, определения и пользовательские ресурсы
chef-клиент использует Ruby в качестве языка для создания кулинарий и определения рецептов с расширенным DSL для конкретных ресурсов. Для chef-клиента доступен разумный набор ресурсов, достаточно для поддержки многих распространённых сценариев автоматизации инфраструктуры; однако этот DSL также можно расширить, когда требуются дополнительные ресурсы и возможности.
Компоненты
Кулинарии состоят из следующих компонентов:
| Компонент | Описание |
|---|---|
|
| Атрибут может быть определен в кулинарной книге (или рецепте) и затем использован для переопределения значений по умолчанию на узле. При загрузке кулинарной книги во время выполнения chef-клиента, эти атрибуты сравниваются с уже имеющимися на узле. Атрибуты, определённые в файлах атрибутов, загружаются в первую очередь согласно порядку кулинарных книг. Для каждой кулинарной книги, атрибуты в файле default.rb загружаются первыми, а затем дополнительные файлы атрибутов (если они присутствуют) загружаются в лексикографическом порядке. Когда атрибуты кулинарной книги имеют приоритет над атрибутами по умолчанию, 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 имеет много встроенных ресурсов, которые охватывают все самые распространённые действия на всех наиболее распространённых платформах. Вы можете создать собственные ресурсы для обработки любых ситуаций, не охваченных встроенными ресурсами. |
|
| Шаблон кулинарной книги — это шаблон Embedded Ruby (ERB), используемый для динамической генерации статических текстовых файлов. Шаблоны могут содержать выражения и инструкции Ruby и являются отличным способом управления конфигурационными файлами. Используйте ресурс template для добавления шаблонов кулинарных книг в рецепты; поместите соответствующий файл шаблона Embedded Ruby (ERB) в каталог /templates кулинарной книги. |
|
| Тестирование кулинарных книг повышает качество этих кулинарных книг, гарантируя, что они выполняют свои функции и написаны последовательно. Тестирование модулей и интеграции проверяет рецепты в кулинарных книгах. Синтаксическое тестирование (часто называемое линтингом) проверяет качество самого кода. Следующие инструменты являются популярными инструментами для тестирования рецептов Chef: Kitchen, ChefSpec и Foodcritic. |
Узлы
Узел — это любая машина — физическая, виртуальная, облачная, сетевое устройство и т. д. — которая находится под управлением 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-клиента он выполнит все шаги, необходимые для приведения узла в ожидаемое состояние, включая:
Пары открытых и закрытых ключей RSA используются для аутентификации chef-клиента с сервером Chef каждый раз, когда chef-клиент требует доступа к данным, хранящимся на сервере Chef. Это предотвращает доступ любого узла к данным, к которым он не должен иметь доступа, и гарантирует, что управлять могут только узлы, должным образом зарегистрированные на сервере Chef. |
|
|
Ohai — это инструмент, который используется для обнаружения атрибутов на узле и предоставления этих атрибутов chef-клиенту в начале каждого запуска chef-клиента. Ohai необходим для chef-клиента и должен присутствовать на узле. (Ohai устанавливается на узел как часть процесса установки chef-клиента.) Типы атрибутов, которые собирает Ohai, включают (но не ограничиваются):
Атрибуты, которые собираются Ohai, являются автоматическими атрибутами, поскольку эти атрибуты используются chef-клиентом для обеспечения неизменности этих атрибутов после завершения конфигурации узла chef-клиентом. |
Сервер Chef
Сервер Chef служит центром для данных конфигурации. Сервер Chef хранит кулинарные книги, политики, применяемые к узлам, и метаданные, описывающие каждый зарегистрированный узел, управляемый chef-клиентом. Узлы используют chef-клиент для запроса у сервера Chef данных конфигурации, таких как рецепты, шаблоны и распределения файлов. Затем chef-клиент выполняет большую часть работы по конфигурации на самих узлах (а не на сервере Chef). Этот масштабируемый подход распределяет усилия по конфигурации по всей организации.
END_OF_DOCUMENT_MARKER| Функция | Описание |
|---|---|
|
| Индексы поиска позволяют выполнять запросы к любому типу данных, индексированному сервером Chef, включая пакеты данных (и элементы пакетов данных), окружения, узлы и роли. Определенный синтаксис запроса поддерживает шаблоны поиска, такие как точный, с подстановкой символов, диапазон и приблизительный. Поиск — это полнотекстовый запрос, который можно выполнить из нескольких мест, включая рецепт, с помощью подкоманды search в knife, метода search в DSL-языке рецептов, поля поиска в консоли управления Chef и с помощью конечных точек /search или /search/INDEX в API сервера Chef. Поисковый движок основан на Apache Solr и работает на сервере Chef. |
|
|
Консоль управления Chef — это веб-интерфейс для сервера Chef, предоставляющий пользователям возможность управления следующими объектами:
|
|
| Пакет данных — это глобальная переменная, хранящаяся в формате JSON и доступная с сервера Chef. Пакет данных индексируется для поиска и может загружаться рецептом или использоваться во время поиска. |
|
| Политика определяет, как бизнес- и операционные требования, процессы и рабочие процессы производства сопоставляются с объектами, хранящимися на сервере Chef. Объекты политики на сервере Chef включают роли, среды и версии кулинарных книг. |
Политика
Политика сопоставляет бизнес- и операционные требования, процессы и рабочий процесс с настройками и объектами, хранящимися на сервере Chef:
- Роли определяют типы серверов, такие как «веб-сервер» или «сервер базы данных»
- Окружения определяют процесс, такие как «разработка», «предоставление» или «производство»
- Некоторые типы данных — пароли, данные учетных записей пользователей и другие конфиденциальные элементы — могут быть помещены в пакеты данных, которые находятся в защищенной подобласти сервера Chef, к которой имеют доступ только узлы, авторизующиеся на сервере Chef с правильными сертификатами SSL
- Кулинарные книги (и версии кулинарных книг), в которых поддерживаются организационные политики конфигурации
Некоторые важные аспекты политики включают:
| Функция | Описание |
|---|---|
|
| Роль — это способ определения определенных шаблонов и процессов, которые существуют на всех узлах организации как относящиеся к одной должностной функции. Каждая роль состоит из нуля (или более) атрибутов и списка выполнения. Каждый узел может иметь нуль (или более) назначенных ролей. Когда роль выполняется на узле, данные конфигурации этого узла сравниваются с атрибутами роли, а затем содержимое списка выполнения этой роли применяется к данным конфигурации узла. При запуске chef-client он объединяет собственные атрибуты и списки выполнения с атрибутами и списками выполнения каждой назначенной роли. |
|
| Окружение — это способ сопоставления реального рабочего процесса организации с тем, что можно настроить и управлять с помощью сервера Chef. Каждая организация начинает с одной среды, называемой средой _default, которую нельзя изменить (или удалить). Дополнительные среды могут быть созданы для отражения шаблонов и рабочего процесса каждой организации. Например, создание production, staging, testing, и development сред. Как правило, среда также связана с одной (или несколькими) версиями кулинарных книг. |
|
|
Версия кулинарной книги представляет собой набор функций, отличающихся от кулинарной книги, на основе которой она основана. Версия может существовать по многим причинам, таким как обеспечение правильного использования стороннего компонента, исправление ошибки или добавление усовершенствования. Версия кулинарной книги определяется с помощью синтаксиса и операторов, может быть связана со средами, метаданными кулинарной книги и/или списками выполнения и может быть заморожена (чтобы предотвратить нежелательные обновления). Версия кулинарной книги поддерживается так же, как и кулинарная книга, с точки зрения управления исходным кодом, загрузки ее на сервер Chef и того, как chef-client применяет эту кулинарную книгу при настройке узлов. |
|
|
Список выполнения определяет всю информацию, необходимую Chef для настройки узла в нужном состоянии. Список выполнения:
|
Анализ
Платформа Chef Analytics — это функция Chef, которая обеспечивает реальное представление о происходящем на сервере Chef, включая изменения, кто внес эти изменения и когда они произошли. Пользователи могут получать уведомления об этих изменениях в режиме реального времени. Используйте это представление, чтобы проверить соответствие внутренним контролям.
Chef Analytics включает:
| Функция | Описание |
|---|---|
|
| Действия — это изменения политики и административные изменения, внесенные на сервере Chef. Сервер Chef собирает большое количество данных — каждый объект узла, историю выполнения узла для всех узлов, историю каждой кулинарной книги и версии кулинарной книги, как применяются настройки политики, такие как роли, среды и пакеты данных, и к чему они применяются, данные отдельных пользователей и так далее. |
|
|
Chef Analytics включает мощную систему обработки правил, которая позволяет генерировать уведомления на основе наблюдаемых событий в потоке данных, таких как:
Уведомления могут отправляться на любой адрес электронной почты, в службу обмена сообщениями, например, HipChat или Slack, или в службу на основе webhook для общих интеграций. |
|
| Отчеты используются для отслеживания того, что произошло во время выполнения chef-client на всей инфраструктуре, которая управляется Chef. Отчеты могут генерироваться для всей организации и для отдельных узлов. |
|
| Контроль — это автоматический тест, встроенный в кулинарную книгу, и затем используется для проверки состояния системы на соответствие. Соответствие может быть разным. Например, обеспечение того, что управление файлами и каталогами соответствует конкретным внутренним политикам ИТ — «Файл существует?», «У правильных пользователей или групп есть доступ к этому каталогу?». Соответствие также может быть сложным, например, для обеспечения соответствия целям, определенным крупномасштабными рамками соответствия, такими как PCI, HIPAA и Sarbanes-Oxley. |
Заключение
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/12-13/chef_overview.html