Creación de una imagen personalizada de Red Hat Enterprise Linux 7 para Microsoft Azure

¿Está planeando ejecutar Red Hat Enterprise Linux (RHEL) en Azure, o está considerando hacerlo pero desea crear sus propias imágenes? En este artículo, me centraré en crear una imagen de RHEL 7 para ejecutar en instancias de Azure Mv2 (también conocido como Hyper-V Generation 2). La principal diferencia con una imagen estándar es que utilizará la interfaz de firmware extensible unificada (UEFI). Por lo tanto, se requieren opciones adicionales.

Además del enfoque en Mv2, también le daré un buen conjunto de comandos iniciales para que pueda automatizar el proceso de creación de estas imágenes y posiblemente incorporar este proceso en su canalización de CI/CD.

La mayoría de estas instrucciones deberían aplicarse también a la creación de imágenes de Red Hat Enterprise Linux 8, pero esta versión no fue mi enfoque principal.

Índice

Configuración del entorno

Como entorno de compilación, Red Hat Enterprise Linux 8 nos brinda el conjunto adecuado de herramientas para crear imágenes de arranque UEFI. Para reproducir todo aquí, necesitará los siguientes paquetes instalados:

También necesitará una copia del DVD de binarios de Red Hat Enterprise Linux 7.7, que puede Descarga aquí si tiene una suscripción válida de Red Hat. Guardar este DVD como /var/lib/libvirt/images/rhel-server-7.7-x86_64-dvd.iso.

Notar: Cualquier otra versión basada en Red Hat Enterprise Linux 7 u 8 debería hacer esto, pero este tutorial se probó con 7.7.

Para que lo anterior funcione si está ejecutando en una VM, necesitará KVM habilitado en el host o pasado a la VM. Si desea ejecutar este ejemplo en una máquina virtual remota o en otra canalización de CI/CD, hice exactamente eso para poder automatizar el proceso, de modo que pueda ejecutar este ejemplo sin cabeza (no se requiere X, interfaz gráfica de usuario ni transferencia de X).

Construye una imagen de forma automatizada

Necesitamos algunos paquetes instalados en nuestra imagen, así como algunos conjuntos de configuraciones, y se recomienda instalar el cliente de Azure. Mientras buscaba la mejor manera de instalar este cliente de forma automatizada, la única opción que encontré fue obtenerlo del repositorio de extras de CentOS 7 (contácteme y avíseme si conoce alguna mejor manera).

Una muestra kickstart.cfg archivar se puede obtener aquí. Adáptalo a tus necesidades, pero asegúrate de dejar al menos la configuración de red establecida en DHCP.

Cree la imagen con el archivo Kickstart y un comando simple

Para construir la imagen:

$ sudo virt-install 
       --name rhel77 
       --memory 4096 
       --vcpus 4 
       --boot uefi 
       --os-variant rhel7.7 
       -l /var/lib/libvirt/images/rhel-server-7.7-x86_64-dvd.iso 
       --disk size=4 
       --initrd-inject $(pwd)/kickstart.cfg 
       --extra-args="ks=file:/kickstart.cfg console=tty0 console=ttyS0,115200n8" 
       --graphics=none 
       --network network=default 
       --noreboot

Como se mencionó anteriormente, deberá tener la imagen del DVD en el lugar correcto. Mi ejemplo asume que usted:

  • Tienen kickstart.cfg en tu actual $PWD.
  • Quiere un disco de 4 GB.
  • Usa tu local libvirt/Instalación de KVM.
  • No tengo ningún requisito especial de interfaz de red (uso los valores predeterminados).

Convertir la imagen al formato correcto

Luché por convertir la imagen al formato correcto, pero con algunos colegas amigos y Google finalmente encontré el formato requerido: VHD alineado de 1 MB.

La última imagen construida debe ser la correcta:

$ image=$(ls -1tr /var/lib/libvirt/images/rhel*|tail -1)

Use sudo para acceder a la imagen, conviértala a RAW y colóquela en el $PWD actual

$ sudo qemu-img convert -f qcow2 -O raw $image rhel-7.7.raw

Asegúrese de que podamos acceder a él; después de este punto, un "normal" (por ejemplo, el uso no root puede continuar)

$ sudo chown $(whoami) *.raw

Calcular el tamaño de la imagen.

$ MB=$((1024*1024)) size=$(qemu-img info -f raw --output json "rhel-7.7.raw" | gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}') rounded_size=$((($size/$MB + 1)*$MB))

Cambiar el tamaño de la imagen.

$ sudo qemu-img resize -f raw rhel-7.7.raw $rounded_size

Convierta la imagen de RAW a VHD y fuerce el tamaño correcto

$ sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.7.raw rhel-7.7.vhd

