Czy istnieje bardziej elegancki sposób zdalnego uruchamiania klienta-szefa kuchni?

22

Jest to sposób zalecany w samouczku Chef Fast Start:

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

To jest naprawdę niezdarne. Czy naprawdę nie ma lepszego sposobu, czy też jest pomysł, że w prawdziwym środowisku produkcyjnym i tak będziesz mieć automatyczną aktualizację węzłów?

Steve Bennett
źródło
1
Jak myślisz, w jaki sposób jest to „niezdarne”?
womble
9
Cóż, ujmuj to w ten sposób. To nie byłoby niezdarne: „nazwa aktualizacji noża: mynode”. Konieczność określenia zarówno sposobu łączenia się z klientem, jak i nazwy polecenia klienta szefa kuchni (oraz faktu, że musi on być uruchamiany z uprawnieniami sudo) jest niezdarna. Nóż dobrze radzi sobie z usuwaniem wielu innych bałaganów - dlaczego nie to?
Steve Bennett

Odpowiedzi:

11

W ten sposób zaczniesz wszystko od samego początku, ale trzeba to zrobić tylko raz. Pierwsze uruchomienie szefa-klienta zwykle włącza i uruchamia demona szefa-klienta jako usługę init.d.

Jeśli naprawdę chcesz to zrobić bardziej elegancko, możesz porzucić nóż-ssh i uruchomić bezpośrednio ssh:

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

prawdopodobnie będzie to szybsze, ponieważ nóż-ssh przeszukuje serwer Chef, aby pobrać węzły pasujące do wyszukiwanego terminu (w tym przypadku name:dynode), czego nie musisz robić, jeśli znasz już adres IP.

Tim Potter
źródło
2
Ok, myślę, że to odpowiada na pytanie - nie, nie ma lepszego sposobu. Szkoda, że ​​„bootstrap noża” nie może tak naprawdę uruchomić klienta-szefa kuchni.
Steve Bennett,
Zwykle uruchamiam szefa kuchni-klienta na końcu skryptu bootstrap, aby rozwiązać ten konkretny problem. Jeśli jednak nie lubisz nóż-ssh, prawdopodobnie pomyślisz, że elementy wewnętrzne noża-bootstrap są równie niewygodne. Na github znajduje się przykładowy skrypt .
Tim Potter
1
ec2 server createNóż wtyczki prostu działa ładowania początkowego następuje przez SSH + Chef-klienta. Więc jeśli to sprawi, że poczujesz się lepiej, autorzy Szefa Kuchni nie odkryli niczego szczególnie mądrzejszego.
kgilpin
Jeśli szef kuchni-klient potrzebuje trochę czasu, masz przerwę. :( ssh: connect to host xx.xx.xx.xx port 22:
Przekroczono limit
W przypadku, gdy kucharz-klient jest uruchamiany jako demon po bootstrapie i niezależnie od ustawionego przedziału czasowego, NAJBARDZIEJ ELEGANCKI SPOSÓB NAWRÓCENIA JEST: ssh ubuntu @ ipadddress -i mycredentials.pem -f -n "sudo killall -USR1 kucharz -klient". Rozwidlaj ssh, aby zrobić to jednocześnie z listą węzłów.
Andrew S
12

Możesz użyć noża ssh do uruchomienia szefa-klienta na wszystkich polach, które zawierają określoną rolę lub przepis:

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

Lub jeśli jesteś w EC2:

knife ssh "role:web" "sudo chef-client" -x ubuntu -a ec2.public_hostname 
użytkownik157553
źródło
2

Możesz użyć ansible do wdrożenia i uruchomienia szefa-klienta.

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

ansible można łatwo zainstalować za pomocą pip:

pip install ansible

Twój plik ekwipunku (w przykładzie o nazwie „gospodarze”) może wyglądać następująco:

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

(zauważ, że „wszystko” to nazwa grupy w pliku konfiguracyjnym dla naszego przykładu - jest to dowolne i może być dowolne. Twój plik inwentarza może również zawierać inne grupy, np. [web_wervers], [database_servers], [chef_servers] itp.)

Więc znowu, wszystko razem:

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

albo może:

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

Greg Jones
źródło
1
Widzę, co tu robisz ...;)
Spechal
0

Używam Jenkins CI do zarządzania biegami. Serwer Linux jest skonfigurowany jako stacja robocza i ma na nim zainstalowany Jenkins. Więc mogę załadować węzły za pomocą zmodyfikowanej listy run_list. W każdym razie proces ładowania uruchamia szefa-klienta na końcu.

W przypadku wykonania adhoc zadanie Jenkins wykonuje polecenia noża, aby zmodyfikować listę run_list dla węzła i użyć wtyczki SSH do wykonania klienta-szefa na żądanym węźle.

Anil Wavde
źródło
0

Szkoda, że ​​aby wysłać polecenie do klienta szefa kuchni, musimy użyć podkreślenia ssh.

Wydaje się, że chociaż każdy klient szefa kuchni ustanowił bezpieczne połączenie z serwerem szefa kuchni, ale serwer szefa kuchni nie udostępnia multipleksera poleceń dla tego bezpiecznego połączenia, dlaczego?

osexp2003
źródło
0

W chef-runChef Workstation pojawiło się nowe polecenie :

chef-run server_name resource_name

Zainstaluje się, chef-clientjeśli nie będzie obecny, i uruchomi określony zasób lub książkę kucharską.

Samouczek: https://learn.chef.io/modules/try-chef-infra#/

sekrett
źródło