Preparare un disco rigido virtuale Debian per Azure

Si applica a: ✔️ Set di scalabilità flessibili di macchine virtuali ✔️ Linux

Prerequisiti

In questa sezione si presuppone che un sistema operativo Linux Debian sia già stato installato da un file .iso scaricato dal sito Web di Debian in un disco rigido virtuale. Sono disponibili vari strumenti per creare file con estensione .vhd; Hyper-V è solo un esempio. Per istruzioni sull’uso di Hyper-V, vedere Installare il ruolo Hyper-V e configurare una macchina virtuale.

Note sull'installazione

  • Vedere anche Note generali sull'installazione di Linux per altri suggerimenti sulla preparazione di Linux per Azure.
  • Il formato VHDX più recente non è supportato in Azure. È possibile convertire il disco in formato VHD tramite la console di gestione di Hyper-V o il cmdlet convert-vhd .
  • Durante l'installazione del sistema Linux è consigliabile usare partizioni standard anziché LVM, che è spesso la scelta predefinita per numerose installazioni. In questo modo sarà possibile evitare conflitti di nome LVM con le macchine virtuali clonate, in particolare se fosse necessario collegare un disco del sistema operativo a un'altra macchina virtuale per la risoluzione dei problemi. Se si preferisce, su dischi di dati si può usare LVM o RAID.
  • Non configurare una partizione swap nel disco del sistema operativo. L'agente Linux di Azure può essere configurato in modo da creare un file swap sul disco temporaneo delle risorse. Altre informazioni sono disponibili nei passaggi seguenti.
  • Le dimensioni virtuali di tutti i dischi rigidi virtuali su Azure devono essere allineate a 1 MB. Quando si converte un disco non formattato in un disco rigido virtuale, prima della conversione è necessario assicurarsi che le dimensioni del disco non formattato siano un multiplo di 1 MB. Per altre informazioni, vedere Note sull'installazione di Linux.

Utilizzare Azure-Manage per creare dischi rigidi virtuali Debian

Sono disponibili strumenti per la generazione di dischi rigidi virtuali Debian per Azure, ad esempio gli script azure-manage da Instaclustr. Questo è l'approccio consigliato rispetto alla creazione di un'immagine da zero. Ad esempio, per creare un disco rigido virtuale Debian 8, eseguire i comandi seguenti per scaricare l'utilità azure-manage (e le dipendenze) ed eseguire lo 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

Preparare un'immagine Debian per Azure

È possibile creare l'immagine Debian Cloud di Base di Azure con il generatore di immagini cloud FAI.

(I comandi git clone e apt install seguenti sono stati estratti dal repository Debian Cloud Images) Per iniziare, clonare il repository e installare le dipendenze:

$ 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

(Facoltativo) Personalizzare la compilazione aggiungendo script (ad esempio script della shell) a ./config_space/scripts/AZURE.

Un esempio di script per personalizzare l'immagine è:

$ 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

Si noti che è importante anteporre a tutti i comandi con cui si vuole personalizzare l'immagine perché $ROOTCMD è con alias come chroot $target.

Creare l'immagine Debian 10 di Azure:

$ make image_buster_azure_amd64

Verrà restituito un numero limitato di file nella directory corrente, in particolare il image_buster_azure_amd64.raw file di immagine.

Per convertire l'immagine non elaborata in VHD per Azure, è possibile eseguire le operazioni seguenti:

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"

In questo modo viene creato un disco rigido image_buster_azure_amd64.vhd virtuale con dimensioni arrotondate per poterlo copiare correttamente in un disco di Azure.

A questo punto è necessario creare le risorse di Azure per questa immagine ( questa usa la $rounded_size_adjusted variabile , quindi deve trovarsi all'interno dello stesso processo della shell precedente).

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

Se la larghezza di banda dal computer locale al disco di Azure causa molto tempo per elaborare il caricamento con azcopy, è possibile usare un jumpbox della macchina virtuale di Azure per velocizzare il processo. Ecco come eseguire questa operazione:

  1. Creare un tarball del disco rigido virtuale nel computer locale: tar -czvf ./image_buster_azure_amd64.vhd.tar.gz ./image_buster_azure_amd64.vhd.
  2. Creare una macchina virtuale Linux di Azure (distribuzione preferita). Assicurarsi di crearlo con un disco sufficientemente grande per contenere il disco rigido virtuale estratto.
  3. Scaricare l'utilità azcopy nella macchina virtuale Linux di Azure. Può essere recuperato da qui.
  4. Copiare il file tarball nella macchina virtuale: scp ./image_buster_azure_amd64.vhd.tar.gz <vm>:~.
  5. Nella macchina virtuale estrarre il disco rigido virtuale: tar -xf ./image_buster_azure_amd64.vhd.tar.gz (questa operazione richiederà un po' di tempo in base alle dimensioni del file).
  6. Infine nella macchina virtuale copiare il disco rigido virtuale nel disco di Azure con azcopy (il comando riportato sopra).

Passaggi successivi: è ora possibile usare il disco rigido virtuale Debian Linux per creare nuove macchine virtuali in Azure. Se è la prima volta che si carica il file VHD in Azure, vedere Creare una macchina virtuale Linux da un disco personalizzato.