Existe-t-il une manière plus élégante de gérer à distance chef-client?

22

Voici la méthode recommandée dans le didacticiel Chef Fast Start:

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

C'est vraiment maladroit. N'y a-t-il vraiment pas de meilleure façon, ou est-ce l'idée que dans un environnement de production réel, vous aurez quand même des nœuds à mise à jour automatique?

Steve Bennett
la source
1
En quoi pensez-vous que c'est "maladroit"?
womble
9
Eh bien, posez-le de cette façon. Ce ne serait pas maladroit: "nom de mise à jour du couteau: mynode". Devoir expliquer à la fois comment se connecter au client et le nom de la commande client chef (plus le fait qu'elle doit être exécutée avec les autorisations sudo) est maladroit. Le couteau réussit bien à éliminer de nombreux autres dégâts - pourquoi pas cela?
Steve Bennett

Réponses:

11

Ce serait à peu près ainsi que vous commenceriez les choses, mais cela ne doit être fait qu'une seule fois. L'exécution initiale de chef-client active et démarre généralement le démon chef-client en tant que service init.d.

Si vous vouliez vraiment le faire de façon plus élégante, vous pouvez abandonner le couteau-ssh et exécuter directement ssh:

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

cela sera probablement plus rapide, car knife-ssh effectue une recherche sur le serveur Chef pour récupérer les nœuds correspondant au terme de recherche (dans ce cas name:dynode), ce que vous n'avez pas strictement besoin de faire si vous connaissez déjà l'adresse IP.

Tim Potter
la source
2
Ok, je suppose que cela répond à la question - non, il n'y a pas de meilleure façon. Dommage que le "bootstrap au couteau" ne puisse pas non plus faire fonctionner chef-client.
Steve Bennett
J'exécute généralement chef-client à la fin de mon script d'amorçage pour résoudre ce problème particulier. Cependant, si vous n'aimez pas le couteau-ssh, vous penserez probablement que les composants internes du couteau-bootstrap sont également disgracieux. Il y a un exemple de script sur github.
Tim Potter
1
Le ec2 server createplugin couteau exécute simplement bootstrap suivi de SSH + chef-client. Donc, si cela vous fait vous sentir mieux, les auteurs du chef n'ont rien trouvé de plus intelligent.
kgilpin
Si le chef-client met un certain temps à courir, vous obtenez un temps mort. :( ssh: connexion au port 22 de l'hôte xx.xx.xx.xx:
Expiration de la
Dans le cas où chef-client est exécuté en tant que démon après l'amorçage, et quel que soit l'intervalle défini, LA FAÇON LA PLUS ÉLÉGANTE DE L'INVOQUER EST: ssh ubuntu @ ipadddress -i mycredentials.pem -f -n "sudo killall -USR1 chef -client". Forkez ssh pour le faire simultanément à une liste de nœuds.
Andrew S
12

Vous pouvez utiliser le couteau ssh pour exécuter chef-client sur toutes les boîtes contenant un certain rôle ou recette:

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

Ou si vous êtes en EC2:

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

Vous pouvez utiliser ansible pour déployer et exécuter chef-client.

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

ansible s'installe facilement avec pip:

pip install ansible

Votre fichier d'inventaire (dans l'exemple, nommé "hôtes") pourrait ressembler à ceci:

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

(notez que "all" est le nom du regroupement dans le fichier de configuration pour notre exemple - il est arbitraire et peut être n'importe quoi. Votre fichier d'inventaire peut également inclure d'autres regroupements, par exemple [web_wervers], [database_servers], [chef_servers] , etc.)

Donc, encore une fois, tout mettre ensemble:

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

ou peut-être:

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

Greg Jones
la source
1
Je vois ce que tu fais ici ...;)
Spechal
0

J'utilise Jenkins CI pour gérer les runs. Le serveur Linux est configuré comme un poste de travail et Jenkins y est installé. Je peux donc amorcer les nœuds avec run_list modifié. Le processus d'amorçage, de toute façon, exécute chef-client à la fin.

Pour l'exécution adhoc, le travail Jenkins exécute les commandes de couteau pour modifier la liste_exécutions d'un nœud et utiliser le plug-in SSH pour exécuter chef-client sur le nœud souhaité.

Anil Wavde
la source
0

Il est dommage que pour envoyer une commande au client chef, nous devons utiliser le soulignement ssh.

Il semble que, bien que chaque client chef ait établi une connexion sécurisée avec le serveur chef, mais que le serveur chef ne fournisse pas de multiplexeur de commandes sur cette connexion sécurisée, pourquoi?

osexp2003
la source
0

Il y a une nouvelle commande chef-rundans Chef Workstation:

chef-run server_name resource_name

Il s'installera chef-clients'il n'est pas présent et exécutera la ressource ou le livre de recettes que vous spécifiez.

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

sekrett
la source