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?
Respuestas:
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:
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.fuente
ec2 server create
complemento 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.Puede usar Knife Ssh para ejecutar chef-cliente en todos los cuadros que contienen un determinado rol o receta:
O si estás en EC2:
fuente
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'
fuente
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.
fuente
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é?
fuente
Hay un nuevo comando
chef-run
en Chef Workstation:Se instalará
chef-client
si no está presente y ejecutará el recurso o libro de cocina que especifique.Tutorial: https://learn.chef.io/modules/try-chef-infra#/
fuente