Я использую и люблю 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]'
Это будет:
root
пользователь, использующий ключ SSH (вы можете использовать ssh как другой пользователь, а затем использовать --sudo
).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..
Надеюсь, это поможет.