Partage via


Préparation d'une machine virtuelle Red Hat pour Azure

S’applique à : ✔️ Machines virtuelles Linux ✔️ Groupes identiques flexibles ✔️ Groupes identiques uniformes

Dans cet article, vous allez apprendre à préparer une machine virtuelle Red Hat Enterprise Linux (RHEL) à utiliser dans Azure. Les versions de RHEL abordées dans cet article sont 7.x, 8.X., 9.x. Les hyperviseurs de préparation abordés dans cet article sont Hyper-V, KVM (machine virtuelle basée sur un noyau), VMware et Kickstart.

Pour plus d’informations sur les conditions d’éligibilité pour participer au programme Cloud Access de Red Hat, consultez le site web Red Hat Cloud Access et Exécution de RHEL sur Azure. Pour automatiser la génération d’images RHEL, consultez Azure VM Image Builder.

Remarque

Tenez compte des versions qui ont atteint la fin de vie (EOL) et qui ne sont plus prises en charge par Red Hat. Les images chargées dont la fin de vie est proche ou dépassée sont prises en charge sur la base d'un effort commercial raisonnable. Pour plus d’informations, consultez les cycles de vie des produits Red Hat.

Prérequis

Cette section suppose que vous avez déjà obtenu un fichier ISO depuis le site web Red Hat et installé l’image RHEL sur un disque dur virtuel (VHD). Pour plus d’informations sur l’utilisation du Gestionnaire Hyper-V pour installer une image de système d’exploitation, consultez Installer Hyper-V et configurer une machine virtuelle.

Notes d'installation de RHEL

  • Azure ne prend pas en charge le format VHDX. Azure prend uniquement en charge les VHD fixes. Vous pouvez utiliser Hyper-V Manager pour convertir le disque au format VHD, ou la cmdlet convert-vhd. Si vous utilisez VirtualBox, sélectionnez Taille fixe par opposition à l’option de valeur par défaut allouée dynamiquement lorsque vous créez le disque.
  • Azure prend en charge les machines virtuelles Gen1 (démarrage BIOS) et Gen2 (démarrage UEFI).
  • La taille maximale autorisée pour le disque dur virtuel s’élève à 1 023 Go.
  • Le module de noyau vfat doit être activé dans le noyau.
  • Le gestionnaire des volumes logiques est pris en charge et peut être utilisé sur le disque de système d’exploitation ou les disques de données dans les machines virtuelles Azure. En règle générale, nous recommandons d’utiliser les partitions standard sur le disque de système d’exploitation plutôt que sur le gestionnaire des volumes logiques. Cette pratique évite les conflits de noms LVM avec les machines virtuelles clonées, notamment si vous devez attacher un disque de système d’exploitation à une autre machine virtuelle identique pour résoudre des problèmes. Pour plus d’informations, consultez la documentation LVM et RAID.
  • La prise en charge du noyau pour le montage de systèmes de fichiers UDF (Universal Disk Format) est requise. Au premier démarrage sur Azure, le média au format UDF attaché à l’invité transmet la configuration d’approvisionnement à la machine virtuelle Linux. L’agent Linux Azure doit être en mesure de monter le système de fichiers UDF pour lire sa configuration et approvisionner la machine virtuelle. Sans cette étape, l’approvisionnement échoue.
  • Ne configurez pas de partition d’échange sur le disque du système d’exploitation. Pour plus d’informations, consultez les étapes suivantes.
  • Tous les VHD sur Azure doivent avoir une taille virtuelle alignée sur 1 Mo. Lorsque vous convertissez un disque brut en disque dur virtuel, vous devez vérifier que la taille du disque brut est un multiple de 1 Mo avant la conversion. Pour plus d’informations, consultez les étapes suivantes. Consultez également les notes d’installation de Linux.

Remarque

