¿Existe una forma más elegante de ejecutar remotamente chef-cliente?

22

Esta es la forma recomendada en el tutorial de Chef Fast Start:

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

Esto es realmente torpe. ¿Realmente no hay una mejor manera, o es la idea de que en un entorno de producción real, tendrás nodos de actualización automática de todos modos?

Steve Bennett
fuente
1
¿De qué manera crees que esto es "torpe"?
womble
99
Bueno, póngalo de esta manera. Esto no sería torpe: "nombre de actualización de cuchillo: mynode". Tener que explicar cómo conectarse al cliente y el nombre del comando del cliente chef (más el hecho de que debe ejecutarse con permisos sudo) es torpe. Knife hace bien en abstraer muchos otros desorden, ¿por qué no esto?
Steve Bennett

Respuestas:

11

Eso es más o menos cómo comenzar las cosas, pero solo debe hacerse una vez. La ejecución inicial de chef-client normalmente habilita e inicia el demonio chef-cliente como un servicio init.d.

Si realmente quisiera hacerlo de manera más elegante, podría deshacerse de knife-ssh y ejecutar ssh directamente:

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

probablemente será más rápido, ya que knife-ssh realiza una búsqueda en el servidor Chef para buscar nodos que coincidan con el término de búsqueda (en este caso name:dynode), lo cual no es estrictamente necesario si ya conoce la dirección IP.

Tim Potter
fuente
2
Ok, supongo que eso responde la pregunta: no, no hay una mejor manera. Lástima que "bootstrap cuchillo" no puede realmente ejecutar chef-cliente.
Steve Bennett
Por lo general, ejecuto chef-cliente al final de mi script de arranque para resolver ese problema en particular. Sin embargo, si no te gusta el cuchillo-ssh, entonces probablemente pienses que las partes internas del cuchillo-arranque son igualmente desgarbadas. Hay un script de ejemplo en github.
Tim Potter
1
El ec2 server createcomplemento de cuchillo solo ejecuta bootstrap seguido de SSH + chef-client. Entonces, si te hace sentir mejor, los autores del Chef no han descubierto nada particularmente inteligente.
kgilpin
Si el chef-cliente tarda un tiempo en ejecutarse, se agota el tiempo de espera. :( ssh: conectarse al host xx.xx.xx.xx puerto 22: Se agotó el tiempo de conexión
gdanko
En el caso de que el chef-cliente se ejecute como un demonio después del bootstrap, e independientemente del intervalo establecido, LA FORMA MÁS ELEGANTE PARA INVOCARLO ES: ssh ubuntu @ ipadddress -i mycredentials.pem -f -n "sudo killall -USR1 chef -cliente". Fork ssh para hacer esto simultáneamente a una lista de nodos.
Andrew S
12

Puede usar Knife Ssh para ejecutar chef-cliente en todos los cuadros que contienen un determinado rol o receta:

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

O si estás en EC2:

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

Puede usar ansible para implementar y ejecutar chef-client.

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

ansible se instala fácilmente con pip:

pip install ansible

Su archivo de inventario (en el ejemplo, llamado "hosts") podría verse así:

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

(observe "todos" es el nombre de la agrupación en el archivo de configuración para nuestro ejemplo; esto es arbitrario y puede ser cualquier cosa. Su archivo de inventario también puede incluir otras agrupaciones, por ejemplo, [web_wervers], [database_servers], [chef_servers] , etc.)

Entonces, nuevamente, poniéndolo todo junto:

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

o tal vez:

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

Greg Jones
fuente
1
Veo lo que estás haciendo aquí ...;)
Spechal
0

Yo uso Jenkins CI para administrar las ejecuciones. El servidor Linux está configurado como una estación de trabajo y tiene Jenkins instalado. Entonces puedo arrancar los nodos con run_list modificado. El proceso de arranque, de todos modos, se ejecuta chef-cliente al final.

Para la ejecución ad hoc, el trabajo de Jenkins ejecuta comandos de cuchillo para modificar la lista de ejecución de un nodo y usar el complemento SSH para ejecutar chef-client en el nodo deseado.

Anil Wavde
fuente
0

Es una pena que para enviar un comando al cliente chef tengamos que usar ssh subrayado.

Parece que aunque cada cliente chef ha establecido una conexión segura con el servidor chef, pero el servidor chef no proporciona un multiplexor de comandos a través de esa conexión segura, ¿por qué?

osexp2003
fuente
0

Hay un nuevo comando chef-runen Chef Workstation:

chef-run server_name resource_name

Se instalará chef-clientsi no está presente y ejecutará el recurso o libro de cocina que especifique.

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

sekrett
fuente