автоматизированное развертывание с использованием шеф-повара

Я запускаю свое приложение электронной коммерции ruby ​​on rails, работающее на нескольких экземплярах ec2 в производстве. Я не включил автоматическое масштабирование, так как мы делаем непрерывную интеграцию, мы делаем развертывание, когда это необходимо. Я использую шеф-повара по всем причинам. Я пытаюсь понять, как использовать шеф-повар для автоматического развертывания кода на нескольких экземплярах ec2 и ручного вмешательства. Я попытался развернуть код во время начального экземпляра ec2, он работает нормально. Но мой вопрос заключается в том, как мне сделать это в режиме автоматического масштабирования, чтобы экземпляр извлекал последний код либо из github, либо из битового ведра и развертывал себя после обновления пакета и всего остального.


person Jeevan Dongre    schedule 07.10.2013    source источник


Ответы (1)


Справедливо. Это то, что я делаю, и это отлично работает:

Я создал AMI со следующими настройками:

  1. установить клиент шеф-повара< /а>

  2. Создать каталог /etc/chef

  3. Скопируйте your_company-validator.pem с рабочей станции шеф-повара в AMI по адресу /etc/chef/validation.pem.
  4. Создайте /etc/chef/client.rb, как показано ниже.

Если вы используете chef-solo, внесите соответствующие изменения.

cat >> /etc/chef/client.rb <EF
log_level        :auto
log_location     STDOUT
chef_server_url  "https://api.opscode.com/organizations/your_company"
validation_client_name "you_company-validator"
EF

Теперь у вас есть все вышеперечисленное, настроенное в AMI для начальной загрузки шеф-повара.

Когда вы запускаете AMI (используя автомасштабирование или любым другим способом), укажите user-data где в нем будет запускаться шеф-клиент с выбранным вами run_list. Я предоставляю ниже пользовательские данные:

#!/bin/bash
cat > /etc/chef/firstboot.json << EOL
{"run_list": ["recipe[java::oracle]"]}
EOL
chef-client -j /etc/chef/firstboot.json > /tmp/initialize_client.log 2>&1

в основном, я создаю файл .json, в котором я указываю рецепт/роль/run_list, который я хочу запустить. Как только вы предоставите пользовательские данные, они будут выполнены при первой загрузке, и шеф-клиент будет запущен вместе с run_list.

Я думаю, это то, что вы ищете. так что резюмирую:

  1. Создайте AMI с предустановленным chef-client, client.rb and validation.pem
  2. а затем предоставить user-data во время запуска экземпляра.

Это отлично работает для меня. Дайте мне знать, если эта настройка доставит вам какие-либо проблемы. Я использую это в течение достаточно долгого времени.

Поэтому, когда я запускаю свой экземпляр с помощью автомасштабирования, он автоматически загружается шеф-поваром вместе с рецептами по моему выбору.

ПРЕДПОЛОЖЕНИЕ: у вас есть все ваши рецепты/роли, созданные на шеф-сервере до того, как вы это сделаете. иначе начальная загрузка в конечном итоге потерпит неудачу.

person slayedbylucifer    schedule 07.10.2013
comment
Привет, @slayedbylucifer звучит потрясающе!!! скоро попробую и буду держать вас в курсе - person Jeevan Dongre; 07.10.2013
comment
Привет, я попробовал процесс, который вы предложили, но после загрузки экземпляра ec2 он выдает ошибку «Не удалось пройти аутентификацию на сервере шеф-повара» (http 401). Ответ сервера: ---------------- Не удалось пройти аутентификацию как «ip-10-128-94-138.ap-southeast-1.compute.internal». Убедитесь, что имя узла и ключ клиента указаны правильно. Если эти настройки верны, ваш client_key может быть недействительным. Как я должен его отладить и в чем может быть проблема. - person Jeevan Dongre; 08.10.2013
comment
когда шеф-клиент запускается в первый раз, он сам создает client.pem. был ли в вашем образе клиент.pem, оставшийся от любого предыдущего запуска шеф-клиента? Кроме того, скопирован ли ваш ключ validation.pem на узел? - person slayedbylucifer; 08.10.2013
comment
Я не понимаю, зачем создавать AMI с предустановленным шеф-поваром... Команда начальной загрузки ножа установит шеф-повар и автоматически настроит каталог /etc/chef. Еще лучше вы можете использовать плагин ec2 от knife и дополнительно раскрутить виртуальную машину. - person Mark O'Connor; 09.10.2013
comment
@Mark O'Connor, плагин knife bootstrap или knife ec2 не поможет, когда вы запускаете экземпляры с помощью автоматического масштабирования AWS. - person slayedbylucifer; 09.10.2013
comment
@MarkO'Connor Я согласен с slayedbylucier, потому что шеф-повар не покрывает или я не могу решить все проблемы ec2. - person Jeevan Dongre; 09.10.2013
comment
@slayedbylucifer Ааа, теперь я понимаю, что ты делаешь. - person Mark O'Connor; 10.10.2013