Чи є більш елегантний спосіб дистанційно запустити шеф-кухаря-клієнта?


22

Ось такий спосіб рекомендований у підручнику швидкого старту шеф-кухаря:

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

Це справді незграбно. Чи дійсно немає кращого способу, чи ідея, що в реальному виробничому середовищі у вас все-таки будуть вузли автоматично оновлюватися?


1
Яким чином ви вважаєте, що це "незграбно"?
жіноча

9
Ну, покладіть так. Це не було б незграбно: "ім'я оновлення ножа: mynode". Необхідно прописати як підключення до клієнта, так і назву команди клієнта-шеф-кухаря (плюс той факт, що його потрібно виконувати з дозволами sudo) - незграбно. Ніж добре справляється з відстороненням багатьох інших безладів - чому б не це?
Стів Беннетт

Відповіді:


11

З цього ви хочете почати все, але це потрібно зробити лише один раз. Початковий запуск шеф-кухаря-клієнта, як правило, дозволяє та запускає демон-кухар-клієнт як послугу init.d.

Якщо ви дійсно хотіли зробити це більш елегантно, можете зривати нож-сш та запускати ssh безпосередньо:

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

це, мабуть, буде швидше, тому що ніж-ssh здійснює пошук на сервері Chef, щоб отримати вузли, що відповідають пошуковому терміну (у цьому випадку name:dynode), що вам не потрібно строго робити, якщо ви вже знаєте IP-адресу.


2
Гаразд, я думаю, що це відповідає на питання - ні, немає кращого способу. Шкода, що "ножовий завантажувач" не може насправді запустити шеф-кухаря.
Стів Беннетт

Зазвичай я запускаю шеф-кухаря-клієнта наприкінці сценарію завантаження, щоб вирішити цю конкретну проблему. Однак якщо вам не подобається ніж-шш, то ви, напевно, подумаєте, що внутрішні ножі завантажувача однаково непридатні. На прикладі github є приклад сценарію .
Тім Поттер

1
ec2 server createНіж плагіна просто запускає Bootstrap слід SSH + шеф-клієнт. Тож якщо ви відчуєте себе краще, автори шеф-кухарів не зрозуміли нічого розумнішого.
kgilpin

Якщо шеф-кухар-клієнт потребує певного часу, ви отримаєте тайм-аут. :( ssh: підключення до хоста xx.xx.xx.xx порт 22: Час з'єднання вичерпано
gdanko

У тому випадку, коли шеф-клієнт запускається як демон після завантаження, і незалежно від встановленого інтервалу, НАЙБІЛЬШЕ ЕЛЕГАНТНИЙ ШЛЯХ ДО ВПРОВАДЖЕННЯ ЙОГО: ssh ubuntu @ ipadddress -i mycredentials.pem -f -n "sudo killall -USR1 chef -кліент ". Виберіть ssh, щоб зробити це одночасно зі списком вузлів.
Andrew S

12

Ви можете використати ssh ніж для запуску шеф-кухаря-клієнта у всіх полях, які містять певну роль чи рецепт:

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

Або якщо ви перебуваєте в EC2:

knife ssh "role:web" "sudo chef-client" -x ubuntu -a ec2.public_hostname 

2

Ви можете використовувати ansible для розгортання та запуску шеф-кухаря.

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

ansible легко встановлюється за допомогою pip:

pip install ansible

Ваш файл інвентаря (у прикладі з назвою "хости") може виглядати так:

[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
Я бачу, що ви тут робите ...;)
Виступ

0

Я використовую Дженкінс CI для управління пробіжками. Сервер Linux створений як робоча станція і на ньому встановлений Дженкінс. Тому я можу завантажувати вузли зі зміненим списком run_list. Процес завантаження в будь-якому випадку запускає шеф-кухаря-клієнта наприкінці.

Для виконання adhoc завдання Jenkins виконує команди ножа, щоб змінити run_list для вузла і використовувати плагін SSH для виконання шеф-кухаря на потрібному вузлі.


0

Шкода, що для того, щоб відправити команду шеф-кухарю, ми повинні використовувати ssh підкреслення.

Здається, хоча кожен клієнт-шеф-кухар встановив захищене з'єднання з шеф-сервером, але сервер шеф-кухаря не надає мультиплексор команд через захищене з'єднання, чому?


0

В chef-runChef Workstation є нова команда :

chef-run server_name resource_name

Він встановить, chef-clientякщо він не присутній, і запустить вказаний вами ресурс чи кулінарну книгу.

Підручник: https://learn.chef.io/modules/try-chef-infra#/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.