Spec-Zone.ru › Chef 12

Обзор 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
  • Ohai
  • chef-zero
  • Инструменты тестирования, такие как Kitchen, ChefSpec и Foodcritic
  • Политика, включая файлы политики
  • Предоставление ресурсов Chef
  • Все остальное, необходимое для создания кулинарий и их загрузки на сервер Chef

Chef включает два важных инструмента командной строки:

  • Используйте инструмент командной строки chef для работы с элементами в chef-repo, который является основным местом создания, тестирования и поддержки кулинарий, а также местом загрузки политики на сервер Chef
  • Используйте инструмент командной строки knife для взаимодействия с узлами или работой с объектами на сервере Chef

chef-repo — это структура репозитория, в которой создаются, тестируются и поддерживаются кулинарии:

  • Кулинарии содержат рецепты, атрибуты, пользовательские ресурсы, библиотеки, определения, файлы, шаблоны, тесты и метаданные
  • chef-repo должен быть синхронизирован с системой управления версиями (такой как git), а затем управляться как исходный код

Структура каталогов внутри chef-repo варьируется. Некоторые организации предпочитают хранить все свои кулинарии в одном chef-repo, в то время как другие предпочитают использовать chef-repo для каждой кулинарии.

Используйте Kitchen для автоматического тестирования данных кулинарии на любой комбинации платформ и наборов тестов:

  • Определяется в файле .kitchen.yml
  • Использует архитектуру плагинов драйвера
  • Поддерживает тестирование кулинарий на многих облачных провайдерах и виртуализированных технологиях
  • Поддерживает все распространенные структуры тестирования, используемые сообществом Ruby
  • Использует комплексный набор базовых образов, предоставляемых Bento

Используйте ChefSpec для моделирования сходимости ресурсов на узле:

  • Выполняет chef-клиент на локальной машине
  • Использует chef-zero или chef-solo
  • Является расширением RSpec, фреймворка разработки поведенческих тестов (BDD) для Ruby
  • Является самым быстрым способом тестирования ресурсов и рецептов

Кулинарии

Кулинария — это базовая единица конфигурации и распространения политики. Кулинария определяет сценарий и содержит все необходимое для поддержки этого сценария:

  • Рецепты, которые определяют используемые ресурсы и порядок их применения
  • Значения атрибутов
  • Распространение файлов
  • Шаблоны
  • Расширения 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 для правильного развертывания кулинарных книг на каждом узле.

Рецепт — это самый фундаментальный элемент конфигурации. Рецепт:

  • Написан на языке Ruby, который разработан для предсказуемого чтения и поведения
  • В основном представляет собой набор ресурсов, определённых с использованием шаблонов (имена ресурсов, пары атрибут-значение и действия); вспомогательный код добавляется вокруг этого с использованием Ruby, при необходимости
  • Должен определять всё необходимое для конфигурации части системы
  • Должен храниться в кулинарной книге
  • Может включаться в рецепт
  • Может использовать результаты запроса поиска и читать содержимое хранилища данных (включая зашифрованное хранилище данных)
  • Может зависеть от одного (или нескольких) рецептов
  • Может помечать узел для облегчения создания произвольных групп
  • Должен быть добавлен в список выполнения перед использованием chef-клиентом
  • Всегда выполняется в том же порядке, что и в списке выполнения

Chef-клиент выполнит рецепт только по запросу. При выполнении одного и того же рецепта chef-клиентом более одного раза, результат будет одинаковым состоянием системы каждый раз. Если рецепт выполняется на системе, но ничего не изменилось ни на системе, ни в рецепте, chef-клиент ничего не изменит.

Рецепт DSL — это Ruby DSL, который в основном используется для объявления ресурсов внутри рецепта. Рецепт DSL также помогает гарантировать, что рецепты взаимодействуют с узлами (и свойствами узлов) желаемым образом. Большинство методов в Рецепт DSL используются для поиска определённого параметра и затем сообщают chef-клиенту, какое действие(я) выполнить в зависимости от того, присутствует ли этот параметр на узле.

Ресурс — это утверждение политики конфигурации, которое:

  • Описывает желаемое состояние элемента конфигурации
  • Определяет шаги, необходимые для приведения этого элемента к желаемому состоянию
  • Указывает тип ресурса — такой как package, template, или service
  • Перечисляет дополнительные детали (также известные как свойства ресурса), по мере необходимости
  • Сгруппированы в рецепты, которые описывают рабочие конфигурации

Где ресурс представляет собой часть системы (и её желаемое состояние), поставщик определяет шаги, необходимые для перевода этой части системы из текущего состояния в желаемое.

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-клиента он выполнит все шаги, необходимые для приведения узла в ожидаемое состояние, включая:

  • Регистрация и аутентификация узла с сервером 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
