Обзор 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 Infra имеет следующие основные компоненты:
| Компонент | Описание |
|---|---|
|
Одна (или несколько) рабочих станций настроены для того, чтобы пользователи могли создавать, тестировать и поддерживать кулинарные книги. Системы рабочих станций используют пакет Chef Workstation, который включает инструменты, такие как клиент Chef Infra, 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 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 Workstation предоставляет все необходимое для начала работы с Chef — асинхронное удаленное выполнение, удаленное сканирование, задачи конфигурации, инструменты создания кулинарных книг, а также надежное программное обеспечение для зависимостей и тестирования — все в одном легко устанавливаемом пакете. Chef Workstation включает:
| |
|
|
Chef Workstation включает важные командные инструменты:
|
|
chef-repo — это структура репозитория, в которой создаются, тестируются и поддерживаются кулинарные книги:
Структура каталогов в chef-repo может различаться. Некоторые организации предпочитают хранить все свои кулинарные книги в одном chef-repo, в то время как другие организации предпочитают использовать отдельный chef-repo для каждой кулинарной книги. | |
| Используйте Test Kitchen для автоматического тестирования кулинарных книг на любой комбинации платформ и наборов тестов:
| |
| Используйте ChefSpec для моделирования схождения ресурсов на узле:
|
Кулинарные книги
Кулинарная книга — это базовая единица конфигурации и распространения политики в Chef Infra.
Кулинарная книга определяет сценарий и содержит все необходимое для поддержки этого сценария:
- Рецепты, указывающие, какие встроенные ресурсы Chef Infra использовать и в каком порядке их применять
- Значения атрибутов, которые позволяют выполнять конфигурации, основанные на среде, такие как
devилиprodution. - Пользовательские ресурсы для расширения Chef Infra за пределы встроенных ресурсов.
- Файлы и шаблоны для распространения информации на системы.
- Пользовательские плагины Ohai для расширения сбора конфигурации системы за пределами значений по умолчанию Ohai.
- Файл
metadata.rb, описывающий саму кулинарную книгу и любые зависимости, которые она может иметь.
Клиент 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. | |
| Каждая кулинарная книга требует небольшого набора метаданных. Содержимое файла Файл
| |
| Рецепт — это самый фундаментальный элемент конфигурации внутри системы. Рецепт:
Chef Infra Client выполнит рецепт только по запросу. Когда Chef Infra Client выполняет тот же рецепт более одного раза, результат будет одинаковым состоянием системы каждый раз. Когда рецепт выполняется на системе, но ничего не изменилось ни на системе, ни в рецепте, Chef Infra Client ничего не изменит. Язык Chef Infra — это комплексный язык конфигурации систем с ресурсами и вспомогательными функциями для настройки операционных систем. Этот язык в основном используется в рецептах и пользовательских ресурсах Chef Infra для указания Chef Infra Client, какие действия необходимо предпринять для настройки системы. Язык Chef Infra предоставляет ресурсы для компонентов системы, таких как пакеты, пользователи или брандмауэры, а также включает вспомогательные функции, которые позволяют принимать решения о конфигурации на основе операционных систем, облаков, виртуализационных гипервизоров и т.д. | |
| Ресурс — это утверждение о политике конфигурации, которое:
У 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. | |
| Облачный узел размещается в внешней облачной службе, такой как 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. При выполнении Chef Infra Client выполняет все необходимые шаги для приведения узла в ожидаемое состояние, включая:
| |
| Ohai — это инструмент для сбора данных конфигурации системы, которые затем предоставляются Chef Infra Client для использования в кулинарных книгах. Chef Infra Client запускает Ohai в начале каждого выполнения Chef Infra для определения состояния системы. Атрибуты, собранные Ohai, называются Типы атрибутов, собираемых Ohai, включают, но не ограничиваются:
Ohai включает необходимые и необязательные плагины для обнаружения общей конфигурационной информации. Ohai имеет модель плагинов и язык для написания пользовательских плагинов для сбора дополнительной информации о состоянии системы. |
Сервер Chef Infra
Сервер Chef Infra выступает в качестве центрального хранилища данных конфигурации. Сервер Chef Infra хранит кулинарные книги (cookbooks), политики, применяемые к узлам, и метаданные, описывающие каждый зарегистрированный узел, находящийся под управлением Chef Infra Client. Узлы используют Chef Infra Client для запроса у сервера Chef Infra данных конфигурации, таких как рецепты, шаблоны и распределение файлов. Chef Infra Client выполняет как можно больше работы по конфигурации на самих узлах (а не на сервере Chef Infra). Этот масштабируемый подход распределяет усилия по конфигурации по всей организации.
| Функция | Описание |
|---|---|
Индексы поиска позволяют выполнять запросы к любому типу данных, индексируемому сервером Chef Infra, включая пакеты данных (и элементы пакетов данных), среды, узлы и роли. Для поддержки шаблонов поиска, таких как точное совпадение, подстановочные знаки, диапазон и приблизительное совпадение, используется определённый синтаксис запроса. Поиск — это полнотекстовый запрос, который можно выполнить из нескольких мест, включая рецепт, используя подкоманду search в knife, метод search в языке Chef Infra, поле поиска в консоли управления Chef, а также с помощью конечных точек /search или /search/INDEX в API сервера Chef Infra. Поисковый движок основан на Elasticsearch и работает на сервере Chef Infra. | |
| Консоль управления Chef — это веб-интерфейс для сервера Chef Infra, который предоставляет пользователям возможность управлять следующими объектами:
| |
| Пакеты данных хранят глобальные переменные в формате JSON. Пакеты данных индексируются для поиска и могут загружаться кулинарной книгой или использоваться во время поиска. | |
| Политика определяет, как бизнес- и операционные требования, процессы и рабочие процессы производства сопоставляются с объектами, хранящимися на сервере Chef Infra. Объекты политики на сервере Chef Infra включают роли, среды и версии кулинарных книг. |
Политика
Политика сопоставляет бизнес- и операционные требования, процессы и рабочий процесс с настройками и объектами, хранящимися на сервере Chef Infra:
- Роли определяют типы серверов, такие как «веб-сервер» или «сервер базы данных»
- Среды определяют процесс, такие как «разработка», «предоставление» или «производство»
- Некоторые типы данных — пароли, данные учетных записей пользователей и другие конфиденциальные данные — могут быть размещены в пакетах данных, которые находятся в защищенной подзоне на сервере Chef Infra, доступ к которой имеют только узлы, авторизованные на сервере Chef Infra с правильными сертификатами SSL
- Кулинарные книги (и версии кулинарных книг), в которых хранятся организационные политики конфигурации
Некоторые важные аспекты политики включают:
| Функция | Описание |
|---|---|
| Роль — способ определения определенных шаблонов и процессов, которые существуют во всей организации в качестве принадлежащих к одной функциональной задаче. Каждая роль состоит из нуля (или более) атрибутов и списка выполнения. Каждый узел может иметь нуль (или более) назначенных ролей. При запуске роли на узле данные конфигурации этого узла сравниваются с атрибутами роли, а затем содержимое списка выполнения роли применяется к данным конфигурации узла. При запуске Chef Infra Client он объединяет собственные атрибуты и списки выполнения с атрибутами и списками выполнения, содержащимися в каждой назначенной роли. | |
| Среда — это способ отображения реального рабочего процесса организации в том, что можно настроить и управлять с помощью Chef Infra. Это отображение достигается путем задания атрибутов и привязки кулинарных книг на уровне среды. С помощью сред вы можете изменять конфигурации кулинарных книг в зависимости от назначения системы. Например, определив разные среды предоставления и производства, вы можете определить правильный URL-адрес сервера базы данных для каждой среды. Среды также позволяют организациям уверенно перемещать новые релизы кулинарных книг из среды предоставления в производство, пройдя релизы через тестовые среды перед переходом в производство. | |
| Версия кулинарной книги представляет собой набор функциональности, отличающийся от кулинарной книги, на которой она основана. Версия может существовать по многим причинам, таким как обеспечение правильного использования стороннего компонента, исправление ошибки или добавление улучшения. Версия кулинарной книги определяется с использованием синтаксиса и операторов, может быть связана со средами, метаданными кулинарной книги и/или списками выполнения и может быть заморожена (чтобы предотвратить нежелательные обновления). Версия кулинарной книги поддерживается так же, как и кулинарная книга, с точки зрения контроля версий, загрузки на сервер Chef Infra и того, как Chef Infra Client применяет эту кулинарную книгу при конфигурации узлов. | |
Список выполнения определяет всю необходимую информацию для 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/