Esiste un modo più elegante per gestire da remoto lo chef-client?


22

Questo è il modo raccomandato nel tutorial Chef Fast Start:

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

Questo è davvero maldestro. Non esiste davvero un modo migliore o l'idea che in un ambiente di produzione reale si disporrà comunque dell'aggiornamento automatico dei nodi?


1
In che modo pensi che sia "maldestro"?
Womble

9
Bene, mettiamola così. Questo non sarebbe goffo: "nome aggiornamento coltello: mynode". Dover precisare sia come connettersi al client, sia il nome del comando client chef (oltre al fatto che deve essere eseguito con le autorizzazioni sudo) è goffo. Knife fa bene a sottrarre un sacco di altro casino - perché non questo?
Steve Bennett,

Risposte:


11

Sarebbe praticamente come iniziare, ma deve essere fatto solo una volta. L'esecuzione iniziale di chef-client in genere abilita e avvia il demone chef-client come servizio init.d.

Se volessi davvero farlo in modo più elegante, potresti abbandonare il coltello-ssh ed eseguire direttamente ssh:

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

probabilmente sarà più veloce, poiché knife-ssh esegue una ricerca sul server Chef per recuperare i nodi che corrispondono al termine di ricerca (in questo caso name:dynode), cosa che non è strettamente necessario se si conosce già l'indirizzo IP.


2
Ok, suppongo che risponda alla domanda - no, non esiste un modo migliore. Peccato che "bootstrap coltello" in realtà non può anche eseguire chef-client.
Steve Bennett,

Di solito eseguo chef-client alla fine del mio script bootstrap per risolvere quel particolare problema. Tuttavia, se non ti piace il coltello-ssh, probabilmente penserai che gli interni del coltello-stivale siano ugualmente sgraziati. C'è uno script di esempio su github.
Tim Potter,

1
Il ec2 server createplugin coltello esegue solo bootstrap seguito da SSH + chef-client. Quindi, se ti fa sentire meglio, gli autori dello Chef non hanno capito nulla di più intelligente.
kgilpin,

Se lo chef-client impiega un po 'di tempo per eseguire, si ottiene un timeout. :( ssh: connettiti all'host xx.xx.xx.xx porta 22: timeout della connessione
gdanko

Nel caso in cui chef-client venga eseguito come demone dopo bootstrap e indipendentemente dall'intervallo impostato, IL MODO PIÙ ELEGANTE PER INVOCARLO È: ssh ubuntu @ ipadddress -i mycredentials.pem -f -n "sudo killall -USR1 chef -cliente". Fork ssh per farlo contemporaneamente a un elenco di nodi.
Andrew S,

12

Puoi usare il coltello ssh per eseguire lo chef-client su tutte le scatole che contengono un determinato ruolo o ricetta:

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

O se sei in EC2:

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

2

È possibile utilizzare ansible per distribuire ed eseguire chef-client.

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

ansible si installa facilmente con pip:

pip install ansible

Il tuo file di inventario (nell'esempio, denominato "host") potrebbe apparire così:

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

(notare che "all" è il nome del raggruppamento nel file di configurazione per il nostro esempio: questo è arbitrario e può essere qualsiasi cosa. Il file di inventario può includere anche altri raggruppamenti, ad esempio [web_wervers], [database_servers], [chef_servers] , eccetera.)

Quindi, ancora una volta, mettendo tutto insieme:

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

o forse:

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


1
Vedo cosa ci fai qui ...;)
Spechal

0

Uso Jenkins CI per gestire le piste. Il server Linux è configurato come workstation e su cui è installato Jenkins. Quindi posso avviare i nodi con run_list modificato. Il processo di bootstrap, comunque, esegue lo chef-client alla fine.

Per l'esecuzione ad hoc, il lavoro Jenkins esegue i comandi di coltello per modificare run_list per un nodo e utilizzare il plugin SSH per eseguire chef-client sul nodo desiderato.


0

È un peccato che per inviare un comando al client dello chef dobbiamo usare ssh sottolineato.

Sembra che sebbene ogni client chef abbia impostato una connessione sicura con chef server, ma chef server non fornisca un multiplexer di comando su quella connessione protetta, perché?


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.