Compatibilidad con cloud-init para máquinas virtuales en Azure

Precaución

En este artículo se hace referencia a CentOS, una distribución de Linux que está cerca de su estado Final de ciclo vida (EOL). Tenga en cuenta su uso y planifique en consecuencia. Para obtener más información, consulte la guía de fin de vida de CentOS.

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

En este artículo se explica la compatibilidad de cloud-init para configurar máquinas virtuales o conjuntos de escalado de máquinas virtuales en el momento del aprovisionamiento en Azure. Estas configuraciones de cloud-init se ejecutan durante el primer arranque una vez que Azure ha aprovisionado los recursos.

El aprovisionamiento de máquinas virtuales es el proceso en el que Azure pasará los valores de los parámetros de creación de la máquina virtual, como nombre de host, nombre de usuario y contraseña, y los pone a disposición de la máquina virtual cuando se inicia. Un "agente de aprovisionamiento" consumirá esos valores, configurará la máquina virtual y devolverá una notificación cuando se complete.

Azure admite dos agentes de aprovisionamiento cloud-init y el agente de Linux de Azure (WALA).

Introducción a cloud-init

cloud-init es un enfoque ampliamente usado para personalizar una máquina virtual Linux la primera vez que se arranca. Puede usar cloud-init para instalar paquetes y escribir archivos o para configurar los usuarios y la seguridad. Dado que se llama a cloud-init durante el proceso de arranque inicial, no se necesitan pasos adicionales ni agentes para aplicar la configuración. Para más información sobre cómo dar formato correctamente a los archivos #cloud-config u otras entradas, consulte el sitio de documentación de cloud-init. Los archivos #cloud-config son archivos de texto codificados en base64.

cloud-init también funciona entre distribuciones. Por ejemplo, no use apt-get install o yum install para instalar un paquete. En su lugar, puede definir una lista de paquetes que se van a instalar. cloud-init usará automáticamente la herramienta de administración de paquetes nativos para la distribución de Linux (distro) que seleccione.

Estamos trabajando incansablemente con nuestros asociados de distribuciones de Linux certificadas para disponer de imágenes con cloud-init habilitado en Azure Marketplace. Estas imágenes harán que las implementaciones y configuraciones de cloud-init funcionen perfectamente con las máquinas virtuales y los conjuntos de escalado de máquinas virtuales. Inicialmente colaboramos con los partners de distribución de Linux aprobados y el nivel superior para garantizar las funciones de cloud-init con el sistema operativo en Azure; posteriormente, los paquetes se actualizan y están disponibles públicamente en los repositorios de paquetes de distribución.

cloud-init se puede poner a disposición de las distribuciones de Linux admitidas en Azure en las fases de compatibilidad con paquetes y con imágenes:

  • La "compatibilidad con paquetes de cloud-init en Azure" documenta los paquetes de cloud-init que se admiten o están en versión preliminar, por lo que puede usar estos paquetes con el sistema operativo en una imagen personalizada.
  • "Imagen preparada para cloud-init" documenta si la imagen ya está configurada para usar cloud-init.

Canonical

Publicador o versión Oferta SKU Versión Imagen preparada para cloud-init compatibilidad con paquetes de cloud-init en Azure
Canonical 22.04 UbuntuServer 22.04-LTS latest
Canonical 20.04 UbuntuServer 20.04-LTS latest
Canonical 18.04 UbuntuServer 18.04-LTS latest

RHEL

Publicador o versión Oferta SKU Versión Imagen preparada para cloud-init compatibilidad con paquetes de cloud-init en Azure
Red Hat 7 RHEL 7.7, 7.8 y 7_9 latest
RedHat 8 RHEL 8.1, 8.2, 8_3 y 8_4 latest
RedHat 9 RHEL 9_0, 9_1 latest
  • Todas las demás SKU de RedHat a partir de RHEL 7 (versión 7.7) y RHEL 8 (versión 8.1), incluidas las imágenes Gen1 y Gen2, se aprovisionan mediante cloud-init. Cloud-init no se admite en RHEL 6.

CentOS

Publicador o versión Oferta SKU Versión Imagen preparada para cloud-init compatibilidad con paquetes de cloud-init en Azure
OpenLogic 7 CentOS 7.7, 7.8 y 7.9 latest
OpenLogic 8 CentOS 8.1, 8.2 y 8.3 latest
  • Todas las demás SKU de CentOS a partir de CentOS 7 (versión 7.7) y CentOS 8 (versión 8.1), incluidas las imágenes Gen1 y Gen2, se aprovisionan mediante cloud-init. Las imágenes de CentOS 6.10, 7.4, 7.5 y 7.6 no admiten cloud-init.

Nota

OpenLogic ahora es Rogue Wave Software.

Oracle

Publicador o versión Oferta SKU Versión Imagen preparada para cloud-init compatibilidad con paquetes de cloud-init en Azure
Oracle 7 Oracle Linux 77, 78 y ol79 latest
Oracle 8 Oracle Linux 81, ol82, ol83-lvm y ol84-lvm latest
  • Todas las demás SKU de Oracle a partir de Oracle 7 (versión 7.7) y Oracle 8 (versión 8.1), incluidas las imágenes Gen1 y Gen2, se aprovisionan mediante cloud-init.

