¿Cuáles son los beneficios de ejecutar chef-server en lugar de chef-solo?

33

Estoy buscando soluciones de implementación automatizadas para mi equipo y he estado jugando con Chef durante los últimos días. He podido obtener una aplicación web simple desde una base de Red Hat VM usando chef-solo.

Nuestro objetivo final es utilizar Chef (u otro sistema) para implementar automáticamente topologías de aplicaciones en la nube a medida que ejecutamos compilaciones. Nuestro proceso básicamente se ejecutaría así:

  1. Nuestro código de aplicación web, dependencias y libros de cocina del chef se almacenan en SCM
  2. Se ejecuta una compilación y crea un paquete único para que las imágenes se adquieran y se prueben
  3. El motor de compilación luego despliega nuevas imágenes en la nube que ejecutan un cliente chef para instalar los paquetes.
  4. Las imágenes adquieren los libros de cocina de SCM o del servidor de Chef e instalan todo para comenzar a funcionar.

¿Cuáles son los beneficios y / o casos de uso para poner en funcionamiento un Chef Server?

¿Hay algún beneficio importante para que un Chef Server mantenga y adquiera los libros de cocina de SCM en lugar de usar chef-solo y tener un script que extraiga los libros de cocina de SCM?

linusthe3rd
fuente

Respuestas:

67

Voy a orientar esta respuesta como si la pregunta fuera "cuáles son las ventajas del chef solo" porque esa es la mejor manera que conozco para cubrir las diferencias entre los enfoques.

Mi resumen de recomendación está en línea con otros: use un chef-servidor si necesita administrar un entorno dinámico y virtualizado donde agregará y eliminará nodos con frecuencia. Un servidor de chef también es un buen CMDB , si lo necesita. Use chef-solo si tiene un entorno menos dinámico donde los nodos no cambiarán con demasiada frecuencia, pero los roles y las recetas lo harán. El tamaño y la complejidad de su entorno es más o menos irrelevante. Ambos enfoques escalan muy bien.

