Envisagez-vous d'exécuter Red Hat Enterprise Linux (RHEL) sur Azure, ou envisagez-vous de le faire, mais vous souhaitez créer vos propres images ? Dans cet article, je vais me concentrer sur la création d'une image RHEL 7 à exécuter sur des instances Azure Mv2 (alias Hyper-V Generation 2). La principale différence par rapport à une image standard est que vous utiliserez l'interface UEFI (Unified Extensible Firmware Interface). Par conséquent, des options supplémentaires sont requises.
Outre l'accent mis sur Mv2, je vais également vous donner un bon ensemble de commandes de démarrage afin que vous puissiez automatiser le processus de création de ces images et éventuellement intégrer ce processus dans votre pipeline CI/CD.
La plupart de ces instructions devraient également s'appliquer à la création d'images Red Hat Enterprise Linux 8, mais cette version n'était pas mon objectif principal.
Configuration de l'environnement
En tant qu'environnement de construction, Red Hat Enterprise Linux 8 nous fournit le bon ensemble d'outils pour construire des images amorçables par UEFI. Afin de tout reproduire ici, vous aurez besoin des packages suivants installés :
libvirt-client
virt-install
libvirt
libvirt-daemon-kvm
azure-cli
(instructions ici)azcopy
(instructions ici) dans le$PATH
(ex./usr/bin/
ou~/bin/
)
Vous aurez également besoin d'une copie du DVD des binaires Red Hat Enterprise Linux 7.7, que vous pouvez télécharger ici si vous disposez d'un abonnement Red Hat valide. Enregistrez ce DVD sous /var/lib/libvirt/images/rhel-server-7.7-x86_64-dvd.iso
.
Remarque : Toute autre version basée sur Red Hat Enterprise Linux 7 ou 8 devrait le faire, mais cette procédure pas à pas a été testée avec la version 7.7.
Pour que ce qui précède fonctionne si vous exécutez sur une VM, vous devez activer KVM sur l'hôte ou passer par la VM. Si vous souhaitez exécuter cet exemple sur une machine virtuelle distante ou dans un autre pipeline CI/CD, j'ai fait exactement cela afin de pouvoir automatiser le processus, afin que vous puissiez exécuter cet exemple sans tête (pas de X, d'interface utilisateur graphique et X transfert nécessaire).
Construire une image de manière automatisée
Nous avons besoin de quelques packages installés dans notre image plus certains ensembles de configurations, et il est recommandé d'installer le client Azure. Alors que je cherchais le meilleur moyen d'installer ce client de manière automatisée, la seule option que j'ai trouvée était de l'obtenir à partir du référentiel des extras CentOS 7 (contactez-moi et faites-moi savoir si vous connaissez une meilleure façon).
Un exemple de kickstart.cfg
fichier peut être obtenu ici. Adaptez-le à vos besoins, mais assurez-vous de laisser au moins la configuration réseau définie sur DHCP.
Construire l'image avec le fichier Kickstart et une simple commande
Pour créer l'image :
$ sudo virt-install \
--name rhel77 \
--memory 4096 \
--vcpus 4 \
--boot uefi \
--os-variant rhel7.7 \
-l /var/lib/libvirt/images/rhel-server-7.7-x86_64-dvd.iso \
--disk size=4 \
--initrd-inject $(pwd)/kickstart.cfg \
--extra-args="ks=file:/kickstart.cfg console=tty0 console=ttyS0,115200n8" \
--graphics=none \
--network network=default \
--noreboot
Comme mentionné ci-dessus, vous aurez besoin d'avoir l'image du DVD au bon endroit. Mon exemple suppose que vous :
- Avoir
kickstart.cfg
dans votre$PWD
actuel . - Vous voulez un disque de 4 Go.
- Utilisez votre
libvirt
local /Installation KVM. - Aucune exigence particulière concernant l'interface réseau (j'utilise les valeurs par défaut).
Convertir l'image au bon format
J'ai eu du mal à convertir l'image au bon format, mais avec des collègues sympathiques et Google, j'ai finalement trouvé le format requis :VHD aligné sur 1 Mo.
La dernière image créée doit être la bonne :
$ image=$(ls -1tr /var/lib/libvirt/images/rhel*|tail -1)
Utilisez sudo pour accéder à l'image, convertissez-la en RAW et placez-la dans le $PWD actuel
$ sudo qemu-img convert -f qcow2 -O raw $image rhel-7.7.raw
Assurez-vous que nous pouvons y accéder - après ce point, une utilisation "normale" (par exemple, une utilisation non root peut continuer)
$ sudo chown $(whoami) *.raw
Calculez la taille de l'image.
$ MB=$((1024*1024)) size=$(qemu-img info -f raw --output json "rhel-7.7.raw" | \ gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}') rounded_size=$((($size/$MB + 1)*$MB))
Redimensionnez l'image.
$ sudo qemu-img resize -f raw rhel-7.7.raw $rounded_size
Convertissez l'image de RAW en VHD et forcez la bonne taille
$ sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.7.raw rhel-7.7.vhd
Créer un groupe
Vous avez maintenant votre propre image Red Hat Enterprise Linux 7 personnalisée. Vous vous demandez probablement comment le télécharger sur Azure et l'utiliser pour exécuter une instance. Lisez plus loin. Comme j'ai dû tester tout mon processus de construction, je l'ai également fait.
Vous aurez toujours besoin d'un groupe de ressources dans Azure. J'ai choisi westus2
comme ma région, mais tout autre devrait faire aussi bien (s'ils ont des instances Mv2). Le nom de mon groupe de ressources est simplement myresourcegroup
. Si vous voulez utiliser un autre nom, vous devrez le remplacer partout où je l'ai utilisé.
Pour créer votre groupe, créez un groupe de ressources AZ dans westus2 et nommez "myresourcegroup".
$ sudo az group create -l westus2 -n myresourcegroup
Télécharger l'image disque et en faire une image Azure
Pour télécharger l'image disque et en faire une image Azure, créez le disque dans Azure avec le nom "rhel-7", dans notre groupe de ressources "myresourcegroup" précédemment créé.
$ sudo az disk delete --name rhel-7 -g myresourcegroup -y
Assurez-vous qu'il s'agit d'Hyper-V Gen 2 et du type de système d'exploitation Linux avec la bonne taille.
$ sudo az disk create --hyper-v-generation V2 -g myresourcegroup -n rhel-7 --os-type Linux -l westus2 --for-upload --upload-size-bytes $(wc -c rhel-7.7.vhd|awk '{ print $1 }') --sku standard_lrs
Vous avez besoin d'un SASURI pour le téléchargement.
$ SASURI=$(az disk grant-access -n rhel-7 -g myresourcegroup --access-level Write --duration-in-seconds 86400 --query [accessSas] -o tsv)
Cela utilise azcopy
pour copier l'image (azcopy
doit être dans votre $PATH
quelque part)
$ sudo azcopy $(pwd)/rhel-7.7.vhd $SASURI --blob-type PageBlob
Une fois le téléchargement terminé, nous devons révoquer l'accès, sinon l'image disque ne peut pas être utilisée.
$ sudo az disk revoke-access -n rhel-7 -g myresourcegroup
Enfin, marquez-le comme une image du système d'exploitation Hyper-V, Gen 2.
$ sudo az image create -g myresourcegroup -n rhel-7 --os-type Linux --hyper-v-generation V2 --source rhel-7
Exécuter l'image
On pourrait imaginer qu'à ce moment-là, tout était clair et que la gestion d'une image serait facile. Si tout est bien en place, oui, c'est vrai. Mais lorsque j'ai travaillé sur cet exemple, j'ai complètement oublié la dernière étape du paragraphe précédent et je n'ai pas marqué l'image disque comme une image Azure, ce qui m'a empêché de fournir la clé SSH ou admin-username
.
Quoi qu'il en soit, avec les instructions ci-dessus, vous devriez être prêt à exécuter l'image. La commande suivante suppose que vous exécutez cet outil en tant qu'utilisateur root et que vous utilisez la clé SSH de l'utilisateur root. Adaptez ce que j'ai ici à vos besoins :
$ sudo az vm create \
--resource-group myresourcegroup \
--location westus2 \
--name rhel-7 \
--image rhel-7 \
--admin-username cloud-user \
--ssh-key-value @/root/.ssh/id_rsa.pub
Si vous avez besoin de diagnostics de démarrage, vous devrez créer un soi-disant compte de stockage avec le nom "storageaccount123" à l'aide de la commande suivante :
$ sudo az storage account create -n storageaccount123 -g myresourcegroup -l westus2 --sku Standard_LRS
Le az vm create
ci-dessus La commande doit être étendue avec le paramètre suivant afin de consigner les diagnostics et les messages de démarrage dans le compte de stockage que nous venons de créer :
--boot-diagnostics-storage storageaccount123
Remarque : Vous n'avez pas besoin d'activer les diagnostics de démarrage, et si vous le faites, vous devrez certainement adapter le nom du compte de stockage.
Connexion à l'instance Azure
À partir de az vm create
commande, vous devriez obtenir une sortie contenant l'adresse IP. Vous devriez maintenant pouvoir vous connecter automatiquement, étant donné que la clé SSH est fournie avec :
$ ssh cloud-user@<azure-ip>
Conclusion
Avant d'explorer les possibilités de création d'images Red Hat Enterprise Linux 7 pour les instances Azure Mv2 de manière automatisée, je n'avais aucune expérience préalable avec Azure, et c'était donc tout un voyage. Je ne me considère toujours pas comme un expert en matière d'Azure, et il manque probablement des choses. J'aimerais entendre vos opinions pour améliorer cette configuration si nécessaire.
Les scripts et les commandes que j'ai utilisés pour cet article peuvent être trouvés ici. Les demandes d'extraction sont les bienvenues, ainsi que les clones !
Vous voulez essayer Red Hat Enterprise Linux ? Télécharge le maintenant gratuitement.