Редактировать Этот вопрос и ответ лет. Определенные передовые методы преподаются с помощью самостоятельных учебных модулей 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 ' .
Надеюсь, это поможет.