Si implementa chef-solo, use un cronjob con rsync, 'git pull' o algún otro mecanismo idempotente de transferencia de archivos para mantener una copia completa del repositorio de chef en cada nodo. El cronjob debería ser fácilmente configurable para (a) no ejecutarse en absoluto y (b) ejecutarse, pero sin sincronizar el repositorio local. Agregue un directorio / nodos en su repositorio de chef con un archivo json para cada nodo. Su cronjob puede ser tan sofisticado como desee en términos de identificación del archivo de nodo correcto (aunque recomendaría simplemente $ (hostname -s) .json. También puede crear una cuenta de código de operación y configurar un cliente con el chef alojado, si es por No hay otro motivo que no sea poder usar Knife para descargar libros de cocina comunitarios y crear esqueletos.

Este enfoque tiene varias ventajas, además de la obvia "no tener que administrar un servidor". Su control de origen será el árbitro final de todos los cambios de configuración, el repositorio incluirá todos los nodos y listas de ejecución, y cada servidor que sea completamente independiente facilita algunos escenarios de prueba convenientes.

Chef-server presenta un agujero en el que usa la "carga de cuchillo" para actualizar un libro de cocina, y debe parchear este agujero usted mismo (como con un gancho posterior a la confirmación) o arriesgarse a que los cambios en el sitio sean sobrescritos en silencio por alguien que "carga el cuchillo" s una receta obsoleta del repositorio local obsoleto en su computadora portátil. Es menos probable que esto suceda con chef-solo, ya que todos los cambios se sincronizarán con los servidores directamente desde el repositorio principal. El problema aquí es la disciplina y el número de colaboradores. Si eres un desarrollador en solitario o un equipo muy pequeño, subir libros de cocina a través de la API no es muy arriesgado. En un equipo más grande puede ser si no pones buenos controles en su lugar.

Además, con chef-solo puede almacenar todos los roles, atributos personalizados y listas de ejecución de sus nodos como archivos node.json en su repositorio principal de chef. Con chef-server, los roles y las listas de ejecución se modifican sobre la marcha utilizando la API. Con chef-solo, puede rastrear esta información en el control de revisión. Aquí es donde se puede ver claramente el conflicto entre entornos estáticos y dinámicos. Si su lista de nodos (no importa cuánto tiempo sea) no cambia a menudo, tener estos datos en el control de revisión es muy útil. Por otro lado, si frecuentemente genera nuevos nodos y destruye los antiguos (nunca volverá a ver su nombre de host o fqdn) mantener todo bajo control de revisión es simplemente una molestia innecesaria, y tener una API para hacer cambios es muy conveniente. Chef-server tiene todas las características orientadas a la gestión de entornos dinámicos en la nube, como la opción de nombre en "bootstrap de cuchillo" que le permite reemplazar fqdn como la forma predeterminada de identificar un nodo. Pero en un entorno estático, esas características tienen un valor limitado, especialmente en comparación con tener los roles y las listas de ejecución en el control de revisión con todo lo demás.

Finalmente, los entornos de prueba de recetas se pueden configurar sobre la marcha para casi ningún trabajo adicional. Puede deshabilitar los cronjobs que se ejecutan en un servidor y realizar cambios directamente en su repositorio local. Puede probar los cambios ejecutando chef-solo y verá exactamente cómo se configurará el servidor en producción. Una vez que todo se haya probado, puede registrar los cambios y volver a habilitar los cronjobs locales. Sin embargo, al escribir recetas, no podrá utilizar la API "Buscar", lo que significa que si desea escribir recetas dinámicas (por ejemplo, equilibradores de carga) tendrá que hackear esta limitación, reuniendo los datos de los archivos json en su directorio / nodos, que probablemente sea menos conveniente y carecerá de algunos de los datos disponibles en la CMDB completa. Una vez más, los entornos más dinámicos favorecerán el enfoque basado en bases de datos, entornos menos dinámicos estarán bien con archivos json en el disco local. En un entorno de servidor donde un chef debe ejecutar llamadas API a una base de datos central, dependerá de administrar todos los entornos de prueba dentro de esa base de datos.

El último también se puede usar en emergencias. Si está solucionando un problema crítico en los servidores de producción y lo resuelve con un cambio de configuración, puede realizar el cambio inmediatamente en el repositorio del servidor y luego enviarlo al servidor principal.

Esas son las principales ventajas de chef-solo. Hay algunos otros, como no tener que administrar un servidor o pagar por un chef alojado, pero esas son preocupaciones relativamente menores.

En resumen: si usted es dinámico y altamente virtualizado, chef-server ofrece una serie de excelentes características (cubiertas en otro lugar) y la mayoría de las ventajas de chef-solo serán menos notables. Sin embargo, hay algunas ventajas definidas, a menudo no mencionadas, para chef solo, especialmente en entornos más tradicionales. Tenga en cuenta que implementarse en la nube no significa necesariamente que tenga un entorno dinámico. Si no puede, por ejemplo, agregar más nodos a su sistema sin lanzar una nueva versión de su software, probablemente no sea dinámico. Finalmente, desde una perspectiva de alto nivel, un CMDB puede ser útil para cualquier cantidad de cosas solo relacionadas tangencialmente con la administración y configuración del sistema, como la contabilidad y el intercambio de información entre equipos. Usar chef-server podría valer la pena solo por esa característica.

Goladus
fuente
¿Cómo almacenaría / distribuiría datos confidenciales (es decir, claves privadas / contraseñas) con chef-solo? ¿Cómo puedo rastrearlo con control de revisión sin almacenarlo como texto sin formato?
Limbo Peng
@LimboPeng Puede almacenar bolsas de datos encriptados en el repositorio de Chef. Sin embargo, debe almacenar la clave de cifrado externamente.
Willie Wheeler
27

Divulgación: trabajo para Opscode.

El principal beneficio de Chef Server sobre Solo es la capacidad de usar la búsqueda con su infraestructura. El ejemplo clásico es un equilibrador de carga con servidores web. El equilibrador de carga puede actualizar automáticamente su configuración a medida que se agregan y eliminan servidores web a la infraestructura, simplemente buscándolos. Solo es solo eso, máquinas individuales, mientras que Chef Server ofrece la posibilidad de consultar cosas como "todas las máquinas con más de 4 gigas de RAM" o "el maestro de la base de datos".

Chef Server también le brinda la capacidad de administrar su infraestructura sin copiar tarballs, visualizar su infraestructura con la consola de administración y administrar qué máquinas están ejecutando qué versiones de libros de cocina con entornos. Hay otros beneficios, pero esos son los que están fuera de mi alcance. Si desea probar Chef Server sin instalarlo, simplemente regístrese para obtener una cuenta de Opscode Hosted Chef, los primeros 5 nodos son gratuitos.

mray
fuente
1
Gracias, esa información ayuda mucho. ¿Sabes cómo abrazarías las filosofías de DevOps cuando utilizas el servidor Chef? Lo que quiero decir con esto es que todos nuestros libros de cocina vivan en SCM. ¿Hay una manera fácil de hacer que el servidor Chef obtenga libros de cocina actualizados mientras entregamos un nuevo código?
linusthe3rd
2
@ strife25 Definitivamente debería tener sus libros de cocina en un sistema de control de versiones. Si no está obligado a uno, Opscode recomienda Git, ya que es fácil trabajar con ramas y rocas para equipos distribuidos. Podría escribir un gancho posterior a la confirmación que cargue libros de cocina al servidor Chef. No solo clona libros de cocina en el servidor de Chef porque los carga a través de una API, y esto es muy intencional por diseño.
jtimberman
1

chef-server gestiona libros de cocina y datos de configuración para sus nodos.

Agrega libros de cocina al chef-servidor con la herramienta Cuchillo y luego le da a cada nodo una lista de recetas para que puedan obtener los libros de cocina que necesitan cuando el nodo se configura usando chef-client. Dado que chef-client se ejecuta en segundo plano, sus nodos verificarán periódicamente si hay libros de cocina actualizados en su servidor chef.

chef-server también contiene sus datos y variables de configuración para que pueda cambiar la configuración de sus nodos para que se activen automáticamente. Esto es bueno para configuraciones más dinámicas que no deberían o no pueden codificarse en sus recetas.

Andrew Vit
fuente