Planen Sie, Red Hat Enterprise Linux (RHEL) auf Azure auszuführen, oder erwägen Sie dies, möchten aber Ihre eigenen Images erstellen? In diesem Artikel konzentriere ich mich auf die Erstellung eines RHEL 7-Images zur Ausführung auf Azure Mv2-Instanzen (auch bekannt als Hyper-V Generation 2). Der Hauptunterschied zu einem Standard-Image besteht darin, dass Sie das Unified Extensible Firmware Interface (UEFI) verwenden und daher zusätzliche Optionen erforderlich sind.
Abgesehen von dem Hauptaugenmerk auf Mv2 gebe ich Ihnen auch einen guten Startsatz von Befehlen, damit Sie den Prozess der Erstellung dieser Images automatisieren und diesen Prozess schließlich in Ihre CI/CD-Pipeline integrieren können.
Die meisten dieser Anweisungen sollten auch für das Erstellen von Red Hat Enterprise Linux 8-Images gelten, aber diese Version war nicht mein Hauptaugenmerk.
Umgebung einrichten
Als Build-Umgebung stellt uns Red Hat Enterprise Linux 8 die richtigen Tools zur Verfügung, um UEFI-bootfähige Images zu erstellen. Um hier alles nachzubilden, müssen die folgenden Pakete installiert sein:
libvirt-client
virt-install
libvirt
libvirt-daemon-kvm
azure-cli
(Anleitung hier)azcopy
(Anleitung hier) im$PATH
(zB/usr/bin/
oder~/bin/
)
Sie benötigen außerdem eine Kopie der Red Hat Enterprise Linux 7.7-Binärdateien-DVD, die Sie hier herunterladen können, wenn Sie über ein gültiges Red Hat-Abonnement verfügen. Speichern Sie diese DVD als /var/lib/libvirt/images/rhel-server-7.7-x86_64-dvd.iso
.
Hinweis: Jede andere Red Hat Enterprise Linux 7- oder 8-basierte Version sollte dies tun, aber diese exemplarische Vorgehensweise wurde mit 7.7 getestet.
Damit das oben Genannte funktioniert, wenn Sie es auf einer VM ausführen, muss KVM auf dem Host aktiviert oder an die VM weitergeleitet werden. Wenn Sie dieses Beispiel auf einer Remote-VM oder in einer anderen CI/CD-Pipeline ausführen möchten, habe ich genau das getan, um den Prozess automatisieren zu können, sodass Sie diesen Headless ausführen können (kein X, grafische Benutzeroberfläche und X-Weiterleitung erforderlich).
Automatisiertes Erstellen eines Images
Wir benötigen einige Pakete, die in unserem Image installiert sind, sowie einige Konfigurationssätze, und es wird empfohlen, den Azure-Client zu installieren. Während ich nach dem besten Weg gesucht habe, diesen Client automatisiert zu installieren, war die einzige Option, die ich gefunden habe, es aus dem Extras-Repository von CentOS 7 zu beziehen (kontaktieren Sie mich und lassen Sie es mich wissen, wenn Sie einen besseren Weg kennen).
Ein Beispiel für kickstart.cfg
Datei kann hier bezogen werden. Passen Sie es an Ihre Bedürfnisse an, aber stellen Sie sicher, dass Sie zumindest die Netzwerkkonfiguration auf DHCP belassen.
Das Image mit der Kickstart-Datei und einem einfachen Befehl erstellen
So erstellen Sie das Bild:
$ 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
Wie oben erwähnt, müssen Sie das DVD-Image an der richtigen Stelle haben. Mein Beispiel geht davon aus, dass Sie:
- Habe
kickstart.cfg
in Ihrem aktuellen$PWD
. - Möchten Sie eine 4-GB-Festplatte.
- Verwenden Sie Ihre lokale
libvirt
/KVM installieren. - Haben keine besonderen Anforderungen an die Netzwerkschnittstelle (ich verwende die Standardeinstellungen).
Konvertieren des Bildes in das richtige Format
Ich hatte Mühe, das Bild in das richtige Format zu konvertieren, aber mit freundlichen Kollegen und Google fand ich schließlich das erforderliche Format heraus:VHD ausgerichtet auf 1 MB.
Das zuletzt erstellte Image sollte das richtige sein:
$ image=$(ls -1tr /var/lib/libvirt/images/rhel*|tail -1)
Verwenden Sie sudo, um auf das Bild zuzugreifen, konvertieren Sie es in RAW und fügen Sie es in das aktuelle $PWD
ein
$ sudo qemu-img convert -f qcow2 -O raw $image rhel-7.7.raw
Stellen Sie sicher, dass wir darauf zugreifen können - nach diesem Punkt kann eine „normale“ (z. B. Nicht-Root-Nutzung) fortgesetzt werden.
$ sudo chown $(whoami) *.raw
Berechnen Sie die Größe des Bildes.
$ MB=$((1024*1024)) size=$(qemu-img info -f raw --output json "rhel-7.7.raw" | \ gawk 'match($0, /"virtuelle Größe" :([0-9]+),/, val) {print val[1]}') rounded_size=$((($size/$MB + 1)*$MB))
Größe des Bildes ändern.
$ sudo qemu-img resize -f raw rhel-7.7.raw $rounded_size
Konvertieren Sie das Bild von RAW in VHD und erzwingen Sie die richtige Größe
$ sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.7.raw rhel-7.7.vhd
Erstellen einer Gruppe
Jetzt haben Sie Ihr eigenes angepasstes Red Hat Enterprise Linux 7-Image. Sie fragen sich wahrscheinlich, wie Sie es in Azure hochladen und zum Ausführen einer Instanz verwenden können. Lesen Sie weiter. Da ich meinen gesamten Build-Prozess testen musste, habe ich dies auch getan.
Sie benötigen immer eine Ressourcengruppe in Azure. Ich habe westus2
gewählt wie meine Region, aber jede andere sollte es auch tun (wenn sie Mv2-Instanzen haben). Der Name meiner Ressourcengruppe ist einfach myresourcegroup
. Wenn Sie einen anderen Namen verwenden möchten, müssen Sie ihn überall dort ersetzen, wo ich ihn verwendet habe.
Um Ihre Gruppe zu erstellen, erstellen Sie eine AZ-Ressourcengruppe in westus2 und nennen Sie „myresourcegroup“.
$ sudo az group create -l westus2 -n myresourcegroup
Hochladen des Disk-Images und Erstellen eines Azure-Images
Um das Disk-Image hochzuladen und es in ein Azure-Image umzuwandeln, erstellen Sie das Laufwerk in Azure mit dem Namen „rhel-7“ in unserer zuvor erstellten Ressourcengruppe „myresourcegroup“.
$ sudo az disk delete --name rhel-7 -g myresourcegroup -y
Stellen Sie sicher, dass es sich um Hyper-V Gen 2 und den Betriebssystemtyp Linux mit der richtigen Größe handelt.
$ 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
Zum Hochladen benötigen Sie ein SASURI.
$ SASURI=$(az disk grant-access -n rhel-7 -g myresourcegroup --access-level Write --duration-in-seconds 86400 --query [accessSas] -o tsv)
Dies verwendet azcopy
um das Bild zu kopieren (azcopy
muss sich in Ihrem $PATH
befinden irgendwo)
$ sudo azcopy $(pwd)/rhel-7.7.vhd $SASURI --blob-type PageBlob
Nachdem der Upload abgeschlossen ist, müssen wir den Zugriff widerrufen, sonst kann das Disk-Image nicht verwendet werden.
$ sudo az disk revoke-access -n rhel-7 -g myresourcegroup
Markieren Sie es schließlich als Hyper-V, Gen 2 OS-Image.
$ sudo az image create -g myresourcegroup -n rhel-7 --os-type Linux --hyper-v-generation V2 --source rhel-7
Bild ausführen
Man könnte sich vorstellen, dass zu diesem Zeitpunkt alles klar und das Ausführen eines Images einfach wäre. Wenn Sie alles richtig gemacht haben, ja, das stimmt. Aber als ich dieses Beispiel durchgearbeitet habe, habe ich den letzten Schritt im vorherigen Absatz völlig vergessen und das Disk-Image nicht als Azure-Image markiert, was dazu führte, dass der SSH-Schlüssel oder admin-username
Wie auch immer, mit den obigen Anweisungen sollten Sie bereit sein, das Image auszuführen. Der folgende Befehl geht davon aus, dass Sie dieses Tool als Root-Benutzer ausführen und den SSH-Schlüssel des Root-Benutzers verwenden. Passe das, was ich hier habe, an deine Bedürfnisse an:
$ 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
Wenn Sie eine Boot-Diagnose benötigen, müssen Sie mit dem folgenden Befehl ein sogenanntes Speicherkonto mit dem Namen „storageaccount123“ erstellen:
$ sudo az storage account create -n storageaccount123 -g myresourcegroup -l westus2 --sku Standard_LRS
Das obige az vm create
Der Befehl muss um den folgenden Parameter erweitert werden, um die Boot-Diagnose und Meldungen in dem gerade erstellten Speicherkonto zu protokollieren:
--boot-diagnostics-storage storageaccount123
Hinweis: Sie müssen die Startdiagnose nicht aktivieren, und wenn Sie dies tun, müssen Sie auf jeden Fall den Namen des Speicherkontos anpassen.
Anmelden bei der Azure-Instanz
Aus dem az vm create
Befehl, sollten Sie eine Ausgabe mit der IP-Adresse erhalten. Sie sollten sich jetzt automatisch anmelden können, vorausgesetzt, der SSH-Schlüssel wird bereitgestellt mit:
$ ssh cloud-user@
Abschluss
Bevor ich die Möglichkeiten zum automatisierten Erstellen von Red Hat Enterprise Linux 7-Images für Azure Mv2-Instanzen erkundete, hatte ich keine vorherige Erfahrung mit Azure, und daher war es eine ziemliche Reise. Ich würde mich immer noch nicht als Experten bezeichnen, wenn es um Azure geht, und es fehlen wahrscheinlich einige Dinge. Ich würde gerne Ihre Meinung hören, um dieses Setup bei Bedarf zu verbessern.
Die Skripte und Befehle, die ich für diesen Artikel verwendet habe, finden Sie hier. Pull-Requests sind ebenso willkommen wie Clones!
Möchten Sie Red Hat Enterprise Linux ausprobieren? Laden Sie es jetzt kostenlos herunter.