Préparation d'une machine virtuelle CentOS pour Azure

Attention

Cet article fait référence à CentOS, une distribution Linux proche de l’état EOL (End Of Life). Faites le point sur votre utilisation et organisez-vous en conséquence. Pour plus d’informations, consultez les conseils d’aide relatifs à la fin de vie de CentOS.

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

Apprenez à créer et à télécharger un disque dur virtuel (VHD) Azure contenant le système d'exploitation Linux CentOS.

Conditions préalables requises

Cet article suppose que vous avez déjà installé un système d'exploitation CentOS (ou une distribution dérivée similaire) de Linux dans un disque dur virtuel. Il existe de multiples outils dédiés à la création de fichiers .vhd, comme la solution de virtualisation Hyper-V. Pour obtenir des instructions, consultez la page Installation du rôle Hyper-V et configuration d'une machine virtuelle.

Notes d'installation CentOS

  • 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 à l'aide de Hyper-V Manager ou de l’applet de commande convert-vhd. Si vous utilisez VirtualBox, vous devez sélectionner Taille fixe par opposition à la valeur par défaut allouée dynamiquement lors de la création du disque.
  • Le module de noyau vfat doit être activé dans le noyau
  • Quand vous installez le système Linux, nous vous recommandons d’utiliser des partitions standard plutôt que LVM (souvent la valeur par défaut dans de nombreuses installations). Ceci permettra d’éviter 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 identique à des fins de dépannage. La technique LVM ou RAID peut être utilisée sur les disques de données.
  • La prise en charge du noyau pour le montage du système de fichiers UDF est nécessaire. Au premier démarrage sur Azure, la configuration d’approvisionnement est transmise à la machine virtuelle Linux à l’aide de supports au format UDF qui sont attachés à l’invité. Azure Linux Agent ou cloud-init doit monter le système de fichiers UDF pour lire sa configuration et provisionner la machine virtuelle.
  • Les versions du noyau Linux antérieures à la version 2.6.37 ne prennent pas en charge NUMA sur Hyper-V avec des machines virtuelles de taille supérieure. Ce problème concerne principalement les distributions antérieures utilisant le noyau Centos 2.6.32 en amont et a été corrigé dans Centos 6.6 (kernel-2.6.32-504). Les systèmes exécutant des noyaux personnalisés dont la version est antérieure à 2.6.37 ou des noyaux basés sur RHEL antérieurs à 2.6.32-504 doivent définir le paramètre de démarrage numa=off sur la ligne de commande du noyau dans grub.conf. Pour plus d’informations, consultez l’article KB 436883 sur Red Hat.
  • Ne configurez pas une partition d’échange sur le disque du système d’exploitation.
  • Tous les VHD sur Azure doivent avoir une taille virtuelle alignée sur 1 Mo. Avant de convertir un disque brut en VHD, vous devez vous assurer que la taille du disque brut est un multiple de 1 Mo. Pour plus d’informations, consultez Notes d’installation sur Linux.

Remarque

Cloud-init >= 21.2 supprime la nécessité du module udf. Toutefois, si le module udf n’est pas activé, le cdrom n’est pas monté pendant le provisionnement, ce qui empêche l’application des données personnalisées. La solution de contournement consiste à appliquer les données personnalisées en utilisant les données utilisateur. Toutefois, contrairement aux données personnalisées, les données utilisateur ne sont pas chiffrées. https://cloudinit.readthedocs.io/en/latest/topics/format.html

CentOS 6.x

Important

