Profundizar en cloud-init

Se aplica a: ✔️ máquinas virtuales Linux ✔️ conjuntos de escalado flexibles

Para obtener más información acerca de cloud-init o solucionar problemas en un nivel más profundo, debe entender cómo funciona. En este documento se resaltan las partes importantes y se explican las características específicas de Azure.

Cuando cloud-init se incluye en una imagen generalizada y se crea una VM a partir de esa imagen, procesa las configuraciones y se ejecuta en cinco fases durante el arranque inicial. Estas fases le muestran en qué punto cloud-init aplica las configuraciones.

Descripción de la configuración de cloud-init

La configuración de una máquina virtual para que se ejecute en una plataforma usa cloud-init para aplicar varias configuraciones. La configuración principal con la que interactúa es User data (customData), que admite varios formatos. Para obtener más información, consulte la documentación sobre los formatos de datos de usuario y cloud-init 21.2. También tiene la posibilidad de añadir y ejecutar scripts (/var/lib/cloud/scripts) para otras configuraciones.

Imágenes de Azure Marketplace preconfiguradas

Algunas configuraciones ya están simuladas mediante "bake" en las imágenes de Azure Marketplace que se incluyen en cloud-init.

  • Origen de datos en la nube: cloud-init contiene código que puede interactuar con plataformas en la nube, que se denominan "datasources". Cuando se crea una VM a partir de una imagen de cloud-init en Azure, cloud-init carga el origen de datos de Azure, que interactúa con los puntos de conexión de metadatos de Azure para obtener la configuración específica de la máquina virtual.

  • Configuración de tiempo de ejecución (/run/cloud-init).

  • Configuración de imagen (/etc/Cloud), como /etc/cloud/cloud.cfg, /etc/cloud/cloud.cfg.d/*.cfg. Un ejemplo de dónde se usa esta configuración en Azure, es común que las imágenes del sistema operativo Linux con cloud-init tengan una directiva de Azure DataSource que indique a cloud-init qué datasource debe utilizar, esta configuración ahorra tiempo de cloud-init:

    sudo cat /etc/cloud/cloud.cfg.d/90_dpkg.cfg
    
    # to update this file, run dpkg-reconfigure cloud-init
    datasource_list: [ Azure ]
    

Fases de arranque de cloud-init (configuración de procesamiento)

Al aprovisionar máquinas virtuales con cloud-init, hay cinco fases de arranque de configuración. La salida de estas fases es visible en los registros.

  1. Fase generador: El generador del sistema cloud-init inicia y determina que cloud-init debe incluirse en los objetivos de arranque y, si es así, habilita cloud-init.

  2. Fase local de cloud-init: Aquí, cloud-init busca el datasource local de "Azure", que permite a cloud-init interactuar con Azure, y aplicar una configuración de red, incluido el respaldo.

  3. Fase inicial de cloud-init (red): Las redes deben estar en línea y se debe generar la información de NIC y de la tabla de rutas. En esta fase, los módulos enumerados en cloud_init_modules en /etc/cloud/cloud.cfg se ejecutan. Se monta la VM en Azure, se formateará el disco efímero, se fijará el nombre del host, junto con otras tareas.

    A continuación se muestran algunos de los cloud_init_modules:

    - migrator
    - seed_random
    - bootcmd
    - write-files
    - growpart
    - resizefs
    - disk_setup
    - mounts
    - set_hostname
    - update_hostname
    - ssh
    

    Después de esta fase, cloud-init envía una señal a la plataforma Azure de que la máquina virtual se ha aprovisionado correctamente. Es posible que se haya producido un error en algunos módulos; sin embargo, no todos los errores de módulo provocan un error de aprovisionamiento automáticamente.

  4. Fase de creación de Cloud-init: en esta fase, se ejecutarán los módulos de cloud_config_modules definidos y enumerados en /etc/cloud/cloud.cfg.

  5. Fase final de Cloud-init: en esta fase final, se ejecutarán los módulos de cloud_final_modules, enumerados en /etc/cloud/cloud.cfg. Aquí están los módulos que deben ejecutarse al final del proceso de arranque, como la instalación de paquetes y la ejecución de scripts, etc.

    • Durante esta fase, puede ejecutar los scripts colocándolos en los directorios en /var/lib/cloud/scripts:
      • per-boot: los scripts dentro de este directorio, se ejecutan en cada reinicio
      • per-instance: los scripts de este directorio se ejecutan cuando se inicia por primera vez una nueva instancia
      • per-once: los scripts dentro de este directorio se ejecutan solo una vez

Pasos siguientes

Solución de problemas de cloud-init.