Condividi tramite


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.

  1. Nella Console di gestione di Hyper-V, selezionare la macchina virtuale.

  2. Selezionare Connetti per aprire una finestra della console per la macchina virtuale.

  3. Creare o modificare il file /etc/sysconfig/network e aggiungere il testo seguente:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. 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
    
  5. Assicurarsi che il servizio di rete venga avviato all'avvio:

    sudo systemctl enable network
    
  6. 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
    
  7. 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 parametro GRUB_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. Se ENABLE_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.

  8. 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.

  9. 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
    
  10. È 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
    
  11. 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
    
  12. Configurare cloud-init per gestire il provisioning:

    1. Configurare waagent per cloud-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.

    2. 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
      
    3. 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
      
    4. 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
      
    5. 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
      
  13. 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
        
  14. 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
    
  15. Se si vuole annullare la registrazione della sottoscrizione, eseguire il comando seguente:

    
    sudo subscription-manager unregister
    
  16. 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
    
  17. Selezionare Azione>Arresta nella Console di gestione di Hyper-V. Il file VHD Linux è ora pronto per il caricamento in Azure.