Preparare una macchina virtuale Ubuntu per Azure

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

Ubuntu attualmente pubblica dischi rigidi virtuali di Azure ufficiali per il download all'indirizzo https://cloud-images.ubuntu.com/. Se è necessario creare un'immagine Ubuntu specializzata per Azure, anziché usare la procedura manuale riportata di seguito, è consigliabile iniziare con questi dischi rigidi virtuali funzionanti noti e personalizzare in base alle esigenze. Le ultime versioni delle immagini sono sempre disponibili nei seguenti percorsi:

Prerequisiti

Questo articolo presuppone che sia già stato installato un sistema operativo Ubuntu Linux in un disco rigido virtuale. Sono disponibili vari strumenti per creare file con estensione vhd, ad esempio una soluzione di virtualizzazione come Hyper-V. Per istruzioni, vedere Installare il ruolo Hyper-V e configurare una macchina virtuale.

Note sull'installazione di Ubuntu

  • Vedere anche Note generali sull'installazione di Linux per altri suggerimenti sulla preparazione di Linux per Azure.
  • Il formato VHDX non è supportato in Azure, ma solo un disco rigido virtuale fisso. È possibile convertire il disco in formato VHD usando la console di gestione di Hyper-V o il Convert-VHD cmdlet .
  • Quando si installa il sistema Linux, è consigliabile usare partizioni standard anziché LVM (spesso l'impostazione predefinita per molte 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 di scambio o un file di scambio sul disco del sistema operativo. L'agente di provisioning cloud-init può essere configurato per creare un file di scambio o una partizione di scambio sul disco risorse temporaneo. Altre informazioni su questo argomento 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.

Passaggi manuali

Nota

Prima di provare a creare un'immagine personalizzata di Ubuntu per Azure, valutare in alternativa la possibilità di usare le immagini predefinite e testate di https://cloud-images.ubuntu.com/.

  1. Nel riquadro centrale della console di gestione di Hyper-V selezionare la macchina virtuale.

  2. Fare clic su Connect per aprire la finestra della macchina virtuale.

  3. Sostituire i repository correnti nell'immagine per usare il repository Azure di Ubuntu.

    Prima di /etc/apt/sources.listmodificare , è consigliabile eseguire un backup:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo sed -i 's#http://archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
sudo sed -i 's#http://[a-z][a-z]\.archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
sudo sed -i 's#http://security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
sudo sed -i 's#http://[a-z][a-z]\.security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
sudo apt-get update
  1. Le immagini ubuntu di Azure usano ora il kernel personalizzato di Azure. Aggiornare il sistema operativo alla versione più recente del kernel personalizzato di Azure e installare gli strumenti Linux di Azure (incluse le dipendenze hyper-V) eseguendo i comandi seguenti:
sudo apt update
sudo apt install linux-azure linux-image-azure linux-headers-azure linux-tools-common linux-cloud-tools-common linux-tools-azure linux-cloud-tools-azure
sudo apt full-upgrade
sudo reboot
  1. Modificare la riga di avvio del kernel per Grub in modo da includere ulteriori parametri del kernel per Azure. A questo scopo, aprire /etc/default/grub in un editor di testo, trovare la variabile denominata GRUB_CMDLINE_LINUX_DEFAULT (o aggiungerla, se necessario) e modificarla in modo da includere i parametri seguenti:
GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300 quiet splash"

Salvare e chiudere il file e quindi eseguire sudo update-grub. In questo modo si garantisce che tutti i messaggi della console vengano inviati alla prima porta seriale, agevolando così il supporto tecnico di Azure nella risoluzione dei problemi di debug.

  1. Verificare che il server SSH sia installato e configurato per l'esecuzione all'avvio. Questo è in genere il valore predefinito.

  2. Installare cloud-init (agente di provisioning) e l'agente Linux di Azure (gestore delle estensioni guest). Cloud-init usa netplan per configurare la configurazione di rete di sistema (durante il provisioning e ogni avvio successivo) e gdisk per partizionare i dischi delle risorse.

sudo apt update
sudo apt install cloud-init gdisk netplan.io walinuxagent && systemctl stop walinuxagent

Nota

Il pacchetto walinuxagent potrebbe rimuovere i pacchetti NetworkManager e NetworkManager-gnome, se installati.

  1. Rimuovere le configurazioni predefinite di cloud-init e gli artefatti di sinistra netplan che possono essere in conflitto con il provisioning cloud-init in Azure:
sudo rm -f /etc/cloud/cloud.cfg.d/50-curtin-networking.cfg /etc/cloud/cloud.cfg.d/curtin-preserve-sources.cfg /etc/cloud/cloud.cfg.d/99-installer.cfg /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg
sudo rm -f /etc/cloud/ds-identify.cfg
sudo rm -f /etc/netplan/*.yaml
  1. Configurare cloud-init per effettuare il provisioning del sistema usando l'origine dati di Azure:
cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg
datasource_list: [ Azure ]
EOF

cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/90-azure.cfg
system_info:
   package_mirrors:
     - arches: [i386, amd64]
       failsafe:
         primary: http://archive.ubuntu.com/ubuntu
         security: http://security.ubuntu.com/ubuntu
       search:
         primary:
           - http://azure.archive.ubuntu.com/ubuntu/
         security: []
     - arches: [armhf, armel, default]
       failsafe:
         primary: http://ports.ubuntu.com/ubuntu-ports
         security: http://ports.ubuntu.com/ubuntu-ports
EOF

cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg
reporting:
  logging:
    type: log
  telemetry:
    type: hyperv
EOF
  1. Configurare l'agente Linux di Azure in modo che si basi su cloud-init per eseguire il provisioning. Per altre informazioni su queste opzioni, vedere il progetto WALinuxAgent.
sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/g' /etc/waagent.conf
sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=y/g' /etc/waagent.conf
sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
cat <<EOF | sudo tee -a /etc/waagent.conf
# For Azure Linux agent version >= 2.2.45, this is the option to configure,
# enable, or disable the provisioning behavior of the Linux agent.
# Accepted values are auto (default), waagent, cloud-init, or disabled.
# A value of auto means that the agent will rely on cloud-init to handle
# provisioning if it is installed and enabled, which in this case it will.
Provisioning.Agent=auto
EOF
  1. Pulire gli artefatti e i log del runtime dell'agente Cloud-init e dell'agente Linux di Azure:
sudo cloud-init clean --logs --seed
sudo rm -rf /var/lib/cloud/
sudo systemctl stop walinuxagent.service
sudo rm -rf /var/lib/waagent/
sudo rm -f /var/log/waagent.log
  1. Eseguire i comandi seguenti per effettuare il deprovisioning della macchina virtuale e prepararla per il provisioning in Azure:

Nota

Il sudo waagent -force -deprovision+user comando generalizza l'immagine tentando di pulire il sistema e renderla adatta per il nuovo provisioning. L'opzione +user elimina l'ultimo account utente con provisioning e i dati associati.

Avviso

Il deprovisioning con il comando precedente non garantisce che l'immagine sia cancellata da tutte le informazioni riservate ed è adatta per la ridistribuzione.

sudo waagent -force -deprovision+user
sudo rm -f ~/.bash_history
  1. Fare clic su Azione> Arresta nella console di gestione di Hyper-V.

  2. Azure accetta solo dischi rigidi virtuali di dimensioni fisse. Se il disco del sistema operativo della macchina virtuale non è un disco rigido virtuale di dimensioni fisse, usare il Convert-VHD cmdlet di PowerShell e specificare l'opzione -VHDType Fixed . Vedere la documentazione qui Convert-VHD : Convert-VHD.

  3. Per portare una macchina virtuale di seconda generazione in Azure, seguire questa procedura:

  4. Cambiare directory nella directory di avvio EFI:

cd /boot/efi/EFI
  1. Copiare la directory ubuntu in una nuova directory denominata boot:
sudo cp -r ubuntu/ boot
  1. Passare alla directory nella directory di avvio appena creata:
cd boot
  1. Rinominare il file shimx64.efi:
sudo mv shimx64.efi bootx64.efi
  1. Rinominare il file grub.cfg in bootx64.cfg:
sudo mv grub.cfg bootx64.cfg

Passaggi successivi

È ora possibile usare il disco rigido virtuale Ubuntu 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.