La mejor estrategia para mantener bajo control las versiones de los libros de cocina del chef

10

Estoy buscando ideas sobre la gestión de versiones de libros de cocina del chef. Sé que fijas versiones específicas en el entorno, pero no estoy seguro de cómo hacerlo.

Utilizamos bibliotecario-chef que instala libros comunitarios de terceros en la carpeta de libros de cocina. Nunca tocamos esos libros y solo actualizamos a versiones más recientes de vez en cuando.

También tenemos nuestros libros de cocina personalizados específicos del sitio desde donde incluimos los de la comunidad ( include_recipe).

Teóricamente, podríamos especificar versiones específicas de libros comunitarios de los que dependen nuestros libros personalizados y luego configurar nuestras versiones de libros de cocina en la configuración del entorno, pero el problema es que esos libros comunitarios podrían confiar en algunos otros libros sin versiones específicas. Y esa dependencia anidada profunda podría continuar.

Por lo tanto, no hay garantía de que cuando cargue el libro de cocina al servidor del chef, no se rompa la producción, ya que los libros de cocina dependientes también pueden cambiar.

La única solución que puedo ver en este momento es especificar cada versión de libro de cocina que usamos en la configuración del entorno, incluidas las comunidades y las personalizadas. Pero luego tengo que revisar cada libro de cocina y descubrir esas versiones.

También realizamos actualizaciones de bibliotecario y chef de vez en cuando e imagino que podría ser difícil rastrear las versiones que cambiaron y no olvidar actualizar la versión en el entorno cuando llegue el momento.

Por favor, comparta su experiencia y mejores prácticas. Estoy seguro de que será muy útil para otras personas.

Gansbrest
fuente

Respuestas:

11

No pasó mucho tiempo después de que comencé a usar Chef en serio que me encontré con estos mismos problemas. Solo llegué a tener cierta sensación de cordura cuando comencé a hacer cuatro cosas operativamente. Tenga en cuenta que algunas personas de la comunidad de Chef no pueden considerar estas "mejores prácticas". No obstante, así es como traje cordura, repetibilidad y orden a mi mundo.

  1. Crea tus propias recetas. Dejé de usar los libros de cocina de la comunidad y simplemente creé mis propias recetas, según mis especificaciones. De esta manera gestiono y controlo mis propias dependencias. Muchos argumentarían en contra de esto, pero honestamente, si hubiera leído algunas de las recetas de Opscode y de la comunidad primero, probablemente no habría elegido Chef como mi solución para empezar. Mantengo mis recetas simples y en línea con mi forma de trabajar. Precisamente tengo cero libros de cocina comunitarios en mi repositorio.
  2. Sea disciplinado sobre las actualizaciones. Si actualizo una receta, me aseguro de que funcione en todas partes y paso por la molestia adicional de implementarla en todas partes, incluso si interrumpe mi flujo de trabajo y agrega fricción. A la larga, esta es la clave para la cordura del chef. En casos extremos, si necesito variaciones para algunos hosts, como un entorno de prueba vs producción, entonces los codifico en el libro de cocina. Pero mi filosofía es que la versión más reciente de cada libro de cocina debe poder aplicarse de forma segura en todos los lugares donde se necesitan.
  3. Use Chef Solo para todo. Cada pocos meses, de alguna manera tengo en mi cabeza que debería intentar usar Chef Server nuevamente. La edición comunitaria está mejorando, pero todo el paradigma nunca parece encajar en mi mundo. Y cada vez que lo intento, me doy palmada y me pateo. El paradigma de Chef Server es adecuado para un mundo con servidores de larga duración que necesitan cambios frecuentes en los sistemas. Realizo cambios en los sistemas tan raramente que hacer que mis servidores se registren constantemente en un servidor de chef para obtener actualizaciones es una tontería. Y tengo herramientas mucho mejores para asegurar que mis anfitriones estén saludables. Mi trabajo está en un mundo de máquinas virtuales desechables, donde solo pueden sobrevivir uno o dos cambios de configuración. Ahora uso Chef Solo exclusivamente, y envío cambios a mis anfitriones, al mismo tiempo que envío exactamente los mismos libros de cocina a todos los anfitriones que los necesitan.
  4. Evite compilar software durante las ejecuciones de Chef. El caso más extremo (es decir, estúpido) para mí involucraba compilar ruby-1.9.3 desde la fuente cada vez que arrancaba una nueva caja. Pero crear paquetes personalizados a menudo puede ser una molestia. Una vez que descubrí la excelente herramienta fpm , se volvió trivial empaquetar mis propios rpms, debs y gemas e hizo mi vida mucho más eficiente y fácil.

¡Espero que esto ayude a alguien!

- ACTUALIZACIÓN -

Casi tres años después, estos principios me han sido útiles. Pero agregaré un consejo más, y es realmente por las mismas razones por las que preferí chef-solo sobre chef.

  1. UTILIZAR ANSIBLE EN LUGAR
plataformas
fuente
3

Hay 2 problemas:

  1. administrar versiones de libros de cocina en diferentes objetos del entorno
  2. gestionar la versión de la receta en el nodo run_list.

El artículo Fundamentos de las versiones de libros de cocina.es la mejor referencia para las versiones de libros de cocina. De acuerdo con el n. ° 1, tiene razón porque es un trabajo difícil administrar diferentes versiones de libros de cocina para servir un conjunto de configuraciones diferente, especialmente está mezclado con dependencias de libros de cocina donde la mayoría del libro de cocina del sitio de libros de cocina no hace bien este trabajo. Entonces la configuración puede romperse. y si no administró las versiones probando el comportamiento en tiempo de ejecución de cualquier componente, simplemente se rompe. Por lo tanto, es una mala idea cargar un libro de cocina sin especificar el número de versión en su objeto de entorno. Por lo tanto, administre las versiones del libro de cocina en el objeto del entorno y pruebe cuidadosamente al promocionar la versión de cualquier libro de cocina nuevo. Por lo general, administro el objeto de entorno en SCM y no lo cargué al servidor del chef a través de un trabajo automatizado hasta que el libro de cocina modificado pueda funcionar bien con el resto de otros componentes existentes.

Según el n. ° 2, es un tema complicado porque aquí es donde la dependencia de la receta real funciona en cada nodo. En pocas palabras, para los nodos críticos, es mejor controlar la dependencia de las recetas especificando la versión de la receta en la lista de ejecución de nodo / rol. Apenas hago esto porque es un control de grano fino y cuesta más en pruebas / promoción. Sin embargo, para el rol / nodo crítico, esta no es una mala idea, pero proporciona un seguro sobre los cambios de configuración.

shawmzhu
fuente