Шеф-повар лучшие практики / вопросы

48

Я использую и люблю Puppet. Я перешел в новую компанию, и они усыновляют шеф-повара. Поэтому я пытаюсь выучить шеф-повара, но мне трудно все сложить, потому что я все еще думаю о Puppet =)

Это мои вопросы:

  • Лучше настроить роли в Ruby DSL, JSON или из консоли управления? Почему есть несколько способов сделать то же самое?
  • Можете ли вы организовать кулинарные книги в подкаталогах? Например: у нас есть специальное программное обеспечение, для которого я хотел бы написать кулинарную книгу и вставить его в: chef-repo / cookbooks / ourcompanystuff / customsoftwarecookbook, это будет хорошей практикой?
  • Создаю ли я кулинарную книгу для каждого типа роли, в которой указано, что она делает? Есть ли у меня эти поваренные книги, включая другие поваренные книги (т.е. поваренная книга для моей роли веб-сервера включает поваренную книгу apache). Я не уверен, как обрабатываются взаимозависимости поваренной книги и наследование.
  • Есть ли что-то похожее на внешний классификатор узлов Puppet, чтобы узлы автоматически определяли свои роли?
  • Кажется, что вы можете настроить вещи с ножом или в консоли управления, или редактировать файлы JSON? Меня очень смущает, почему существует так много способов сделать что-то, это парализует! Есть ли причина использовать один или другой? Исходя из марионетки, кажется, что было бы легко случайно что-то неправильно настроить с помощью этих инструментов (т. Е. Что-то упустить)
  • Как я могу автоматически предоставлять узлы с Chef в моем кластере dev? С Puppet я запускаю виртуальную машину, которая подключается к Puppermaster, запускает запуск Puppet и устанавливает себя (роль определяется классификатором внешнего узла). Как мне сделать это с шеф-поваром? Установить chef с файлами pem / rb, которые привязывают его к серверу chef, вручную сообщить узлу его роли ножом или отредактировать его в интерфейсе управления, а затем запустить запуск клиента chef, чтобы настроить себя?

Я закончил учебные пособия по началу работы и вижу, что у них есть учебники по EC2, но я никогда не использовал EC2, поэтому мне трудно им следовать. На данный момент у меня работает Chef, и я начинаю играть с настройкой одного узла. Куда мне идти отсюда? Нужно ли начинать смотреть на общедоступные кулинарные книги?

Документы по Opscode в порядке, но не так хороши, как у Puppet. Есть ли какие-либо другие полезные ресурсы от шеф-повара, которых мне не хватает в моих поисках?

Rizen
источник
5
Слишком много вопросов в одном посте. Рассмотрите возможность разделения каждого на свое. Это лучше для сообщества в целом, а также даст вам более подробные ответы.
Уэсли

Ответы:

84

Редактировать Этот вопрос и ответ лет. Определенные передовые методы преподаются с помощью самостоятельных учебных модулей Learn Chef Rally, разработанных Chef Software, Inc. Основная часть оригинального ответа приведена ниже.

В этом ответе «шеф-повар» или «шеф-клиент» обычно относится к продукту Chef Infra. Opscode переименован в Chef Software, Inc в 2013 году . В апреле 2019 года компания Chef открыла исходный код для всех своих продуктов, а также создала последовательное наименование бренда.

Не ясно, лучше ли настраивать роли в ruby ​​DSL, JSON или из консоли управления? Почему есть несколько способов сделать то же самое?

2019 Обновление : файлы политик - лучший рабочий процесс для использования. Роли считаются устаревшей практикой, и Chef Software, Inc. рекомендует перейти на Policyfiles.

Есть несколько способов сделать одно и то же, потому что у людей разные рабочие процессы. Вы выбираете рабочий процесс, который лучше всего подходит для вашей среды. Позвольте мне объяснить, в чем различия, чтобы вы могли принять обоснованное решение.

Ruby DSL для ролей существует, чтобы упростить написание ролей, не зная синтаксиса JSON. Это простой способ начать работу с ролями. После внесения изменений вы загружаете их на сервер Chef с помощью ножа.

