Как бы вы настроили виртуальную машину, чтобы она автоматически регистрировалась на сервере Chef?
Я знаю что я мог используйте ножевую загрузку, однако это очень утомительно, если вы запускаете сразу несколько десятков серверов.
В документации Chef указано использовать chef-client -j /etc/chef/file.json
и вставьте это в изображение вместе с вашими файлами client.rb и validation.pem. Однако это все еще требует ssh-подключения к машине для запуска chef-client
команда.
Нет более автоматизированного способа сделать это?
Как другие люди предоставляют тысячи машин одновременно?
Обновить
Я связался со службой поддержки Chef, они сказали, что вы можете запустить Chef при загрузке следующими способами.
Добавить /usr/bin/chef-client
в файл /etc/rc.local и убедитесь, что у вас есть файлы client.rb и validatation.pem в / etc / chef
Используйте поваренную книгу chef-client для управления chef и сценария инициализации.
Они также сказали, что шеф-клиент не работает как демон. Вместо этого он запускается только тогда, когда ему нужно выполнить конвергенцию. (Что кажется противоречащим документации.)
Однако эти решения создают новые проблемы. 1. У вас будут запущены дублирующиеся процессы chef-client, если вы добавите их в файл rc.local 2. Вам нужно запустить chef, чтобы управлять chef с помощью поваренной книги chef. Как затем очистить и отменить регистрацию узла, чтобы можно было сделать снимок?
У вас есть много вариантов.
knife ec2 server create
или аналогичные команды для других облаков. Это создаст и загрузит узел одной командой. Обернувшись сценарием, вы можете таким образом сделать любое количество серверов.Независимо от того, какой подход вы выберете, вам необходимо осознавать нагрузку, которая возникнет, если вы не пошатнетесь при создании сервера. Тысячи машин за несколько минут потребуют потрясающего шеф-сервера или, возможно, кластера шеф-серверов.
Что вам в основном нужно:
существующий на машине, которую вы хотите загрузить.
В процессе начальной загрузки вашего компьютера поместите содержимое файла valiadtion.pem, например /etc/chef/validation.pem
. Получите сертификат шеф-сервера и поместите его в /etc/chef/trusted_certs/chef-server.pem
Создать /etc/chef/client.rb
с содержанием вроде
log_level :info log_location STDOUT chef_server_url "https://yourchefserver.example.com" validation_client_name "chef-validator" file_backup_path "/var/lib/chef" file_cache_path "/var/cache/chef" pid_file "/var/run/chef/client.pid"
Если ты бежишь chef-client
прямо сейчас у вас есть узел на шеф-сервере.
Если вы хотите установить базовую кулинарную книгу в качестве списка выполнения, вы можете создать что-то вроде /tmp/base-run_list.json
{ "run_list": ["recipe[my_base_cookbook]"] }
и применить chef-client -j /tmp/base-run_list.json