SUSE SLES

Publicador o versión Oferta SKU Versión Imagen preparada para cloud-init compatibilidad con paquetes de cloud-init en Azure
SUSE 15 SLES (SUSE Linux Enterprise Server) sp1, sp2 y sp3 latest
SUSE 12 SLES (SUSE Linux Enterprise Server) sp5 latest
  • Todas las demás SKU de SUSE a partir de SLES 15 (sp1) y SLES 12 (sp5), incluidas las imágenes Gen1 y Gen2, se aprovisionan mediante cloud-init.
  • Además, estas imágenes también se aprovisionan con cloud-init:
Publicador o versión Oferta SKU / Versión
SUSE 12 SLES (SUSE Linux Enterprise Server) sles-{byos/sap/sap-byos}:12-sp4:2020.06.10
SUSE 12 SLES (SUSE Linux Enterprise Server) sles-{byos/sap/sap-byos}:12-sp3:2020.06.10
SUSE 12 SLES (SUSE Linux Enterprise Server) sles-{byos/sap/sap-byos}:12-sp2:2020.06.10
SUSE 15 SLES (SUSE Linux Enterprise Server) manager-proxy-4-byosgen1:2020.06.10
SUSE 15 SLES (SUSE Linux Enterprise Server) manager-server-4-byos:gen1:2020.06.10

Debian

Publicador o versión Oferta SKU Versión Imagen preparada para cloud-init compatibilidad con paquetes de cloud-init en Azure
debian (Gen1) debian-10 10-cloudinit 10:0.20201013.422 sí, compatibilidad desde la versión del paquete: 20.2-2~deb10u1
debian (Gen2) debian-10 10-cloudinit-gen2 0.20201013.422 sí, compatibilidad desde la versión del paquete: 20.2-2~deb10u1

Actualmente, Azure Stack admitirá el aprovisionamiento de imágenes habilitadas para cloud-init.

¿Cuál es la diferencia entre cloud-init y el agente de Linux (WALA)?

WALA es un agente específico de la plataforma de Azure que se usa para aprovisionar y configurar máquinas virtuales y controlar las extensiones de Azure.

Estamos mejorando la tarea de configuración de las máquinas virtuales para que usen cloud-init en lugar del agente de Linux con objeto de permitir que los clientes existentes de cloud-init usen sus scripts actuales de cloud-init o que los nuevos clientes se aprovechen de la rica funcionalidad de configuración de cloud-init. Si tiene inversiones existentes en scripts de cloud-init para configurar sistemas Linux, no se necesitan configuraciones adicionales para permitir que cloud-init las procese.

cloud-init no puede procesar las extensiones de Azure, por lo que todavía se requiere WALA en la imagen para procesar extensiones, pero debe tener deshabilitado su código de aprovisionamiento para que las imágenes de distribuciones de Linux aprobadas que se van a convertir en cloud-init tengan WALA instalado y configurado correctamente.

Al crear una máquina virtual, si no incluye el modificador --custom-data de la CLI de Azure en el momento del aprovisionamiento, cloud-init o WALA toma los parámetros de aprovisionamiento de máquina virtual mínimos necesarios para aprovisionar la máquina virtual y completar la implementación con los valores predeterminados. Si hace referencia a la configuración de cloud-init con el modificador --custom-data, el contenido de los datos personalizados estará disponible en cloud-init cuando arranque la máquina virtual.

Las configuraciones de cloud-init que se aplican a las máquinas virtuales no tienen restricciones de tiempo y no producirán un error de implementación porque se cumpla el tiempo de espera. Esto no se cumple para WALA, si cambia los valores predeterminados de WALA para procesar los datos personalizados, no puede superar el tiempo total de aprovisionamiento de la máquina virtual de 40 min; si es así, se producirá un error al crear máquina virtual.

Aprovisionamiento de máquinas virtuales de cloud-init sin un controlador UDF

A partir de cloud-init 21.2, puede usar cloud-init para aprovisionar una máquina virtual en Azure sin un controlador UDF. Si no hay disponible un controlador UDF en la imagen, cloud-init usa los metadatos que están disponibles en Azure Instance Metadata Service para aprovisionar la máquina virtual. Esta opción solo funciona para la clave SSH y los datos de usuario. Para pasar una contraseña o datos personalizados a una máquina virtual durante el aprovisionamiento, debe usar un controlador UDF.

Implementación de una máquina Virtual con cloud-init habilitado

La implementación de una máquina virtual con cloud-init habilitado es tan simple como hacer referencia a una distribución con cloud-init habilitado durante la implementación. Los encargados de mantener la distribución de Linux tienen que elegir habilitar e integrar cloud-init en sus imágenes básicas publicadas de Azure. Cuando haya confirmado que la imagen que quiere implementar tiene habilitado cloud-init, puede usar la CLI de Azure para implementarla.

El primer paso para implementar esta imagen es crear un grupo de recursos con el comando az group create. Un grupo de recursos de Azure es un contenedor lógico en el que se implementan y se administran los recursos de Azure.

