Preparare una macchina virtuale basata su RedHat per Azure
Si applica a: set di scalabilità uniformi di ✔️ macchine virtuali Linux ✔️ ✔️
In questo articolo viene descritto come preparare una macchina virtuale Red Hat Enterprise Linux (RHEL) per l'utilizzo in Azure. Le versioni di RHEL descritte in questo articolo sono 7.x, 8.X., 9.x. Gli hypervisor per la preparazione illustrati in questo articolo sono Hyper-V, VM basate su kernel (KVM), VMware e Kickstart.
Per altre informazioni sui requisiti di idoneità per partecipare al programma di accesso al cloud di Red Hat, vedere gli articoli relativi al sito web di accesso al cloud di Red Hat e all'esecuzione di RHEL in Azure. Per informazioni su come automatizzare la compilazione di immagini RHEL, vedere Image Builder di Azure.
Nota
Tenere presente le versioni che si trovano alla fine del ciclo di vita (EOL) e non sono più supportate da Red Hat. Le immagini caricate che si trovano alla fine del servizio o l’hanno oltrepassato sono supportate ragionevolmente in base all’azienda. Per altre informazioni, vedere i cicli di vita del prodotto di Red Hat.
Prerequisiti
In questa sezione si presuppone che si sia già ottenuto un file ISO dal sito Web Red Hat e che sia già stata installata un'immagine RHEL in un disco rigido virtuale (VHD). Per altre informazioni su come usare la console di gestione di Hyper-V per installare un'immagine del sistema operativo, vedere l'articolo su come installare il ruolo Hyper-V e configurare una macchina virtuale.
Note sull'installazione di RHEL
- Azure non supporta il formato VHDX. Azure supporta solo dischi rigidi virtuali a dimensione fissa. È possibile usare la console di gestione di Hyper-V o il cmdlet
convert-vhd
. Se si usa VirtualBox, durante la creazione del disco selezionare Fixed size (A dimensione fissa) anziché l'opzione predefinita di allocazione dinamica. - Azure supporta macchine virtuali Gen1 (avvio BIOS) e Gen2 (avvio UEFI).
- La dimensione massima consentita per il disco rigido virtuale è 1.023 GB.
- Il modulo kernel vfat deve essere abilitato nel kernel.
- LVM (Logical Volume Manager) è supportato e può essere usato nel disco del sistema operativo o nei dischi dati in macchine virtuali di Azure. In genere è consigliabile usare partizioni standard sul disco del sistema operativo anziché LVM. Questa procedura consente di evitare conflitti di nome LVM con le macchine virtuali clonate, in particolare se fosse eventualmente necessario collegare un disco del sistema operativo a un'altra macchina virtuale identica per la risoluzione dei problemi. Per altre informazioni, vedere la documentazione di LVM e RAID.
- Per montare file system UDF (Universal Disk Format) è necessario il supporto del kernel. Al primo avvio in Azure, i supporti con formattazione UDF collegati al guest passano la configurazione di provisioning alla macchina virtuale Linux. È necessario che l'agente Linux di Azure possa montare il file system UDF per leggere la relativa configurazione ed eseguire il provisioning della macchina virtuale. Senza questo passaggio, il provisioning ha esito negativo.
- Non configurare una partizione di swapping sul disco del sistema operativo. Per altre informazioni, leggere 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, leggere i passaggi seguenti. Vedere anche Note generali sull'installazione di Linux.
Nota
Cloud-init >= 21.2 rimuove il requisito di UDF. Senza il modulo UDF abilitato, tuttavia, il CD-ROM non verrà montato durante il provisioning, impedendo l'applicazione dei dati personalizzati. Una soluzione alternativa consiste nell'applicare i dati personalizzati usando i dati utente. A differenza dei dati personalizzati, i dati utente non sono crittografati. Per altre informazioni, vedere Formati dei dati utente.
- RHEL 7 con la console di gestione di Hyper-V
- RHEL 8+/9+ con la console di gestione di Hyper-V
- RHEL 7 con KVM
- RHEL 8+/9+ utilizzando KVM
- RHEL 7 con VMware
- RHEL 8+/9+ con VMware
- RHEL 7 con Kickstart
- RHEL 8+/9+ con Kickstart
Nella Console di gestione di Hyper-V, selezionare la macchina virtuale.
Selezionare Connetti per aprire una finestra della console per la macchina virtuale.
Creare o modificare il file
/etc/sysconfig/network
e aggiungere il testo seguente:NETWORKING=yes HOSTNAME=localhost.localdomain
Creare o modificare il file
/etc/sysconfig/network-scripts/ifcfg-eth0
e aggiungere il testo seguente:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no PERSISTENT_DHCLIENT=yes NM_CONTROLLED=yes
Nota
Quando si usa rete accelerata, l'interfaccia sintetica creata deve essere configurata in modo da non essere gestita usando una regola Udev. Questa azione impedisce a
NetworkManager
di assegnare lo stesso indirizzo IP dell'interfaccia primaria.Per applicarla:
sudo tee <<EOF /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules > /dev/null # Accelerated Networking on Azure exposes a new SRIOV interface to the VM. # This interface is transparently bonded to the synthetic interface, # so NetworkManager should just ignore any SRIOV interfaces. SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1" EOF
Assicurarsi che il servizio di rete venga avviato all'avvio:
sudo systemctl enable network
Registrare la propria sottoscrizione Red Hat per abilitare l'installazione dei pacchetti dall'archivio RHEL:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
Modificare la riga di avvio del kernel nella configurazione GRUB per includere altri parametri del kernel per Azure. Per eseguire questa modifica, aprire
/etc/default/grub
in un editor di testo e modificare il parametroGRUB_CMDLINE_LINUX
. Ad esempio:GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0 net.ifnames=0" GRUB_TERMINAL_OUTPUT="serial console" GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1" ENABLE_BLSCFG=true
Nota
Se ENABLE_BLSCFG=false è presente in
/etc/default/grub
anzichéENABLE_BLSCFG=true
, strumenti come grubedit o gubby, che si basano sulla specifica del caricatore di avvio (BLS) per la gestione delle voci di avvio e delle configurazioni, potrebbero non funzionare correttamente in RHEL 8 e 9. SeENABLE_BLSCFG
non è presente, il comportamento predefinito èfalse
.Questa modifica garantisce anche che tutti i messaggi della console vengano inviati alla prima porta seriale e consentano l'interazione con la console seriale, che può aiutare supporto tecnico di Azure con i problemi di debug. Questa configurazione disattiva anche le nuove convenzioni di denominazione per le schede di interfaccia di rete.
rhgb quiet crashkernel=auto
Gli avvi grafici e silenziosi non sono utili in un ambiente cloud se tutti i log devono essere inviati alla porta seriale. È possibile mantenere l'opzione
crashkernel
configurata, se si desidera. Questo parametro riduce la quantità di memoria disponibile nella macchina virtuale di almeno 128 MB e questo potrebbe causare problemi in macchine virtuali di dimensioni inferiori.Dopo aver terminato di modificare
/etc/default/grub
, eseguire questo comando per ricompilare la configurazione GRUB:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Nota
Se si sta caricando una macchina virtuale abilitata per UEFI, il comando per aggiornare GRUB è
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
.Verificare che il server SSH sia installato e configurato per l'esecuzione all'avvio, che è in genere l'impostazione predefinita. Modificare
/etc/ssh/sshd_config
per poter includere la riga seguente:ClientAliveInterval 180
È stato effettuato il push del pacchetto WALinuxAgent
WALinuxAgent-<version>
nel repository di funzionalità aggiuntive di Red Hat. Abilitare il repository aggiuntivo:sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
Installare l'agente Linux di Azure,
cloud-init
, e altre utilità necessarie:sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons sudo systemctl enable waagent.service sudo systemctl enable cloud-init.service
Configurare
cloud-init
per gestire il provisioning:Configurare
waagent
percloud-init
:sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=auto/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
Nota
Se si esegue la migrazione di una macchina virtuale specifica e non si vuole creare un'immagine generalizzata, impostare
Provisioning.Agent=disabled
nella configurazione/etc/waagent.conf
.Configurare i montaggi:
sudo echo "Adding mounts and disk_setup to init stage" sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
Configurare l'origine dati di Azure:
sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS" sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOF
Se configurata, rimuovere il file di scambio esistente:
if [[ -f /mnt/resource/swapfile ]]; then echo "Removing swapfile" #RHEL uses a swapfile by default swapoff /mnt/resource/swapfile rm /mnt/resource/swapfile -f fi
Configurare la registrazione
cloud-init
:sudo echo "Add console log file" sudo tee <<EOF /etc/cloud/cloud.cfg.d/05_logging.cfg > /dev/null # This tells cloud-init to redirect its stdout and stderr to # 'tee -a /var/log/cloud-init-output.log' so the user can see output # there without needing to look on the console. output: {all: '| tee -a /var/log/cloud-init-output.log'} EOF
Configurazione dello swapping:
Non creare lo spazio di swapping sul disco del sistema operativo.
In precedenza, l'agente Linux di Azure era usato per configurare automaticamente lo spazio di swapping usando il disco risorse locale collegato alla VM dopo il provisioning della VM in Azure. Questa azione è ora gestita da
cloud-init
. Non bisogna usare l'agente Linux per formattare il disco delle risorse per creare il file di scambio. Modificare appropriatamente i parametri seguenti in/etc/waagent.conf
:ResourceDisk.Format=n ResourceDisk.EnableSwap=n
Se si vuole montare, formattare e creare il file di scambio, è possibile:
Passare questo codice come configurazione
cloud-init
ogni volta che si crea una macchina virtuale tramite i dati personalizzati. È consigliabile adottare questa soluzione.Usare una direttiva
cloud-init
integrata nell'immagine che esegue questo passaggio ogni volta che viene creata la macchina virtuale:sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf sudo tee /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF #cloud-config # Generated by Azure cloud image build disk_setup: ephemeral0: table_type: mbr layout: [66, [33, 82]] overwrite: True fs_setup: - device: ephemeral0.1 filesystem: ext4 - device: ephemeral0.2 filesystem: swap mounts: - ["ephemeral0.1", "/mnt/resource"] - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"] EOF
Configurare i dati di telemetria per facilitare
cloud-init
la risoluzione dei problemi di provisioning:sudo tee >> /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg << EOF # This config enables cloud-init to report provisioning telemetry to aid with troubleshooting Reporting: logging: type: log telemetry: type: hyperv EOF
Se si vuole annullare la registrazione della sottoscrizione, eseguire il comando seguente:
sudo subscription-manager unregister
Effettuare il deprovisioning della macchina virtuale e prepararla per il provisioning in Azure:
Attenzione
Se si esegue la migrazione di una macchina virtuale specifica e non si vuole creare un'immagine generalizzata, ignorare il passaggio di deprovisioning. L'esecuzione del comando
waagent -force -deprovision+user
rende inutilizzabile il computer di origine. Questo passaggio è destinato solo a creare un'immagine generalizzata.sudo rm -f /var/log/waagent.log sudo cloud-init clean --logs --seed sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history sudo export HISTSIZE=0
Selezionare Azione>Arresta nella Console di gestione di Hyper-V. Il file VHD Linux è ora pronto per il caricamento in Azure.