Compatibilidad con cloud-init para máquinas virtuales en Azure
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 pasa 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 24.04 | UbuntuServer | 22.04-LTS | latest | sí | sí |
Canonical 22.04 | UbuntuServer | 22.04-LTS | latest | sí | sí |
Canonical 20.04 | UbuntuServer | 20.04-LTS | latest | sí | sí |
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 | sí | sí |
RedHat 8 | RHEL | 8.1, 8.2, 8_3 y 8_4 | latest | sí | sí |
RedHat 9 | RHEL | 9_0, 9_1 | latest | sí | sí |
- 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.
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 | sí | sí |
Oracle 8 | Oracle Linux | 81, ol82, ol83-lvm y ol84-lvm | latest | sí | sí |
- 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 | sí | sí |
SUSE 12 | SLES (SUSE Linux Enterprise Server) | sp5 | latest | sí | sí |
Debian
Publicador o versión | Oferta | SKU | Versión | Imagen preparada para cloud-init | compatibilidad con paquetes de cloud-init en Azure |
---|---|---|---|---|---|
debian-10 | Debian | 10-cloudinit-gen2 | Debian:debian-10:10-cloudinit-gen2:0.0.1015 | sí | sí |
debian-10 | Debian | 10-cloudinit-gen2 | Debian:debian-10:10-cloudinit-gen2:0.0.991 | sí | sí |
debian-10 | Debian | 10-cloudinit-gen2 | Debian:debian-10:10-cloudinit-gen2:0.0.999 | sí | sí |
Actualmente, Azure Stack admite 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 extensiones de Azure, por lo que WALA sigue siendo necesaria en la imagen para procesar extensiones, pero debe tener deshabilitado su código de aprovisionamiento. En el caso de las imágenes de distribución de Linux aprobadas que se están convirtiendo en aprovisionadas por cloud-init, tienen WALA instalado y se configuran 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 es cierto 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 confirme 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. Utilice el editor de su elección. Algunas opciones típicas son nano, vimo ed. 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.
Salga del archivo y guarde el archivo según el editor. Compruebe 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 "ubuntu2204
" 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 ubuntu2204 \
--image Canonical:UbuntuServer:22_04-lts:latest \
--custom-data cloud-init.txt \
--generate-ssh-keys
Cuando se cree 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 obtener más información 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 deshabilita 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:
- Incorporación de otro usuario de Linux a una máquina virtual
- Ejecución de un administrador de paquetes para actualizar los existentes durante el primer arranque
- Cambio del nombre de host de la máquina virtual local
- Instalación de un paquete de aplicación, actualización de los archivos de configuración e inserción de claves