Назад | Перейти на главную страницу

Рекомендации / вопросы от шеф-повара

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

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

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

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

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

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

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

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

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

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

knife role from file myrole.rb

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

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

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

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 / customoftwarecookbook. Было бы это хорошей практикой?

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

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

chef-repo/cookbooks/ourcompany_customsoftware

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

Дополнительная ссылка:

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

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

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

recipe[apache2]

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

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

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, считывая конфигурацию ножа (.chef / knife.rb).
  • Скопируйте «проверочный» закрытый ключ RSA, который узел будет использовать для автоматической регистрации на Chef Server.
  • Бегать chef-client с использованием указанного в списке прогона, разделенного запятыми. В этом примере только webserver роль применяется.

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

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

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

Могу ли я пропустить какие-либо другие ресурсы для хороших поваров?

В Документация для шеф-повара основной источник документации.

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

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

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

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

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

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