Preparare una macchina virtuale Ubuntu per Azure
Si applica a: ✔️ macchine virtuali di Linux ✔️ set di scalabilità flessibili
Attualmente, Ubuntu pubblica dischi rigidi virtuali (VHD) di Azure ufficiali per il download nella pagina Web delle immagini cloud Ubuntu. Se si deve creare un'immagine Ubuntu specializzata per Azure, invece di seguire la procedura manuale riportata di seguito, iniziare con questi VHD sicuramente funzionanti e personalizzarli in base alle esigenze. Le ultime versioni delle immagini sono sempre disponibili nelle posizioni seguenti:
- Ubuntu 18.04/Bionic: bionic-server-cloudimg-amd64-azure.vhd.zip
- Ubuntu 20.04/Focal: focal-server-cloudimg-amd64-azure.vhd.zip
- Ubuntu 22.04/Jammy: jammy-server-cloudimg-amd64-azure.vhd.zip
Prerequisiti
In questo articolo si presuppone che l'utente abbia già installato un sistema operativo Ubuntu Linux in un disco rigido virtuale. Sono disponibili vari strumenti per la creazione di file VHD. Un 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
- Per altri suggerimenti sulla preparazione di Linux per Azure, vedere Note generali sull'installazione di Linux.
- Il formato VHDX non è supportato in Azure, solo nei VHD fissi. È possibile convertire il disco in formato VHD tramite la console di gestione di Hyper-V o il cmdlet
Convert-VHD
. - Quando si installa il sistema Linux è consigliabile usare partizioni standard anziché LVM (Logical Volume Manager), che è spesso l'impostazione predefinita per numerose installazioni. Queste partizioni standard consentono di 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. È possibile usare LVM o RAID anche su dischi di dati.
- Non configurare una partizione di scambio o un file di scambio nel disco del sistema operativo. È possibile configurare l'agente di provisioning
cloud-init
per creare un file di scambio o una partizione di scambio sul disco temporaneo delle risorse. Per altre informazioni su questo processo, vedere i passaggi seguenti. - Le dimensioni di tutti i dischi rigidi virtuali in 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 dalla pagina Web delle immagini cloud Ubuntu.
Nel riquadro centrale della console di gestione di Hyper-V selezionare la macchina virtuale.
Selezionare Connetti per aprire la finestra per la macchina virtuale.
Sostituire gli archivi correnti nell'immagine in modo da usare quello Azure di Ubuntu.
Prima di modificare
/etc/apt/sources.list
, è 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
Le immagini Ubuntu di Azure usano ora il kernel su misura di Azure. Aggiornare il sistema operativo alla versione più recente del kernel su misura di Azure e installare gli strumenti Linux di Azure (incluse le dipendenze di Hyper-V):
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
Modificare la riga di avvio del kernel per GRUB in modo da includere ulteriori parametri del kernel per Azure. Per questo passaggio, aprire
/etc/default/grub
in un editor di testo, trovare la variabile denominataGRUB_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
. Questo passaggio 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.Verificare che il server SSH sia installato e configurato per l'esecuzione all'avvio. Questa è in genere l'impostazione predefinita.
Installare
cloud-init
(agente di provisioning) e l'agente Linux di Azure (gestore delle estensioni guest).Cloud-init
usanetplan
per configurare la configurazione di rete di sistema (durante il provisioning e ogni avvio successivo) egdisk
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 pacchettiNetworkManager
eNetworkManager-gnome
, se installati.Rimuovere le configurazioni predefinite di
cloud-init
e gli artefattinetplan
che potrebbero essere in conflitto con il provisioning dicloud-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
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
Configurare l'agente Linux di Azure per fare affidamento 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
Pulire
cloud-init
e gli artefatti e i log del runtime 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
Effettuare il deprovisioning della macchina virtuale e prepararla per il provisioning in Azure.
Nota
Il comando
sudo waagent -force -deprovision+user
generalizza l'immagine tentanto di pulire il sistema per renderlo idoneo per un nuovo provisioning. L'opzione+user
elimina l'ultimo account utente di cui è stato effettuato il provisioning e i dati associati.sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history
Avviso
Il deprovisioning con il comando precedente non garantisce che vengano cancellate tutte le informazioni sensibili dall'immagine e che l'immagine sia adatta per la ridistribuzione.
Selezionare Azione>Arresta nella console di gestione di Hyper-V.
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 cmdlet di PowerShell
Convert-VHD
e specificare l'opzione-VHDType Fixed
. Per altre informazioni, vedere la documentazione perConvert-VHD
in Convert-VHD.Per portare una macchina virtuale di seconda generazione in Azure, seguire questa procedura:
Passare alla directory
boot EFI
:cd /boot/efi/EFI
Copiare la directory
ubuntu
in una nuova directory denominataboot
:sudo cp -r ubuntu/ boot
Passare alla cartella di avvio appena creata:
cd boot
Rinominare il file
shimx64.efi
:sudo mv shimx64.efi bootx64.efi
Rinominare il file
grub.cfg
inbootx64.cfg
:sudo mv grub.cfg bootx64.cfg
Contenuto correlato
È ora possibile usare il file del disco rigido virtuale di 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.