Crear un grupo

Ahora tiene su propia imagen personalizada de Red Hat Enterprise Linux 7. Probablemente se esté preguntando cómo cargarlo en Azure y usarlo para ejecutar una instancia. Lea más. Como tuve que probar todo mi proceso de compilación, también lo hice.

Seguirá necesitando un grupo de recursos en Azure. he elegido westus2 como mi región, pero cualquier otra debería funcionar también (si tienen instancias Mv2). El nombre de mi grupo de recursos es simplemente myresourcegroup. Si quieres usar otro nombre, tendrás que sustituirlo en todos los lugares donde lo he usado.

Para crear su grupo, cree un grupo de recursos AZ en westus2 y asígnele el nombre "myresourcegroup".

$ sudo az group create -l westus2 -n myresourcegroup

Descargue la imagen del disco y conviértala en una imagen de Azure

Para descargar la imagen de disco y convertirla en una imagen de Azure, cree el disco en Azure con el nombre "rhel-7", en nuestro grupo de recursos "myresourcegroup" creado anteriormente.

$ sudo az disk delete --name rhel-7 -g myresourcegroup -y

Asegúrese de que sea Hyper-V Gen 2 y el tipo de sistema operativo Linux con el tamaño correcto.

$ sudo az disk create --hyper-v-generation V2 -g myresourcegroup -n rhel-7 --os-type Linux -l westus2 --for-upload --upload-size-bytes $(wc -c rhel-7.7.vhd|awk '{ print $1 }') --sku standard_lrs

Necesitas un SASURI para la descarga.

$ SASURI=$(az disk grant-access -n rhel-7 -g myresourcegroup --access-level Write --duration-in-seconds 86400 --query [accessSas] -o tsv)

Esto usa azcopy para copiar la imagen (azcopy debe estar en tu $PATH en alguna parte)

$ sudo azcopy $(pwd)/rhel-7.7.vhd $SASURI --blob-type PageBlob

Una vez completada la descarga, debemos revocar el acceso; de lo contrario, no se puede usar la imagen del disco.

$ sudo az disk revoke-access -n rhel-7 -g myresourcegroup

Finalmente, márquelo como una imagen del sistema operativo Hyper-V, Gen 2.

$ sudo az image create -g myresourcegroup -n rhel-7 --os-type Linux --hyper-v-generation V2 --source rhel-7

Ejecución de imagen

Uno se imaginaría que en ese momento todo estaba claro y manejar una imagen sería fácil. Si todo está en su lugar, sí, lo está. Pero cuando trabajé en este ejemplo, olvidé por completo el último paso del párrafo anterior y no marqué la imagen del disco como una imagen de Azure, lo que me impidió proporcionar la clave SSH o admin-username.

De cualquier manera, con las instrucciones anteriores, debería estar listo para ejecutar la imagen. El siguiente comando asume que está ejecutando esta herramienta como usuario raíz y utilizando la clave SSH del usuario raíz. Adapta lo que tengo aquí a tus necesidades:

$ sudo az vm create  
      --resource-group myresourcegroup 
      --location westus2 
      --name rhel-7 
      --image rhel-7 
      --admin-username cloud-user 
      --ssh-key-value @/root/.ssh/id_rsa.pub

Si necesita un diagnóstico de arranque, deberá crear una cuenta de almacenamiento con el nombre "storageaccount123" usando el siguiente comando:

$ sudo az Almacenamiento account create -n storageaccount123 -g myresourcegroup -l westus2 --sku Standard_LRS

Lo anterior az vm create El comando debe ampliarse con el siguiente parámetro para registrar mensajes y diagnósticos de arranque en la cuenta de almacenamiento que acabamos de crear:

--boot-diagnostics-Almacenamiento storageaccount123

Notar: No necesita habilitar los diagnósticos de arranque y, si lo hace, es posible que deba adaptar el nombre de la cuenta de almacenamiento.

Conexión a la instancia de Azure

Desde az vm create comando, debe obtener una salida que contenga la dirección IP. Ahora debería poder iniciar sesión automáticamente, dado que la clave SSH viene con:

$ ssh [email protected]<azure-ip>

Envoltura

Antes de explorar las posibilidades de crear imágenes de Red Hat Enterprise Linux 7 para instancias de Azure Mv2 de forma automatizada, no tenía experiencia previa con Azure, por lo que fue todo un viaje. Todavía no me considero un experto en Azure y probablemente falten cosas. Me gustaría escuchar sus opiniones para mejorar esta configuración si es necesario.

Los scripts y comandos que usé para este artículo se puede encontrar aquí. Las solicitudes de extracción son bienvenidas, al igual que los clones.

Artículos de interés

Subir