Mejores prácticas / preguntas del chef

48

Yo uso y amo Puppet. Me mudé a una nueva empresa y están adoptando Chef. Así que estoy tratando de aprender Chef, pero me está costando unir todo porque todavía pienso en Puppet =)

Estas son mis preguntas:

  • ¿Es mejor configurar roles en Ruby DSL, JSON o desde la consola de administración? ¿Por qué hay múltiples formas de hacer lo mismo?
  • ¿Se pueden organizar libros de cocina en subdirectorios? por ejemplo: tenemos un software personalizado para el que me gustaría escribir un libro de cocina y pegarlo en: chef-repo / cookbooks / ourcompanystuff / customoftwarecookbook ¿sería una buena práctica?
  • ¿Creo un libro de cocina para cada tipo de rol que especifica lo que hace? ¿Tengo estos libros de cocina que incluyen otros libros de cocina (es decir, el libro de cocina para mi rol de servidor web incluye el libro de cocina de apache). No estoy seguro de cómo se manejan las interdependencias y la herencia del libro de cocina.
  • ¿Hay algo como el clasificador de nodo externo de Puppet para que los nodos determinen automáticamente sus roles?
  • ¿Parece que puede configurar las cosas con un cuchillo o dentro de la consola de administración, o editando archivos JSON? Esto es muy confuso para mí porque hay tantas maneras de hacer las cosas, ¡es paralizante! ¿Hay alguna razón para usar uno u otro? Viniendo de la marioneta, parece que sería fácil configurar accidentalmente algo mal con estas herramientas (es decir, dejar algo fuera)
  • ¿Cómo puedo aprovisionar nodos automáticamente con Chef en mi clúster de desarrollo? Con Puppet, enciendo una máquina virtual que se conecta al puppermaster, inicia una carrera de puppet y se configura (el rol está determinado por un clasificador de nodo externo). ¿Cómo hago esto con Chef? ¿Instalar chef con archivos pem / rb que lo vinculan a un servidor chef, decirle manualmente al nodo sus roles con cuchillo o editar esto en la interfaz de administración y luego iniciar una ejecución chef-cliente para configurarse?

Completé los tutoriales de inicio y veo que tienen tutoriales EC2, pero nunca he usado EC2, por lo que es difícil para mí seguirlos. En este punto, he alojado a Chef corriendo y estoy empezando a jugar con la configuración de un solo nodo. ¿A donde voy desde aqui? ¿Tengo que empezar a mirar los libros de cocina públicos?

Los documentos en Opscode están bien, pero no son tan buenos como los de Puppet. ¿Hay algún otro buen recurso de Chef que pueda faltar en mis búsquedas?

ciudadano
fuente
55
Demasiadas preguntas en una publicación. Considere dividir cada uno en su propio. Es mejor para la comunidad en su conjunto y también le dará respuestas mejores y más detalladas.
Wesley

Respuestas:

84

Editar Esta pregunta y respuesta tienen años. Las mejores prácticas definitivas se enseñan a través de los módulos de capacitación autodidacta Learn Chef Rally producidos por Chef Software, Inc. La mayor parte de la respuesta original se encuentra a continuación.

En esta respuesta, "Chef" o "chef-cliente" generalmente se refiere a Chef Infra, el producto. Opscode renombró a Chef Software, Inc en 2013 . En abril de 2019, Chef abrió el código fuente de todos sus productos, junto con la creación de nombres de marca consistentes.

¿No está claro si es mejor configurar roles en ruby ​​DSL, JSON o desde la consola de administración? ¿Por qué hay múltiples formas de hacer lo mismo?

Actualización de 2019 : los archivos de políticas son el mejor flujo de trabajo para usar. Los roles se consideran una práctica inferior, y Chef Software, Inc. recomienda migrar a Policyfiles.

Hay varias formas de hacer lo mismo porque las personas tienen flujos de trabajo diferentes. Elige el flujo de trabajo que sea mejor para su entorno. Permítame explicarle cuáles son las diferencias para que pueda tomar una decisión informada.

El Ruby DSL for Roles existe para facilitar la escritura de roles sin conocer la sintaxis de JSON. Es una forma sencilla de comenzar con Roles. Una vez que haya realizado los cambios, cárguelos al Chef Server con un cuchillo.

