Compartir a través de


Orquestación de Chef

Chef es una herramienta de administración de configuración que automatiza la implementación y administración de aplicaciones e infraestructura. Usa un lenguaje específico del dominio (DSL) para escribir "recetas" de configuración del sistema. Estas recetas se almacenan en "libros de cocina" que se pueden compartir y reutilizar en diferentes sistemas.

Cada especificación cluster-init puede hacer referencia a uno o varios roles de Chef o recetas de libros de cocina que deben ejecutarse en la máquina virtual de arranque.

Nota:

CycleCloud usa Chef en un modo independiente que no depende de un servidor de Chef centralizado. El conjunto de libros de cocina de Chef necesarios para preparar cada máquina virtual se descarga de la cuenta de Azure Storage junto con el resto de los archivos del proyecto.

Estructura del proyecto

El directorio de especificaciones de un proyecto también puede contener un subdirectorio chef . El directorio contiene tres directorios: site-cookbooks (para las definiciones de la guía paso a paso), data_bags (definiciones de bolsas de datos) y roles (archivos de definición de roles de Chef):

      myproject
          ├── specs
          │   ├── default
          │     └── chef
          │         ├── site-cookbooks
          │         ├── data_bags
          │         └── roles

Listas de ejecución de Chef

Puede especificar un run_list en el nivel de proyecto o especificación dentro de la project.ini:

[spec scheduler]
run_list = role[a], recipe[b]

Cuando un nodo incluye la scheduler especificación, el run_list que defines se anexa automáticamente a cualquier run_list definido previamente. Por ejemplo, si el run_list en [configuration] es run_list = recipe[test], el run_list final es run_list = recipe[cyclecloud], recipe[test], role[a], recipe[b], recipe[cluster_init].

También puede sobrescribir run_list en el nivel de especificación de un nodo. Este reemplazo run_list quita cualquier run_list incluido en project.ini. Por ejemplo, puede cambiar la definición del nodo a la siguiente definición:

[cluster-init test-project:scheduler:1.0.0]
run_list = recipe[different-test]

El uso de este run_list hace que se omita la run_list definida en el proyecto. El run_list final del nodo se convierte en run_list = recipe[cyclecloud], recipe[test], recipe[different-test], recipe[cluster_init].

Especificaciones de Chef personalizadas y componibles

Cada especificación puede contener un directorio chef . Antes de converger un nodo, el proceso anula y extrae cada especificación en el repositorio de chef-local, reemplazando los libros, roles y bolsas de datos existentes por nombres coincidentes. El proceso sigue el orden en el que se definen las especificaciones, por lo que la última especificación definida gana si hay un conflicto de nomenclatura.

Ubicaciones de archivo

Al subir el contenido de su proyecto, CycleCloud comprime los tres directorios personalizados de Chef y los sincroniza con su almacén de destino, en (locker)/projects/(project)/(version)/(spec_name)/chef.

El nodo descarga los archivos Chef comprimidos durante la fase de arranque del nodo. El nodo descarga los archivos en $JETPACK_HOME/system/chef/tarballs*, los descomprime en $JETPACK_HOME/system/chef/chef-repo/, y los utiliza para hacer converger el nodo.

Nota:

Para ejecutar guías paso a paso personalizadas, debe agregarlas en el run_list para el nodo.

Proveedor de recursos de descarga de Jetpack

En el ejemplo siguiente se muestra cómo crear un jetpack_download proveedor de recursos ligero para los usuarios de Chef:

jetpack_download "big-file1.tgz" do
  project "my-project"
  end

En Chef, la ubicación de descarga predeterminada es #{node[:jetpack][:downloads]}. Para cambiar el destino del archivo, use el código siguiente:

jetpack_download "foo.tgz" do
  project "my-project"
  dest "/tmp/download.tgz"
end

Al usar el comando en Chef, debe especificar el proyecto.