Gibt es eine elegantere Möglichkeit, Chef-Client aus der Ferne zu betreiben?

22

Dies ist der Weg, der im Chef Fast Start Tutorial empfohlen wird:

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

Das ist wirklich ungeschickt. Gibt es wirklich keinen besseren Weg oder gibt es die Idee, dass in einer realen Produktionsumgebung Knoten sowieso automatisch aktualisiert werden?

Steve Bennett
quelle
1
Inwiefern halten Sie das für "ungeschickt"?
womble
9
Nun, sag es so. Dies wäre nicht umständlich: "Messer Update Name: mynode". Es ist umständlich, sowohl das Herstellen einer Verbindung zum Client als auch den Namen des Befehls chef client (und die Tatsache, dass er mit Sudo-Berechtigungen ausgeführt werden muss) zu formulieren. Knife ist gut darin, viele andere Unordnung zu beseitigen - warum nicht?
Steve Bennett

Antworten:

11

Das ist so ziemlich der Anfang, aber es muss nur einmal gemacht werden. Bei der ersten Ausführung von chef-client wird der chef-client-Dämon normalerweise als init.d-Dienst aktiviert und gestartet.

Wenn Sie es wirklich eleganter machen möchten, können Sie knife-ssh loswerden und ssh direkt ausführen:

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

Das wird wahrscheinlich schneller sein, da knife-ssh eine Suche gegen den Chef-Server durchführt, um Knoten abzurufen, die dem Suchbegriff entsprechen (in diesem Fall name:dynode), was Sie nicht unbedingt tun müssen, wenn Sie die IP-Adresse bereits kennen.

Tim Potter
quelle
2
Ok, ich denke, das beantwortet die Frage - nein, es gibt keinen besseren Weg. Schade, dass "knife bootstrap" Chef-Client eigentlich auch nicht ausführen kann.
Steve Bennett
Normalerweise starte ich chef-client am Ende meines Bootstrap-Skripts, um dieses spezielle Problem zu lösen. Wenn Sie knife-ssh jedoch nicht mögen, werden Sie wahrscheinlich denken, dass die Einbauten von knife-bootstrap ebenso unhandlich sind. Es gibt ein Beispielskript auf Github.
Tim Potter
1
Das ec2 server createMesser-Plugin läuft nur Bootstrap gefolgt von SSH + Chef-Client. Wenn Sie sich also besser fühlen, haben die Autoren des Küchenchefs nichts besonders Klügeres herausgefunden.
kgilpin
Wenn Chef-Client einige Zeit zum Laufen braucht, bekommen Sie eine Auszeit. :( ssh: Verbindung zum Host xx.xx.xx.xx Port 22: Zeitüberschreitung der Verbindung
gdanko
Für den Fall, dass chef-client nach dem Bootstrap als Daemon ausgeführt wird und unabhängig vom eingestellten Intervall: ssh ubuntu @ ipadddress -i mycredentials.pem -f -n "sudo killall -USR1 chef -Klient". Fork ssh, um dies gleichzeitig mit einer Liste von Knoten zu tun.
Andrew S
12

Sie können knife ssh verwenden , um chef-client auf allen Feldern auszuführen, die eine bestimmte Rolle oder ein bestimmtes Rezept enthalten:

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

Oder wenn Sie in EC2 sind:

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

Sie könnten ansible verwenden, um chef-client zu implementieren und auszuführen.

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

ansible wird einfach mit pip installiert:

pip install ansible

Ihre Inventardatei (im Beispiel "hosts") könnte folgendermaßen aussehen:

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

(Beachten Sie, dass "all" der Name der Gruppierung in der Konfigurationsdatei für unser Beispiel ist. Dies ist beliebig und kann beliebig sein. Ihre Inventardatei kann auch andere Gruppierungen enthalten, z. B. [web_wervers], [database_servers], [chef_servers]. , etc.)

Also noch einmal, alles zusammen:

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

oder vielleicht:

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

Greg Jones
quelle
1
Ich sehe was du hier tust ...;)
Spechal
0

Ich verwende Jenkins CI, um die Läufe zu verwalten. Der Linux-Server ist als Workstation eingerichtet und auf dem Jenkins installiert ist. So kann ich die Knoten mit geänderter run_list bootstrappen. Der Bootstrapping-Prozess läuft ohnehin am Ende auf chef-client.

Für die Ad-hoc-Ausführung führt der Jenkins-Job Messerbefehle aus, um die run_list für einen Knoten zu ändern und das SSH-Plugin zu verwenden, um chef-client auf dem gewünschten Knoten auszuführen.

Anil Wavde
quelle
0

Es ist schade, dass wir ssh underline verwenden müssen, um einen Befehl an den Chef-Client zu senden.

Anscheinend hat zwar jeder Chef-Client eine sichere Verbindung zum Chef-Server hergestellt, aber der Chef-Server stellt über diese sichere Verbindung keinen Befehls-Multiplexer zur Verfügung. Warum?

osexp2003
quelle
0

chef-runIn Chef Workstation gibt es einen neuen Befehl :

chef-run server_name resource_name

Es wird installiert, chef-clientwenn es nicht vorhanden ist, und die angegebene Ressource oder das angegebene Kochbuch wird ausgeführt.

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

Sekrett
quelle