Создание узлов на лету для крупномасштабных развертываний с использованием Chef
Согласно моему пониманию узлы должны быть созданы на сервере Chef ДО запуска клиентов chef. В моем случае узлы автоматически масштабируются, и я не могу заранее создать узлы на сервере. Я также не хочу запускать команды ножа на узлах. Есть ли способ в Chef справиться с такой ситуацией, когда роли определены на сервере Chef, а узлы - нет?
Я видел метод first-boot.json, но он недостаточно хорошо документирован, и информации о нем очень мало, что заставляет меня задуматься, не является ли это нестандартным подходом.
2 ответа
Это не нестандартный подход, это метод, используемый начальной загрузкой ножа для определения списка запуска для самого первого запуска chef-клиента на загружаемом хосте.
Таким образом, в основном в процессе обеспечения вы устанавливаете chef, даете ему ключ проверки и first-boot.json, который содержит его runlist.
Цитирование документации здесь
first-boot.json генерируется с рабочей станции как часть начальной команды начальной загрузки ножа.
Я бы сказал, лучший способ, если использовать knife bootstrap -r <runlist>
на тестовой машине и проверить первый файл boot.json, созданный для создания своего собственного после этого.
пример исходного JSON здесь (внизу документа)
На самом деле верно обратное: создание узловых объектов вручную часто является ошибкой и не очень хорошо поддерживается. Самый простой способ выполнить автоматическое масштабирование с помощью Chef - это испечь chef-client, client.rb и ваш ключ проверки в образе виртуальной машины. Затем создайте сценарий для запуска chef-client, когда виртуальная машина начнет регистрировать себя на сервере Chef.
Для этого я использую шаблон упаковщика и скрипт cloud-init.