Пакет данных — это глобальная переменная, хранящаяся в формате JSON и доступная с сервера Chef. Пакет данных индексируется для поиска и может загружаться рецептом или использоваться во время поиска.
Политика определяет, как бизнес- и операционные требования, процессы и рабочие процессы производства сопоставляются с объектами, хранящимися на сервере Chef. Объекты политики на сервере Chef включают роли, среды и версии кулинарных книг.

Политика

Политика сопоставляет бизнес- и операционные требования, процессы и рабочий процесс с настройками и объектами, хранящимися на сервере Chef:

  • Роли определяют типы серверов, такие как «веб-сервер» или «сервер базы данных»
  • Окружения определяют процесс, такие как «разработка», «предоставление» или «производство»
  • Некоторые типы данных — пароли, данные учетных записей пользователей и другие конфиденциальные элементы — могут быть помещены в пакеты данных, которые находятся в защищенной подобласти сервера Chef, к которой имеют доступ только узлы, авторизующиеся на сервере Chef с правильными сертификатами SSL
  • Кулинарные книги (и версии кулинарных книг), в которых поддерживаются организационные политики конфигурации

Некоторые важные аспекты политики включают:

Функция Описание
Роль — это способ определения определенных шаблонов и процессов, которые существуют на всех узлах организации как относящиеся к одной должностной функции. Каждая роль состоит из нуля (или более) атрибутов и списка выполнения. Каждый узел может иметь нуль (или более) назначенных ролей. Когда роль выполняется на узле, данные конфигурации этого узла сравниваются с атрибутами роли, а затем содержимое списка выполнения этой роли применяется к данным конфигурации узла. При запуске chef-client он объединяет собственные атрибуты и списки выполнения с атрибутами и списками выполнения каждой назначенной роли.
Окружение — это способ сопоставления реального рабочего процесса организации с тем, что можно настроить и управлять с помощью сервера Chef. Каждая организация начинает с одной среды, называемой средой _default, которую нельзя изменить (или удалить). Дополнительные среды могут быть созданы для отражения шаблонов и рабочего процесса каждой организации. Например, создание production, staging, testing, и development сред. Как правило, среда также связана с одной (или несколькими) версиями кулинарных книг.

Версия кулинарной книги представляет собой набор функций, отличающихся от кулинарной книги, на основе которой она основана. Версия может существовать по многим причинам, таким как обеспечение правильного использования стороннего компонента, исправление ошибки или добавление усовершенствования. Версия кулинарной книги определяется с помощью синтаксиса и операторов, может быть связана со средами, метаданными кулинарной книги и/или списками выполнения и может быть заморожена (чтобы предотвратить нежелательные обновления).

Версия кулинарной книги поддерживается так же, как и кулинарная книга, с точки зрения управления исходным кодом, загрузки ее на сервер Chef и того, как chef-client применяет эту кулинарную книгу при настройке узлов.

Список выполнения определяет всю информацию, необходимую Chef для настройки узла в нужном состоянии. Список выполнения:

  • упорядоченный список ролей и/или рецептов, которые выполняются в строго определенном списке выполнения; если рецепт появляется в списке выполнения более одного раза, chef-client не будет запускать его дважды
  • всегда специфичен для узла, на котором он выполняется; узлы могут иметь список выполнения, идентичный списку выполнения, используемому другими узлами
  • хранится как часть объекта узла на сервере Chef
  • поддерживается с помощью knife и затем загружается с рабочей станции на сервер Chef или поддерживается с помощью консоли управления Chef

Анализ

Платформа Chef Analytics — это функция Chef, которая обеспечивает реальное представление о происходящем на сервере Chef, включая изменения, кто внес эти изменения и когда они произошли. Пользователи могут получать уведомления об этих изменениях в режиме реального времени. Используйте это представление, чтобы проверить соответствие внутренним контролям.

Chef Analytics включает:

Функция Описание
Действия — это изменения политики и административные изменения, внесенные на сервере Chef. Сервер Chef собирает большое количество данных — каждый объект узла, историю выполнения узла для всех узлов, историю каждой кулинарной книги и версии кулинарной книги, как применяются настройки политики, такие как роли, среды и пакеты данных, и к чему они применяются, данные отдельных пользователей и так далее.

Chef Analytics включает мощную систему обработки правил, которая позволяет генерировать уведомления на основе наблюдаемых событий в потоке данных, таких как:

  • загрузка кулинарных книг
  • изменения в средах
  • машины, на которых выполняется chef-client, завершились ошибкой
  • машины, на которых выполняется аудит, завершились ошибкой
  • ресурсы, которые были обновлены в результате выполнения chef-client

Уведомления могут отправляться на любой адрес электронной почты, в службу обмена сообщениями, например, 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API