knife role from file myrole.rb

Esto convierte el rol a JSON y lo almacena en el servidor. Si tiene un entorno que refuerza el repositorio de chef donde viven sus roles como fuente de verdad, esto funciona bastante bien.

JSON es lo que almacena Chef Server, por lo que también puede editar JSON directamente en la consola de administración. Requiere más campos que el Ruby DSL para que Knife lo reconozca correctamente para cargar. Esos detalles están ocultos hasta cierto punto a través de la interfaz de usuario web.

La desventaja de usar la consola de gestión / webui para editar roles es que no están en su sistema de control de versiones local a menos que los descargue del servidor. Puedes hacer esto con un cuchillo:

knife role show myrole -Fj

El -Fjcuchillo le dice a "mostrar en formato JSON". Puede redirigir la salida a un archivo .json si lo desea.

Actualización de hace años : hay comandos de cuchillo adicionales para trabajar con los archivos en el repositorio de chef local. Actualmente, estos comandos solo admiten archivos de formato JSON. Está abierto un RFC comunitario que abordará la posibilidad de agregar soporte para Ruby DSL para estos complementos. Aquí hay un breve resumen del flujo de trabajo.

Verifique las diferencias de contenido entre el servidor y el archivo local.

knife diff roles/myrole.json

Cargue un archivo de rol con formato JSON. El roles/camino es obligatorio. Esto se asigna al mismo punto final API en el servidor.

knife upload roles/myrole.json

Descargue el contenido del servidor sobrescribiendo el contenido del archivo en el repositorio.

knife download roles/myrole.json

Estos comandos provienen knife-essentials, que está integrado en el paquete del cliente chef.

¿Se pueden organizar libros de cocina en subdirectorios? por ejemplo, tenemos un software personalizado para el que me gustaría escribir un libro de cocina y pegarlo en: chef-repo / cookbooks / ourcompanystuff / customoftwarecookbook ¿sería una buena práctica?

No. Knife tiene la expectativa de dónde deben vivir los libros de cocina porque usa una API para cargar libros de cocina al Servidor. Esto se establece en knife.rbcon cookbook_path. En versiones anteriores de Chef Infra, podría especificar una variedad de rutas para libros de cocina, pero esto está en desuso porque requería más mantenimiento y era confuso para los usuarios.

Por convención, nombramos libros de cocina específicos del cliente o del sitio con el nombre prefijado en el directorio del libro de cocina. Para su ejemplo, sería:

chef-repo/cookbooks/ourcompany_customsoftware

Puede haber varios libros de cocina diferentes para "nuestra empresa" dependiendo de lo que esté haciendo.

Referencia adicional:

¿Creo un libro de cocina para cada tipo de rol que especifica lo que hace? ¿Tengo estos libros de cocina que incluyen otros libros de cocina (es decir, el libro de cocina para mi rol de servidor web incluye el libro de cocina de apache). No estoy seguro de cómo se manejan las interdependencias y la herencia del libro de cocina.

No existe una relación directa o dependencia entre roles y libros de cocina.

Los roles tienen una lista de ejecución, que especifica las recetas y otros roles que deben aplicarse a cualquier nodo que tenga ese rol. Los nodos tienen una lista de ejecución que puede contener roles o recetas. Cuando Chef se ejecute en el nodo, expandirá la lista de ejecución para todos los roles y recetas que incluye, y luego descargará los libros de cocina necesarios. En una lista de ejecución de nodos:

recipe[apache2]

Chef descargará el apache2libro de cocina para el nodo para que pueda aplicar esta receta.

Es posible que tenga un libro de cocina específico para un rol en su infraestructura. Más comúnmente, tendrá libros de cocina para configurar ciertos tipos de servicios como apache2, mysql, redis, haproxy, etc. Luego los pondría en los roles apropiados. Si tiene cosas específicas de aplicaciones personalizadas que deben suceder para cumplir un rol, puede escribir esto en un libro de cocina personalizado (como mencioné anteriormente).

Referencia adicional:

¿Hay algo así como clasificador de nodo externo de títeres para que los nodos determinen automáticamente sus roles?

"Si." Chef Infra Server realiza el almacenamiento de datos de nodo (en JSON) automáticamente, y el servidor también indexa automáticamente todos los datos de nodo para la búsqueda.