Notez que CentOS 6 a atteint sa fin de vie (EOL) et n’est plus pris en charge par la communauté CentOS. Cela signifie qu’aucune autre mise à jour ou correctif de sécurité ne sera publié pour cette version, la rendant vulnérable aux risques de sécurité potentiels. Nous vous recommandons vivement d’effectuer une mise à niveau vers une version plus récente de CentOS pour garantir la sécurité et la stabilité de votre système. Veuillez consulter votre service informatique ou votre administrateur système pour obtenir de l’aide.

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

  2. Cliquez sur Connecter pour ouvrir une fenêtre de console de la machine virtuelle.

  3. Dans CentOS 6, NetworkManager peut interférer avec l’agent Linux Azure. Exécutez la commande suivante pour désinstaller le package :

    sudo rpm -e --nodeps NetworkManager
    
  4. Créez ou modifiez le fichier /etc/sysconfig/network, puis ajoutez le texte suivant :

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. 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
    
  6. Modifiez les règles udev pour éviter la génération de règles statiques pour les interfaces Ethernet. Ces règles peuvent causer des problèmes lors du clonage d’une machine virtuelle dans Microsoft Azure ou Hyper-V :

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    
  7. Assurez-vous que le service réseau se lance au démarrage en exécutant la commande suivante :

    sudo chkconfig network on
    
  8. Si vous voulez utiliser les miroirs OpenLogic hébergés dans les centres de données Azure, remplacez le fichier /etc/yum.repos.d/CentOS-Base.repo par les référentiels suivants. Cette action ajoute également le référentiel [openlogic] qui comprend des packages supplémentaires, comme l'agent Linux Azure :

    [openlogic]
    name=CentOS-$releasever - openlogic packages for $basearch
    baseurl=http://olcentgbl.trafficmanager.net/openlogic/$releasever/openlogic/$basearch/
    enabled=1
    gpgcheck=0
    
    [base]
    name=CentOS-$releasever - Base
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/os/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    
    #released updates
    [updates]
    name=CentOS-$releasever - Updates
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/updates/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    
    #additional packages that may be useful
    [extras]
    name=CentOS-$releasever - Extras
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/extras/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    
    #additional packages that extend functionality of existing packages
    [centosplus]
    name=CentOS-$releasever - Plus
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/centosplus/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    
    #contrib - packages by Centos Users
    [contrib]
    name=CentOS-$releasever - Contrib
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/contrib/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    

    Notes

    La suite de ce guide suppose que vous utilisez au moins le référentiel [openlogic] qui sera utilisé pour installer l'agent Linux Azure ci-dessous.

  9. Ajoutez la ligne suivante au fichier /etc/yum.conf :

    http_caching=packages
    
  10. Exécutez la commande suivante pour effacer les métadonnées yum actuelles et mettre à jour le système avec les dernières mises à jour :

    sudo yum clean all
    

    À moins de créer une image pour une version antérieure de CentOS, nous vous recommandons de mettre à jour tous les packages vers la dernière version :

    sudo yum -y update
    

    Un redémarrage peut être nécessaire après avoir exécuté cette commande.

  11. (Facultatif) Installez les pilotes pour les services d'intégration Linux (LIS).

    Important

    Cette étape est requise pour CentOS 6.3 et versions antérieures, et facultative pour les versions ultérieures.

    sudo rpm -e hypervkvpd  ## (may return error if not installed, that's OK)
    sudo yum install microsoft-hyper-v
    

    Vous pouvez également suivre le les instructions d’installation manuelle sur la page de téléchargement des services d’intégration Linux (LIS) et installez le package RPM sur votre machine virtuelle.

  12. Installez l'agent Linux Azure et les dépendances. Démarrez et activez le service waagent :

    sudo yum install python-pyasn1 WALinuxAgent
    sudo service waagent start
    sudo chkconfig waagent on
    

    Le package WALinuxAgent entraîne la suppression des packages NetworkManager et NetworkManager-gnome, s'ils n'avaient pas déjà été supprimés comme indiqué à l'étape 3.

  13. 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 cela, ouvrez /boot/grub/menu.lst dans un éditeur de texte et vérifiez que le noyau par défaut comprend les paramètres suivants :

    console=ttyS0 earlyprintk=ttyS0 rootdelay=300
    

    Ce permet également d'assurer que tous les messages de la console sont envoyés vers le premier port série, ce qui peut simplifier les problèmes de débogage pour la prise en charge d'Azure.

    En plus de tout ce qui précède, nous vous recommandons de supprimer les paramètres suivants :

    rhgb quiet crashkernel=auto
    

    Le graphique et quiet boot ne sont pas utiles dans un environnement cloud où nous voulons que tous les journaux d’activité soient envoyés au port série. L’option crashkernel peut éventuellement être conservée. Notez cependant que ce paramètre réduit la quantité de mémoire disponible dans la machine virtuelle de 128 Mo ou plus, ce qui peut être problématique sur les machines virtuelles de petite taille.

    Important

    CentOS 6.5 et versions antérieures doivent également définir le paramètre de noyau numa=off. Consultez Red Hat KB 436883.

  14. Vérifiez que le serveur SSH est installé et configuré pour démarrer au moment prévu. C'est généralement le cas par défaut.

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

    L'agent Linux Azure peut configurer automatiquement un espace swap à l'aide du disque local de ressources connecté à la machine virtuelle après déploiement sur Azure. Le disque de ressources local est un disque temporaire qui peut être vidé quand la machine virtuelle est déprovisionnée. Après avoir installé l’agent Linux Azure (voir l’étape précédente), modifiez en conséquence les paramètres suivants dans le fichier /etc/waagent.conf :

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048 ## NOTE: set this to whatever you need it to be.
    
  16. Exécutez les commandes suivantes pour annuler le déploiement de la machine virtuelle et préparer son déploiement sur Azure :

    sudo waagent -force -deprovision+user
    sudo export HISTSIZE=0
    

