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.
- Préparation d’une machine virtuelle CentOS 6.x pour Azure
- Préparation d’une machine virtuelle CentOS 7.0+ pour Azure
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.
Dans le Gestionnaire Hyper-V, sélectionnez la machine virtuelle.
Cliquez sur Connecter pour ouvrir une fenêtre de console de la machine virtuelle.
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
Créez ou modifiez le fichier
/etc/sysconfig/network
, puis ajoutez le texte suivant :NETWORKING=yes HOSTNAME=localhost.localdomain
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
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
Assurez-vous que le service réseau se lance au démarrage en exécutant la commande suivante :
sudo chkconfig network on
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.Ajoutez la ligne suivante au fichier /etc/yum.conf :
http_caching=packages
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.
(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.
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.
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’optioncrashkernel
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.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.
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.
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.
- 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
Dans le Gestionnaire Hyper-V, sélectionnez la machine virtuelle.
Cliquez sur Connecter pour ouvrir une fenêtre de console de la machine virtuelle.
Créez ou modifiez le fichier
/etc/sysconfig/network
, puis ajoutez le texte suivant :NETWORKING=yes HOSTNAME=localhost.localdomain
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
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
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.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.
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ètreGRUB_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.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.)
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
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
Installez cloud-init pour gérer l’approvisionnement :
sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
- 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
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
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
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é.