Preparar VHD en Debian de Azure

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

Prerequisites

En esta sección, se supone que ya instaló en un sistema operativo Debian Linux desde un archivo .iso que obtuvo del sitio web Debian y que descargó a un disco duro virtual. Existen varias herramientas para crear archivos .vhd; Hyper-V es solo un ejemplo. Para obtener instrucciones acerca de cómo usar Hyper-V, consulte Instalación del rol de Hyper-V y configuración de una máquina virtual.

Notas de instalación

  • Consulte también las Notas generales sobre la instalación de Linux para obtener más consejos sobre la preparación de Linux para Azure.
  • el reciente formato VHDX no se admite en Azure. Puede convertir el disco al formato VHD con el Administrador de Hyper-V o el cmdlet convert-vhd .
  • Al instalar el sistema Linux, se recomienda utilizar las particiones estándar en lugar de un LVM (que a menudo viene de forma predeterminada en muchas instalaciones). De este modo se impedirá que el nombre del LVM entre en conflicto con las máquinas virtuales clonadas, especialmente si en algún momento hace falta adjuntar un disco de SO a otra máquina virtual para solucionar problemas. LVM o RAID se pueden utilizar en discos de datos si así se prefiere.
  • No cree una partición de intercambio en el disco del SO. El agente de Linux de Azure se puede configurar para crear un archivo de intercambio en el disco de recursos temporal. Puede encontrar más información en los pasos que vienen a continuación.
  • En Azure, todos los discos duros virtuales deben tener un tamaño virtual alineado con 1 MB. Al convertir un disco sin procesar en un disco duro virtual, tiene que asegurarse de que su tamaño es un múltiplo de 1 MB antes de la conversión. Para obtener más información, consulte las Notas sobre la instalación de Linux.

Uso de Azure-Manage para crear VHD Debian

Hay herramientas disponibles para generar un VHD de Debian para Azure, como los scripts azure-manage de Instaclustr. Este es el enfoque recomendado, en lugar de crear una imagen desde el principio. Por ejemplo, para crear un VHD de Debian 8, ejecute los comandos siguientes para descargar la utilidad azure-manage (y sus dependencias) y ejecute el script azure_build_image:

# sudo apt-get update
# sudo apt-get install git qemu-utils mbr kpartx debootstrap

# sudo apt-get install python3-pip python3-dateutil python3-cryptography
# sudo pip3 install azure-storage azure-servicemanagement-legacy azure-common pytest pyyaml
# git clone https://github.com/credativ/azure-manage.git
# cd azure-manage
# sudo pip3 install .

# sudo azure_build_image --option release=jessie --option image_size_gb=30 --option image_prefix=debian-jessie-azure section

Preparación de una imagen de Debian para Azure

Puede crear la imagen base de nube de Debian para Azure con el generador de imágenes de nube de FAI.

(Los siguientes comandos git clone y apt install se han extraído del repositorio Debian Cloud Images). Empiece por clonar el repositorio e instalar las dependencias:

$ git clone https://salsa.debian.org/cloud-team/debian-cloud-images.git
$ sudo apt install --no-install-recommends ca-certificates debsums dosfstools \
    fai-server fai-setup-storage make python3 python3-libcloud python3-marshmallow \
    python3-pytest python3-yaml qemu-utils udev
$ cd ./debian-cloud-images

(Opcional) Personalice la compilación agregando scripts (por ejemplo, scripts de shell) a ./config_space/scripts/AZURE.

Un ejemplo de un script para personalizar la imagen es:

$ mkdir -p ./config_space/scripts/AZURE
$ cat > ./config_space/scripts/AZURE/10-custom <<EOF
#!/bin/bash

\$ROOTCMD bash -c "echo test > /usr/local/share/testing"
EOF
$ sudo chmod 755 ./config_space/scripts/AZURE/10-custom

Tenga en cuenta que es importante preceder los comandos con los que quiera personalizar la imagen con $ROOTCMD, ya que esto se conoce como chroot $target.

Cree la imagen de Debian 10 de Azure:

$ make image_buster_azure_amd64

Como resultado se generarán unos cuantos archivos en el directorio actual, especialmente el archivo de imagen image_buster_azure_amd64.raw.

Para convertir la imagen sin formato en VHD para Azure, puede hacer lo siguiente:

rawdisk="image_buster_azure_amd64.raw"
vhddisk="image_buster_azure_amd64.vhd"

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

rounded_size=$(((($size+$MB-1)/$MB)*$MB))
rounded_size_adjusted=$(($rounded_size + 512))

echo "Rounded Size Adjusted = $rounded_size_adjusted"

sudo qemu-img resize "$rawdisk" $rounded_size
qemu-img convert -f raw -o subformat=fixed,force_size -O vpc "$rawdisk" "$vhddisk"

Se crea un archivo VHD image_buster_azure_amd64.vhd con un tamaño redondeado para poder copiarlo correctamente en un disco de Azure.

Ahora es necesario crear los recursos de Azure de esta imagen (para ello se usa la variable $rounded_size_adjusted, por lo que debe hacerse desde el mismo proceso de shell anterior).

az group create -l $LOCATION -n $RG

az disk create \
    -n $DISK \
    -g $RG \
    -l $LOCATION \
    --for-upload --upload-size-bytes "$rounded_size_adjusted" \
    --sku standard_lrs --hyper-v-generation V1

ACCESS=$(az disk grant-access \
    -n $DISK -g $RG \
    --access-level write \
    --duration-in-seconds 86400 \
    --query accessSas -o tsv)

azcopy copy "$vhddisk" "$ACCESS" --blob-type PageBlob

az disk revoke-access -n $DISK -g $RG
az image create \
    -g $RG \
    -n $IMAGE \
    --os-type linux \
    --source $(az disk show \
        -g $RG \
        -n $DISK \
        --query id -o tsv)
az vm create \
    -g $RG \
    -n $VM \
    --ssh-key-value $SSH_KEY_VALUE \
    --public-ip-address-dns-name $VM \
    --image $(az image show \
        -g $RG \
        -n $IMAGE \
        --query id -o tsv)

Nota:

Si el ancho de banda desde la máquina local hasta el disco de Azure está haciendo que se tarde mucho tiempo en procesar la carga con azcopy, puede usar un JumpBox de máquina virtual de Azure para acelerar el proceso. Así es cómo se puede hacer:

  1. Cree un tarball del VHD en la máquina local: tar -czvf ./image_buster_azure_amd64.vhd.tar.gz ./image_buster_azure_amd64.vhd.
  2. Cree una máquina virtual Linux de Azure (la distribución que prefiera). Asegúrese de crearla con un disco lo suficientemente grande como para contener el VHD extraído.
  3. Descargue la utilidad azcopy en la máquina virtual Linux de Azure. Se puede recuperar desde aquí.
  4. Copie el tarball en la máquina virtual: scp ./image_buster_azure_amd64.vhd.tar.gz <vm>:~.
  5. En la máquina virtual, extraiga el VHD: tar -xf ./image_buster_azure_amd64.vhd.tar.gz; esta operación tardará algo de tiempo según el tamaño del archivo.
  6. Por último, en la máquina virtual, copie el VHD en el disco de Azure azcopy (con el comando anterior).

Siguientes pasos: ya está listo para usar el disco duro virtual de Debian Linux para crear máquinas virtuales de Azure. Si es la primera vez que carga el archivo .vhd en Azure, vea Crear una VM Linux a partir de un disco personalizado.