knife role from file myrole.rb

Это преобразует роль в JSON и сохраняет ее на сервере. Если у вас есть среда, которая использует хранилище шеф-поваров, где ваши роли живут как источник правды, это работает довольно хорошо.

JSON - это то, что хранит Chef Server, поэтому вы также можете редактировать JSON непосредственно в консоли управления. Он требует больше полей, чем Ruby DSL, чтобы Knife мог правильно распознать его для загрузки. Эти детали в некоторой степени скрыты через веб-интерфейс.

Недостатком использования консоли webui / management для редактирования ролей является то, что они отсутствуют в вашей локальной системе управления версиями, если вы не загружаете их с сервера. Вы можете сделать это с ножом:

knife role show myrole -Fj

-FjГоворит нож «дисплей в формате JSON.» Вы можете перенаправить вывод в файл .json, если хотите.

Обновление много лет назад : в локальном репозитории chef есть дополнительные команды для работы с файлами. В настоящее время эти команды поддерживают только файлы формата JSON. Открыт RFC для сообщества, который будет заниматься добавлением поддержки Ruby DSL для этих плагинов. Вот краткое резюме рабочего процесса.

Проверьте различия в содержании между сервером и локальным файлом.

knife diff roles/myrole.json

Загрузите файл роли в формате JSON. roles/Путь требуется. Это сопоставляется с той же конечной точкой API на сервере.

knife upload roles/myrole.json

Загрузите содержимое с сервера, перезаписав содержимое файла в хранилище.

knife download roles/myrole.json

Эти команды взяты из knife-essentialsвстроенного в пакет клиента chef.

Можете ли вы организовать кулинарные книги в подкаталогах? Например, у нас есть специальное программное обеспечение, для которого я хотел бы написать кулинарную книгу и вставить его в: chef-repo / cookbooks / ourcompanystuff / customsoftwarecookbook, это будет хорошей практикой?

Нет. Нож рассчитывает, где должны находиться кулинарные книги, потому что он использует API для загрузки кулинарных книг на сервер. Это установлено в knife.rbс cookbook_path. В более старых версиях Chef Infra можно было указывать массив путей к кулинарным книгам, но это устарело, поскольку требовало большего обслуживания и вводило пользователей в заблуждение.

По договоренности мы присваиваем кулинарные книги, относящиеся к конкретному клиенту или сайту, с названием, начинающимся с префикса кулинарной книги. Для вашего примера это будет:

chef-repo/cookbooks/ourcompany_customsoftware

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

Дальнейшая ссылка:

Создаю ли я кулинарную книгу для каждого типа роли, в которой указано, что она делает? Есть ли у меня эти поваренные книги и другие поваренные книги (т.е. поваренная книга для моей роли веб-сервера включает поваренную книгу apache). Я не уверен, как обрабатываются взаимозависимости поваренной книги и наследование.

Нет прямой связи или зависимости между ролями и поваренными книгами.

Роли имеют список выполнения, в котором указаны рецепты и другие роли, которые должны применяться к любому узлу, который имеет эту роль. Узлы имеют список выполнения, который может содержать роли или рецепты. Когда Chef запускается на узле, он расширяет список выполнения для всех ролей и рецептов, которые он включает, а затем загружает необходимые поваренные книги. В списке запуска узла:

recipe[apache2]

Шеф-повар загрузит apache2поваренную книгу для узла, чтобы он мог применить этот рецепт.

У вас может быть кулинарная книга, специально предназначенная для вашей инфраструктуры. Чаще всего у вас есть кулинарные книги, предназначенные для настройки определенных типов сервисов, таких как apache2, mysql, redis, haproxy и т. Д. Затем вы назначаете их в соответствующие роли. Если у вас есть особые вещи, специфичные для приложения, которые должны быть выполнены для выполнения роли, вы можете записать это в специальную кулинарную книгу (как я упоминал выше).

Дальнейшая ссылка:

Есть ли что-то вроде марионеточного классификатора внешних узлов, чтобы узлы автоматически определяли свои роли?

"Да." Chef Infra Server автоматически выполняет хранение данных узла (в формате JSON), и сервер также автоматически индексирует все данные узла для поиска.