Notes

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 déprovisionnement.

  1. Cliquez sur Action > Arrêter dans le Gestionnaire Hyper-V. Votre disque dur virtuel Linux est alors prêt pour chargement dans Azure.

CentOS 7.0+

Modifications dans CentOS 7 (et les distributions dérivées)

La préparation d’une machine virtuelle CentOS 7 pour Azure est similaire à CentOS 6, avec quelques différences significatives :

  • Le package NetworkManager n'est plus en conflit avec l'agent Azure Linux. Ce package est installé par défaut et nous vous recommandons de ne pas le supprimer.

  • GRUB2 est maintenant utilisé comme chargeur de démarrage (bootloader) par défaut ; la modification des paramètres du noyau a donc changé (voir ci-dessous).

  • XFS est maintenant le système de fichiers par défaut. Le système de fichiers ext4 est toujours utilisable si vous le souhaitez.

  • Étant donné que CentOS Stream 8 et les versions ultérieures n’incluent plus network.service par défaut, vous devez l’installer manuellement :

    sudo yum install network-scripts
    sudo systemctl enable network.service
    

Configuration

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

  2. Cliquez sur Connecter pour ouvrir une fenêtre de console de 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
    NM_CONTROLLED=no
    
  5. Modifiez les règles udev pour éviter la génération de règles statiques pour les interfaces Ethernet. Ces règles peuvent causer des problèmes lors du clonage d’une machine virtuelle dans Microsoft Azure ou Hyper-V :

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    
  6. Si vous voulez utiliser les miroirs OpenLogic hébergés dans les centres de données Azure, remplacez le fichier /etc/yum.repos.d/CentOS-Base.repo par les référentiels suivants. Cette action ajoute également le référentiel [openlogic] qui comprend les packages de l'agent Linux Azure :

    [openlogic]
    name=CentOS-$releasever - openlogic packages for $basearch
    baseurl=http://olcentgbl.trafficmanager.net/openlogic/$releasever/openlogic/$basearch/
    enabled=1
    gpgcheck=0
    
    [base]
    name=CentOS-$releasever - Base
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/os/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    
    #released updates
    [updates]
    name=CentOS-$releasever - Updates
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/updates/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    
    #additional packages that may be useful
    [extras]
    name=CentOS-$releasever - Extras
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/extras/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    
    #additional packages that extend functionality of existing packages
    [centosplus]
    name=CentOS-$releasever - Plus
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/centosplus/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    

    Notes

    La suite de ce guide suppose que vous utilisez au moins le référentiel [openlogic] qui sera utilisé pour installer l'agent Linux Azure ci-dessous.

  7. Exécutez la commande suivante pour effacer les métadonnées yum actuelles et installer les mises à jour le cas échéant :

    sudo yum clean all
    

    À moins de créer une image pour une version antérieure de CentOS, nous vous recommandons de mettre à jour tous les packages vers la dernière version :

    sudo yum -y update
    

    Un redémarrage peut être nécessaire après avoir exécuté cette commande.

  8. 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 cela, ouvrez le fichier /etc/default/grub dans un éditeur de texte et modifiez le paramètre GRUB_CMDLINE_LINUX , par exemple :

    GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    Ce permet également d'assurer que tous les messages de la console sont envoyés vers le premier port série, ce qui peut simplifier les problèmes de débogage pour la prise en charge d'Azure. Cela désactive également les nouvelles conventions d’affectation de noms CentOS 7 pour les cartes réseau. En plus de tout ce qui précède, nous vous recommandons de supprimer les paramètres suivants :

    rhgb quiet crashkernel=auto
    

    Le démarrage graphique et sans assistance n’est pas utile dans un environnement cloud où nous souhaitons que tous les journaux soient envoyés au port série. L’option crashkernel peut éventuellement être conservée. Notez cependant que ce paramètre réduit la quantité de mémoire disponible dans la machine virtuelle de 128 Mo ou plus, ce qui peut être problématique sur les machines virtuelles de petite taille.

  9. Lorsque vous avez fini de modifier /etc/default/grub comme indiqué ci-dessus, exécutez la commande suivante pour régénérer la configuration grub :

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

