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?
Antworten:
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:
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.quelle
ec2 server create
Messer-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.Sie können knife ssh verwenden , um chef-client auf allen Feldern auszuführen, die eine bestimmte Rolle oder ein bestimmtes Rezept enthalten:
Oder wenn Sie in EC2 sind:
quelle
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'
quelle
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.
quelle
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?
quelle
chef-run
In Chef Workstation gibt es einen neuen Befehl :Es wird installiert,
chef-client
wenn es nicht vorhanden ist, und die angegebene Ressource oder das angegebene Kochbuch wird ausgeführt.Tutorial: https://learn.chef.io/modules/try-chef-infra#/
quelle