Partager via


Préparation d'une machine virtuelle Linux Ubuntu pour Azure

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

Ubuntu publie désormais la liste des disques VHD (disques durs virtuels) Azure officiels à télécharger sur la page web Ubuntu Cloud Images. Si vous devez créer votre propre image Ubuntu spécialisée pour Azure au lieu d’utiliser la procédure manuelle qui suit, commencez par ces disques VHD opérationnels connus, puis personnalisez-les selon les besoins. Vous pourrez toujours trouver les dernières versions d’images aux emplacements suivants :

Prérequis

Cet article part du principe que vous avez déjà installé un système d’exploitation Ubuntu Linux sur un disque VHD. Plusieurs outils permettent de créer des fichiers .vhd. Citons par exemple une solution de virtualisation comme Hyper-V. Pour obtenir des instructions, consultez Installer le rôle Hyper-V et configurer une machine virtuelle.

Notes d'installation Ubuntu

  • Pour obtenir d’autres conseils sur la préparation de Linux pour Azure, consultez Notes générales sur l’installation de Linux.
  • Azure ne prend pas en charge le format VHDX, seulement le VHD fixe. Vous pouvez convertir le disque au format VHD en utilisant le gestionnaire Hyper-V ou la cmdlet Convert-VHD.
  • Quand vous installez le système Linux, nous vous recommandons d’utiliser les partitions standard plutôt que le gestionnaire de volumes logiques (LVM, Logical Volume Manager), qui constitue souvent le choix par défaut pour de nombreuses installations. Ces partitions standard évitent les conflits de noms avec des machines virtuelles clonées, notamment si un disque de système d'exploitation doit être relié à une autre machine virtuelle pour la dépanner. Vous pouvez également utiliser LVM ou RAID sur des disques de données.
  • Ne configurez pas de partition d’échange ni de fichier d’échange sur le disque du système d’exploitation. Vous pouvez configurer l’agent d’approvisionnement cloud-init pour créer un fichier d’échange ou une partition d’échange sur le disque de ressources temporaire. Pour plus d’informations sur ce processus, 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 notes d’installation de Linux.

Étapes manuelles

Remarque

Avant de tenter de créer votre propre image Ubuntu personnalisée pour Azure, utilisez plutôt les images précréées et testées de la page web Images cloud Ubuntu.

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

  2. Sélectionnez Se connecter pour ouvrir la fenêtre de la machine virtuelle.

  3. Remplacez les référentiels actuels dans l’image par le référentiel Azure d’Ubuntu.

    Avant de modifier /etc/apt/sources.list, nous vous recommandons d’effectuer une sauvegarde :

    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
    
  4. Les images Ubuntu Azure utilisent à présent le noyau adapté à Azure. Mettez à jour le système d’exploitation vers le dernier noyau personnalisé pour Azure, puis installez les outils Azure Linux (notamment les dépendances 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
    
  5. Modifiez la ligne de démarrage du noyau pour GRUB afin d’inclure des paramètres de noyau supplémentaires pour Azure. Pour effectuer cette étape, ouvrez /etc/default/grub dans un éditeur de texte, recherchez la variable appelée GRUB_CMDLINE_LINUX_DEFAULT (ou ajoutez-la, le cas échéant), puis modifiez-la pour inclure les paramètres suivants :

    GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300 quiet splash"
    
  6. Enregistrez ce fichier, puis fermez-le. Exécutez ensuite la commande sudo update-grub. Cette étape permet de vérifier que tous les messages de la console sont envoyés au premier port série, ce qui peut aider le support technique Azure à résoudre les problèmes de débogage.

  7. Vérifiez que le serveur SSH est installé et configuré pour démarrer au moment prévu. Ce paramètre est généralement la valeur par défaut.

  8. Installez cloud-init (agent d’approvisionnement) et l’agent Azure Linux (gestionnaire d’extensions invitées). Cloud-init utilise netplan pour définir la configuration réseau du système (durant l’approvisionnement et à chaque démarrage suivant), et gdisk pour partitionner les disques de ressources.

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

    Remarque

    Le package walinuxagent peut supprimer les packages NetworkManager et NetworkManager-gnome, s’ils sont installés.

  9. Supprimez les configurations par défaut de cloud-init et les artefacts netplan restants qui peuvent entrer en conflit avec l’approvisionnement de cloud-init sur 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
    
  10. Configurez cloud-init pour approvisionner le système à l’aide de la source de données 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
    
  11. Configurez l’agent Azure Linux pour qu’il s’appuie sur cloud-init afin d’effectuer l’approvisionnement. Pour plus d’informations sur ces options, consultez le projet 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
    
  12. Nettoyez cloud-init ainsi que les artefacts et les journaux du runtime d’agent Azure Linux :

    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
    
  13. Supprimez les privilèges d’accès de la machine virtuelle, puis préparez-la à être approvisionnée sur Azure.

    Remarque

    La commande sudo waagent -force -deprovision+user généralise l’image en tentant de nettoyer le système et de le configurer de manière appropriée pour un nouvel approvisionnement. L’option +user supprime le dernier compte d’utilisateur provisionné et les données associées.

    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    

    Avertissement

    La suppression des privilèges d’accès à l’aide de la commande précédente ne garantit pas que l’image soit exempte de toute information sensible, ni qu’elle convienne pour une redistribution.

  14. Sélectionnez Action>Arrêter dans le Gestionnaire Hyper-V.

  15. Azure accepte uniquement les VHD de taille fixe. Si le disque du système d’exploitation de la machine virtuelle n’est pas un VHD fixe, utilisez l’applet de commande PowerShell Convert-VHD et spécifiez l’option -VHDType Fixed. Pour plus d’informations, consultez la documentation relative à Convert-VHD dans Convert-VHD.

  16. Pour apporter une machine virtuelle de 2e génération sur Azure, procédez comme suit :

    1. Changez de répertoire pour accéder au répertoire boot EFI :

      cd /boot/efi/EFI
      
    2. Copiez le répertoire ubuntu dans un nouveau répertoire nommé boot :

      sudo cp -r ubuntu/ boot
      
    3. Changez de répertoire pour accéder au répertoire boot qui vient d’être créé :

      cd boot
      
    4. Renommez le fichier shimx64.efi :

      sudo mv shimx64.efi bootx64.efi
      
    5. Renommez le fichier grub.cfg en bootx64.cfg :

      sudo mv grub.cfg bootx64.cfg
      

Vous êtes désormais prêt à utiliser votre disque VHD (disque dur virtuel) Ubuntu Linux pour créer des machines virtuelles dans Azure. S’il s’agit de votre premier chargement du fichier .vhd sur Azure, consultez Créer une machine virtuelle Linux à partir d’un disque personnalisé.