Cloud-init >= 21.2 supprime la nécessité du module UDF. Toutefois, si le module UDF n’est pas activé, le CD-ROM n’est pas monté pendant l’approvisionnement, ce qui empêche l’application des données personnalisées. Une solution de contournement consiste à appliquer des données personnalisées en utilisant des données utilisateur. Contrairement aux données personnalisées, les données utilisateur ne sont pas chiffrées. Pour plus d’informations, consultez Formats de données utilisateur.

  1. Dans le Gestionnaire Hyper-V, sélectionnez la machine virtuelle.

  2. Sélectionnez Connecter afin d’ouvrir une fenêtre de console pour la machine virtuelle.

  3. Créez ou modifiez le fichier /etc/sysconfig/network, puis ajoutez le texte suivant :

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. Créez ou modifiez le fichier /etc/sysconfig/network-scripts/ifcfg-eth0, puis ajoutez le texte suivant :

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    

    Remarque

    Lorsque vous utilisez les performances réseau accélérées, l’interface synthétique créée doit être configurée pour être non managée à l’aide d’une règle udev. Cette action empêche NetworkManager d’attribuer la même adresse IP que l’interface principale.

    Pour l’appliquer :

    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. Assurez-vous que le service réseau se lance au démarrage :

    sudo systemctl enable network
    
  6. Inscrivez votre abonnement Red Hat pour activer l’installation des packages à partir du référentiel RHEL :

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. Modifiez la ligne de démarrage du noyau dans votre configuration grub pour y inclure les paramètres de noyau supplémentaires pour Azure. Pour effectuer cette modification, ouvrez le fichier /etc/default/grub dans un éditeur de texte et modifiez le paramètre GRUB_CMDLINE_LINUX. Par exemple :

    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
    

    Remarque

    Si ENABLE_BLSCFG=false est présent dans /etc/default/grub au lieu de ENABLE_BLSCFG=true, des outils tels que grubedit ou gubby, qui reposent sur la spécification du chargeur de démarrage (BLS) pour la gestion des entrées et des configurations de démarrage, risquent de ne pas fonctionner correctement dans RHEL 8 et 9. Si ENABLE_BLSCFG est absent, le comportement par défaut est false.

    Cette modification offre également la garantie que tous les messages de la console sont envoyés au premier port série et permet d’interagir avec la console série, ce qui peut aider le support Azure à déboguer les problèmes. Cette configuration désactive également les nouvelles conventions d’affectation de noms pour les cartes d’interface réseau.

    rhgb quiet crashkernel=auto
    

    Les démarrages graphiques et sans assistance ne sont pas utiles dans un environnement cloud où vous souhaitez que tous les journaux soient envoyés au port série. Vous pouvez laisser l’option crashkernel configurée si vous le souhaitez. Ce paramètre réduit la quantité de mémoire disponible dans la machine virtuelle de 128 Mo ou plus, ce qui peut poser problème pour les tailles de machine virtuelle plus petites.

  8. Une fois que vous avez terminé de modifier /etc/default/grub, exécutez la commande suivante pour régénérer la configuration de grub :

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

    Remarque

    Si vous chargez une machine virtuelle UEFI, la commande pour mettre à jour grub est grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg.

  9. Vérifiez que le serveur SSH est installé et configuré pour démarrer au moment prévu, ce qui est généralement le réglage par défaut. Modifiez /etc/ssh/sshd_config pour y inclure la ligne suivante :

    ClientAliveInterval 180
    
  10. Le package WALinuxAgent, WALinuxAgent-<version>, a fait l’objet d’une transmission de type push vers le référentiel Red Hat « extras ». Activez le référentiel extras :

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  11. Installez l’agent Linux Azure, cloud-init, et d’autres utilitaires nécessaires :

    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. Configurez cloud-init pour gérer l’approvisionnement :

    1. Configurez waagent pour 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
      

      Remarque

      Si vous migrez une machine virtuelle spécifique et que vous ne souhaitez pas créer d’image généralisée, définissez Provisioning.Agent=disabled sur la configuration /etc/waagent.conf.

    2. Configurez les montages :

      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. Configurez la source de données 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. S’il est configuré, supprimez le fichier d’échange existant :

      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. Configurez la journalisation 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. Configuration de l’échange :

    • Ne créez pas d’espace d’échange sur le disque du système d’exploitation.

      Auparavant, l’agent Azure Linux était utilisé pour configurer automatiquement l’espace d’échange à l’aide du disque de ressources local attaché à la machine virtuelle une fois celle-ci approvisionnée sur Azure. Cette action est maintenant gérée par cloud-init. Vous ne devez pas utiliser l’agent Linux pour formater le disque de ressources afin de créer le fichier d’échange. Modifiez les paramètres suivants dans /etc/waagent.conf de manière appropriée :

      ResourceDisk.Format=n
      ResourceDisk.EnableSwap=n
      
    • Si vous souhaitez monter, formater et créer l’échange, vous pouvez, au choix :

      • Transmettez ce code en tant que configuration cloud-init chaque fois que vous créez une machine virtuelle via des données personnalisées. Nous recommandons cette méthode.

      • Utiliser une directive cloud-init intégrée à l’image qui effectue cette étape chaque fois que la machine virtuelle est créée.

        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. Configurez la télémétrie cloud-init pour faciliter la résolution des problèmes d’approvisionnement :

    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. Si vous souhaitez annuler l'inscription de l'abonnement, exécutez la commande suivante :

    
    sudo subscription-manager unregister
    
  16. Supprimez les privilèges d'accès de la machine virtuelle et préparez son approvisionnement sur Azure :

    Attention

    Si vous migrez une machine virtuelle spécifique et que vous ne souhaitez pas créer d’image généralisée, ignorez l’étape de suppression des privilèges d’accès. L'exécution de la commande waagent -force -deprovision+user rend la machine source inutilisable. Cette étape est destinée uniquement à créer une image généralisée.

    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. Sélectionnez Action>Arrêter dans le Gestionnaire Hyper-V. Votre disque dur virtuel Linux est alors prêt pour le téléchargement dans Azure.