Дальнейшая ссылка:

Кажется, что вы можете настроить вещи с ножом или в консоли управления, или редактировать файлы JSON? Меня очень смущает, почему существует так много способов сделать что-то, это парализует! Есть ли причина использовать один или другой?

Chef Infra Server имеет RESTful API, который отправляет и получает ответы JSON. Knife и консоль управления - это пользовательские интерфейсы для взаимодействия с API с точки зрения администрирования.

Вы можете использовать инструмент, который вам больше нравится, хотя в консоли управления не так много функций, как в Knife. Большинство людей, которые используют Chef Infra, предпочитают интерфейс командной строки за мощность и гибкость, которую он обеспечивает, даже те люди, которые используют Chef Infra в Windows. Кроме того, knifeэто инструмент на основе плагинов, который позволяет создавать новые плагины для взаимодействия с Chef Infra Server или с другими частями вашего будущего.

Chef Infra - это набор библиотек, примитивов и API. Это дает вам гибкость в создании системы управления конфигурацией, которая лучше всего подходит для вашей инфраструктуры.

Дальнейшее чтение:

Как я могу автоматически предоставлять узлы с помощью chef в моем кластере dev? С помощью puppet я запускаю виртуальную машину, которая подключается к puppermatser, запускает запуск кукол и устанавливает себя (роль определяется классификатором внешнего узла). Как мне это сделать с шеф-поваром? - Установить chef с файлами pem / rb, которые привязывают его к серверу chef, вручную сообщить узлу его роли ножом или отредактировать его в интерфейсе управления, а затем запустить запуск клиента chef, чтобы настроить себя?

Вы захотите использовать плагин начальной загрузки ножа. Это встроенный плагин, который поставляется с ножом. Вы вызываете это так:

knife bootstrap 10.1.1.112 -x root -i ~/.ssh/root_id_rsa -r 'role[webserver]'

Это будет:

  • SSH к целевой системе (10.1.1.112) как rootпользователь, использующий ключ SSH (вы можете ssh как другой пользователь, а затем использовать --sudo).
  • Установите Ruby
  • Установите шеф-повара
  • Создайте файл конфигурации Chef для вашего сервера Chef, прочитав конфигурацию ножа (.chef / knife.rb).
  • Скопируйте «проверочный» закрытый ключ RSA, который будет использоваться узлом для автоматической регистрации на Chef Server.
  • Запустите, chef-clientиспользуя запятую, указанную в списке. В этом примере webserverприменяется только роль.

Это предполагает, что целевая система подготовлена, имеет IP-адрес и вы можете использовать SSH как root. В зависимости от ваших локальных политик и процесса предоставления вам может потребоваться настроить его работу. Страница начальной загрузки ножа в вики описывает больше, как это работает.

Knife также имеет плагины для ряда провайдеров общедоступных облачных вычислений, таких как Amazon EC2 и Rackspace Cloud. Есть плагины, доступные для частных облачных сред, таких как Eucalyptus и OpenStack. Есть также плагины для VMware, Vsphere и других. Вы можете увидеть дополнительную информацию в документации.

Дальнейшее чтение:

Есть ли какие-либо другие полезные ресурсы шеф-повара, которые я мог бы упустить при поиске?

Chef документации основным источником документации.

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

Я имел обыкновение вести блог, где я публиковал советы, рекомендации и руководства по Chef Infra: http://jtimberman.housepub.org/ . У меня была серия под названием « Быстрые советы ». Из-за реальных обстоятельств и других обязательств у меня больше нет времени на обслуживание сайта, но я могу вернуться к нему в будущем.

Клиенты Chef могут получить помощь и поддержку на сайте поддержки:

Сообщество пользователей Chef является отличным источником дополнительной помощи:

Дополнительные ресурсы доступны на Chef Software, веб - сайт Inc ' .

Надеюсь, это поможет.

jtimberman
источник
2
Это ценный ресурс, пожалуйста, ссылки на него чаще.
Пооян Хосрави
Что-нибудь добавить / обновить 7 лет спустя? ;)
Спешал