Referencia adicional:

¿Parece que puede configurar las cosas con un cuchillo o dentro de la consola de administración, o editando archivos JSON? Esto es muy confuso para mí porque hay tantas maneras de hacer las cosas, ¡es paralizante! ¿Hay alguna razón para usar uno u otro?

El Chef Infra Server tiene una API RESTful que envía y recibe respuestas JSON. Knife y la consola de administración son interfaces de usuario para interactuar con la API desde el punto de vista de la administración.

Puede usar la herramienta que más le guste, aunque la consola de administración no tiene tantas funciones como Knife. La mayoría de las personas que usan Chef Infra prefieren la interfaz de línea de comandos por la potencia y flexibilidad que proporciona, incluso las personas que usan Chef Infra en Windows. Además, knifees una herramienta basada en complementos que puede crear nuevos complementos para interactuar con el Chef Infra Server, o con otras partes de su infraestructura.

Chef Infra es un conjunto de bibliotecas, primitivas y una API. Le brinda la flexibilidad de crear el sistema de administración de configuración que funcione mejor para su infraestructura.

Otras lecturas:

¿Cómo puedo aprovisionar automáticamente nodos con chef en mi clúster de desarrollo? Con Puppet, enciendo una máquina virtual que se conecta al puppermatser, inicia una ejecución de Puppet y se configura (el rol está determinado por un clasificador de nodo externo). ¿Cómo hago esto con el chef? - ¿Instala chef con archivos pem / rb que lo vinculan a un servidor chef, le dice manualmente al nodo sus roles con cuchillo o edita esto en la interfaz de administración y luego inicia una ejecución chef-cliente para configurarse?

Querrás usar el plugin bootstrap de cuchillo. Este es un complemento incorporado que viene con cuchillo. Lo invocas así:

knife bootstrap 10.1.1.112 -x root -i ~/.ssh/root_id_rsa -r 'role[webserver]'

Esta voluntad:

  • SSH al sistema de destino (10.1.1.112) como el rootusuario que usa una clave SSH (puede usar ssh como otro usuario y luego usar --sudo).
  • Instala Ruby
  • Instalar Chef
  • Cree el archivo de configuración de Chef para su Chef Server, leyendo la configuración de la cuchilla (.chef / knife.rb).
  • Copie la clave privada RSA de "validación", que el nodo utilizará para registrarse automáticamente con el Servidor Chef.
  • Ejecute chef-clientutilizando la ejecución separada por comas que se especifica. En este ejemplo, solo webserverse aplica el rol.

Esto supone que el sistema de destino se ha aprovisionado, tiene una dirección IP y puede SSH como root. Dependiendo de sus políticas locales y el proceso de aprovisionamiento, es posible que deba ajustar cómo funciona esto. La página de arranque de cuchillo en la wiki describe más sobre cómo funciona esto.

Knife también tiene complementos para varios proveedores de computación en la nube pública, como Amazon EC2 y Rackspace Cloud. Hay complementos disponibles para entornos de nube privada como Eucalyptus y OpenStack. También hay complementos para VMware, Vsphere y otros. Puede ver más información en la documentación.

Otras lecturas:

¿Hay otros buenos recursos de chef que me faltan en mis búsquedas?

La Documentación del Chef es la principal fuente de documentación.

El Chef Rally Aprender es una serie de módulos autoguiados que se puede aprender todo acerca de diversos aspectos de Chef Infra y otros productos del cocinero.

Solía ​​mantener un blog donde publicaba consejos, trucos y guías sobre Chef Infra: http://jtimberman.housepub.org/ . Tuve una serie llamada " consejos rápidos ". Debido a circunstancias de la vida real y otros compromisos, ya no tengo tiempo para mantener el sitio, pero puedo regresar a él en el futuro.

Los clientes chef pueden obtener ayuda y soporte en el sitio de soporte:

La comunidad de usuarios de Chef es una excelente fuente de ayuda adicional:

Recursos adicionales están disponibles en Chef Software, Inc. sitio web .

Espero que esto ayude.

jtimberman
fuente
2
Este es un recurso valioso, por favor, vincúlelo con más frecuencia.
Pooyan Khosravi
¿Algo para agregar / actualizar 7 años después? ;)
Spechal