Notes

En cas de chargement d’une machine virtuelle UEFI, la commande pour mettre à jour grub est grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg. En outre, le module de noyau vfat doit être activé dans le noyau, sinon l’approvisionnement échoue.

Vérifiez que le module « udf » est activé. Leur suppression ou leur désactivation entraîne un échec du provisionnement ou du démarrage. (_Cloud-init >= 21.2 supprime la nécessité du module udf. Lisez le début du document pour plus d’informations.)

  1. Si vous générez l’image depuis VMware, VirtualBox ou KVM : vérifiez que les pilotes Hyper-V sont inclus dans l’initramfs :

    Modifiez /etc/dracut.conf, ajoutez le contenu :

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Générez de nouveau initramfs :

    sudo dracut -f -v
    
  2. Installez l’agent Linux Azure et les dépendances pour les extensions de machine virtuelle Azure :

    sudo yum install python-pyasn1 WALinuxAgent
    sudo systemctl enable waagent
    
  3. Installez cloud-init pour gérer l’approvisionnement :

    sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
    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
    
    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
    
    sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS"
    sudo cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
    datasource_list: [ Azure ]
    datasource:
        Azure:
            apply_network_config: False
    EOF
    
    if [[ -f /mnt/swapfile ]]; then
    echo Removing swapfile - RHEL uses a swapfile by default
    swapoff /mnt/swapfile
    rm /mnt/swapfile -f
    fi
    
    echo "Add console log file"
    cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF
    
    # 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
    
  4. Configuration de l’échange

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

    Auparavant, l’agent Linux Azure était utilisé pour configurer automatiquement un espace d’échange à l’aide du disque de ressources local attaché à la machine virtuelle après le provisionnement de cette dernière sur Azure. Toutefois, cela est désormais géré par cloud-init, et vous ne devez pas utiliser l’agent Linux pour formater le disque de ressources. Créez le fichier d’échange et modifiez les paramètres suivants dans /etc/waagent.conf de manière appropriée :

    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
    

    Si vous voulez monter, formater et créer un échange, vous pouvez :

    • Transmettre ceci en tant que configuration cloud-init chaque fois que vous créez une machine virtuelle

    • Utiliser une directive cloud-init intégrée à l’image qui effectuera cette opération 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 cat > /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"]
        - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
      EOF
      
  5. Exécutez les commandes suivantes pour annuler le déploiement de la machine virtuelle et préparer son déploiement sur Azure :

    Notes

    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 déprovisionnement.

    sudo rm -f /var/log/waagent.log
    sudo cloud-init clean
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  6. Cliquez sur Action > Arrêter dans le Gestionnaire Hyper-V. Votre disque dur virtuel Linux est alors prêt pour le téléchargement dans Azure.

Étapes suivantes

Vous êtes maintenant prêt à utiliser votre disque dur virtuel CentOS 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é.