Есть ли более элегантный способ удаленного запуска chef-клиента?

22

Этот способ рекомендуется в руководстве по быстрому старту Chef:

knife ssh name:mynode -a ipaddress  -x ubuntu -i mycredentials.pem "sudo chef-client"

Это действительно неуклюже. Неужели нет лучшего способа или идея в том, что в реальной производственной среде вы все равно будете автоматически обновлять узлы?

Стив Беннетт
источник
1
Как вы думаете, что это "неуклюжий"?
womble
9
Ну, так сказать. Это не было бы неуклюже: «Название обновления ножа: mynode». Неуместно указывать, как подключаться к клиенту, а также имя команды клиента chef (плюс тот факт, что она должна выполняться с разрешениями sudo). Нож хорошо умеет абстрагироваться от множества других беспорядков - почему бы и нет?
Стив Беннетт

Ответы:

11

Это было бы в значительной степени то, с чего вы начали, но это нужно сделать только один раз. Первоначальный запуск chef-client обычно включает и запускает демон chef-client в качестве службы init.d.

Если вы действительно хотите сделать это более элегантно, вы можете отказаться от ssh и запустить ssh напрямую:

ssh ubuntu@ipadddress -i mycredentials.pem sudo chef-client

это, вероятно, будет быстрее, так как knife-ssh выполняет поиск на сервере Chef для извлечения узлов, соответствующих поисковому запросу (в данном случае name:dynode), что вам не нужно делать строго, если вы уже знаете IP-адрес.

Тим Поттер
источник
2
Хорошо, я думаю, что это отвечает на вопрос - нет, лучшего способа нет. Жаль, что «ножевой бутстрап» не может на самом деле запустить шеф-клиента.
Стив Беннетт
Обычно я запускаю chef-client в конце скрипта начальной загрузки, чтобы решить эту проблему. Однако, если вам не нравится нож-ssh, вы, вероятно, будете думать, что внутренности ножа-бутстрапа одинаково неуклюжи. На github есть пример скрипта .
Тим Поттер
1
ec2 server createНож плагина просто запускает Bootstrap следует SSH + шеф-клиент. Так что, если вам от этого станет легче, авторы шеф-повара не нашли ничего более умного.
kgilpin
Если для запуска chef-клиента требуется время, вы получаете тайм-аут. :( ssh: подключиться к хосту xx.xx.xx.xx порт 22: истекло время
ожидания
В случае, когда chef-client запускается как демон после начальной загрузки, и независимо от установленного интервала, НАИБОЛЕЕ ЭЛЕГАНТНЫЙ СПОСОБ ПРИЗЫВАТЬ ЕГО: ssh ubuntu @ ipadddress -i mycredentials.pem -f -n "sudo killall -USR1 chef -client». Форк ssh, чтобы сделать это одновременно со списком узлов.
Андрей С.
12

Вы можете использовать нож ssh для запуска chef-client на всех коробках, которые содержат определенную роль или рецепт:

knife ssh "role:web" "sudo chef-client" -x ubuntu --sudo 

Или если вы в EC2:

knife ssh "role:web" "sudo chef-client" -x ubuntu -a ec2.public_hostname 
user157553
источник
2

Вы можете использовать ansible для развертывания и запуска chef-client.

$ ansible -i hosts all -a 'chef-client'

ansible легко устанавливается с помощью pip:

pip install ansible

Ваш файл инвентаря (в примере с именем «hosts») может выглядеть так:

[all] host1.example.com ansible_user=root host2.example.com ansible_user=root host3.example.com ansibel_user=root

(обратите внимание, что «all» - это имя группы в файле конфигурации для нашего примера - это произвольно и может быть чем угодно. Ваш файл инвентаризации может также включать другие группировки, например [web_wervers], [database_servers], [chef_servers] , так далее.)

Итак, еще раз, собрав все вместе:

> ansible -i hosts all -a 'chef-client'

или, может быть:

> ansible -i hosts all -a 'systemctl status'

Грег Джонс
источник
1
Я вижу, что ты здесь делаешь ...;)
Spechal
0

Я использую Jenkins CI для управления трассами. Сервер Linux настроен как рабочая станция и на нем установлен Jenkins. Так что я могу загрузить узлы с измененным run_list. В любом случае процесс начальной загрузки запускает chef-client в конце.

Для выполнения adhoc задание Jenkins выполняет команды ножа, чтобы изменить run_list для узла и использовать плагин SSH для запуска chef-client на нужном узле.

Анил Вавде
источник
0

Жаль, что для отправки команды клиенту chef нам нужно использовать подчеркивание ssh.

Кажется, что хотя каждый клиент Chef настроил безопасное соединение с сервером Chef, но сервер Chef не предоставляет командный мультиплексор по этому безопасному соединению, почему?

osexp2003
источник
0

В chef-runрабочей станции Chef появилась новая команда :

chef-run server_name resource_name

Он будет установлен, chef-clientесли его нет, и запустит указанный вами ресурс или кулинарную книгу.

Учебное пособие: https://learn.chef.io/modules/try-chef-infra#/

sekrett
источник