En el ejemplo siguiente, se crea un grupo de recursos denominado myResourceGroup en la ubicación eastus.

az group create --name myResourceGroup --location eastus

El paso siguiente es crear un archivo en el shell actual, denominado cloud-init.txt y pegar la siguiente configuración. Para este ejemplo, cree el archivo en Cloud Shell, no en la máquina local. Puede usar el editor que prefiera. Escriba sensible-editor cloud-init.txt para crear el archivo y ver una lista de editores disponibles. En este ejemplo, se usa nano. Elija el número 1 para utilizar el editor nano. Asegúrese de que todo el archivo cloud-init se copia correctamente, especialmente la primera línea:

SLES Ubuntu RHEL
# cloud-config
package_upgrade: true
packages:
- apache2
# cloud-config
package_upgrade: true
packages:
- httpd
# cloud-config
package_upgrade: true
packages:
- httpd

Nota

cloud-init tiene varios tipos de entrada, cloud-init usará la primera línea de CustomData/UserData para indicar cómo debe procesar la entrada; por ejemplo, #cloud-config indica que el contenido debe procesarse como una configuración de cloud-init.

Presione Ctrl + X para salir del archivo, escriba y para guardar el archivo y presione Entrar para confirmar el nombre del archivo al salir.

El paso final es crear la máquina virtual con el comando az vm create.

En el ejemplo siguiente se crea una máquina virtual denominada "centos74" y las claves SSH si aún no existen en una ubicación de claves predeterminada. Para utilizar un conjunto específico de claves, utilice la opción --ssh-key-value. Use el parámetro --custom-data para pasar su archivo de configuración cloud-init. Proporcione la ruta de acceso completa a la configuración de cloud-init.txt si guardó el archivo fuera de su directorio de trabajo actual.

az vm create \
  --resource-group myResourceGroup \
  --name centos74 \
  --image OpenLogic:CentOS-CI:7-CI:latest \
  --custom-data cloud-init.txt \
  --generate-ssh-keys 

Cuando se haya creado la VM, la CLI de Azure mostrará información específica a la implementación. Anote el valor de publicIpAddress. Esta dirección se utiliza para tener acceso a la máquina virtual. Transcurre algo de tiempo hasta que la máquina virtual se crea, los paquetes se instalan y la aplicación se inicia. Hay tareas en segundo plano que continúan ejecutándose después de que la CLI de Azure vuelve a abrir el símbolo del sistema. Puede usar SSH en la VM y usar los pasos descritos en la sección de solución de problemas para ver los registros de cloud-init.

También puede implementar una máquina virtual con cloud-init habilitado pasando los parámetros en la plantilla de Resource Manager.

Solución de problemas de cloud-init

Una vez que se ha aprovisionado la máquina virtual, cloud-init se ejecuta en todos los módulos y en el script definido en --custom-data para configurar dicha máquina virtual. Si tiene que solucionar algún error u omisión de la configuración, debe buscar el nombre del módulo (disk_setup o runcmd,0 por ejemplo) en el registro de cloud-init, ubicado en /var/log/cloud-init.log.

Nota

No todos los errores de módulo dan como resultado un error irrecuperable en la configuración global de cloud-init. Por ejemplo, si se usa el módulo runcmd y se produce un error en el script, cloud-init seguirá notificando un aprovisionamiento correcto porque se ejecutó el módulo runcmd.

Para más detalles sobre el registro de cloud-init, consulte la documentación de cloud-init.

Telemetría

cloud-init recopila datos de uso y los envía a Microsoft para ayudar a mejorar los productos y servicios. La telemetría solo se recopila durante el proceso de aprovisionamiento (primer arranque de la VM). Los datos recopilados nos ayudan a investigar los errores de aprovisionamiento y a supervisar el rendimiento y la confiabilidad. Los datos recopilados no incluyen identificadores (identificadores personales). Lea nuestra declaración de privacidad para obtener más información. Algunos ejemplos de la telemetría que se recopila son (no se trata de una lista exhaustiva): información relacionada con el sistema operativo (versión de cloud-init, versión de la distribución, versión del kernel), métricas de rendimiento de acciones esenciales de aprovisionamiento de máquina virtual (tiempo para obtener concesión DHCP, tiempo para recuperar los metadatos necesarios para configurar la máquina virtual, etc.), el registro de cloud-init y el registro dmesg.

La recopilación de telemetría está habilitada actualmente para una gran parte de las imágenes de nuestro marketplace que usan cloud-init. Para habilitarla, especifique el informador de telemetría de KVP para cloud-init. En la mayoría de las imágenes de Azure Marketplace, esta configuración se puede ver en el archivo /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg. Si se quita este archivo durante la preparación de la imagen, se deshabilitará la recopilación de telemetría para toda VM creada a partir de esta imagen.

Contenido de ejemplo de 10-azure-kvp.cfg

reporting:
  logging:
    type: log
  telemetry:
    type: hyperv

Pasos siguientes

Solución de problemas con cloud-init

Para ejemplos de cloud-init de cambios de configuración, vea los siguientes documentos: