Jan 26, 2024 | OpenStack, Tutorial

Migration von Servern auf VMware zu OpenStack

von

In diesem Tutorial befassen wir uns mit der Migration von Servern auf VMware zu OpenStack. Nach der kürzlichen Übernahme VMwares durch Broadcom haben in den vergangenen Wochen viele kleinere Cloud Service Provider (CSPs) Mitteilung zur Kündigung ihrer Mitgliedschaft in VMWare’s Partnerprogramm erhalten. Viele Endkunden befinden sich dementsprechend in einer ungewissen Situation, die durch die schlechte Informationslage noch akuter wird.
Die ersten Anbieter kompatibler Software erwägen bereits die Möglichkeit, alternative Plattformen zu unterstützen. Eine dieser möglichen Alternativen könnte OpenStack sein, die weltweit meistgenutzte Open Source Cloud Software. Auch die Virtual Private Clouds (VPCs) bei NWS bauen auf OpenStack auf.

Möchtest du lieber mehr über OpenStack bei NWS erfahren und wissen, warum es eine sinnvolle Alternative zu VMwares proprietären Produkten sein kann, bist du auf unserer Infoseite richtig!

Voraussetzungen

Für die Anwendung der in diesem Tutorial beschriebenen Migrationsschritte benötigen wir zum einen einen Linuxserver, der als „Migrationsserver“ dienen wird, zum Anderen Hilfssoftware. Sämtliche Software ist Open Source, frei beziehbar, und kann aus den offiziellen Paketquellen aller gängigen Betriebssysteme installiert werden.

Der Migrationsserver

Der Linuxserver wird hauptsächlich dazu benötigt, das von VMware als .vmdk exportierte VM-Image in ein OpenStack-kompatibles raw Image zu konvertieren. Da wir das konvertierte Image im Anschluss in OpenStack hochladen müssen, empfiehlt es sich, unseren Migrationsserver aus Netzwerksicht möglichst nah an unserem OpenStack aufzusetzen.

Was das Betriebssystem angeht, gibt es keine falsche Wahl – die benötigte Software ist in den offiziellen Paketquellen aller gängigen Betriebssysteme verfügbar. Ich habe mich für dieses Tutorial für Ubuntu 22.04.3 LTS (Jammy Jellyfish) entschieden.

Die Hilfssoftware

Auf unserem Migrationsserver installieren wir nach Einrichtung die folgende Software:

  • die openstack CLI
  • die qemu-img CLI

Unter Ubuntu können diese Abhängigkeiten durch folgende Softwarepakete installiert werden: 

apt install qemu-utils python3-openstackclient

Nach der erfolgreichen Installation können wir die installierten Tools testen:

openstack --version
  openstack 5.8.0
 
qemu-img --version
  qemu-img version 6.2.0 (Debian 1:6.2+dfsg-2ubuntu6.16)
  © (c) 2003-2021 Fabrice Bellard and the QEMU Project developers

Vorbereiten des Images

Der nächste Schritt beinhaltet den Export unser virtuellen Maschine tutorial-host aus VMware. Hierfür benötigen wir Zugriff auf das hostende vCenter:

  1. Navigiere zum Host in der vCenter UI
  2. Identifiziere den Datastore, der die Daten des Hosts hält
  3. Navigiere zum identifizierten Datastore und öffne den Datastore Browser
  4. Finde den Ordner, der nach dem Host benannt ist
  5. Downloade die .vmdk-Datei über den entsprechenden Dialog

Tatsächlich sollten nun zwei Dateien gedownloaded werden, eine kleine Datei namens tutorial-host.vmdk, und eine große Datei namens tutorial-host-flat.vmdk.

Nach erfolgreichem Download müssen beide Dateien auf unseren Migrationsserver übertragen werden, bevor wir mit der Konvertierung starten können: Wir möchten unsere .vmdk-Dateien in ein einziges raw Image konvertieren, was mittels folgendem Befehl funktioniert: 

qemu-img convert -p -f vmdk -O raw tutorial-host.vmdk tutorial-host.raw

Die Konvertierung sollte nun stattfinden, während uns die CLI mit einer Fortschrittsanzeige auf dem Laufenden hält. Nach ein paar Minuten – je nach Größe der .vmdk-Dateien – sollte eine neue Datei tutorial-host.raw im Arbeitsverzeichnis zu sehen sein.

Vorbereiten der OpenStackumgebung

Bevor wir die Migration unseres Servers von VMware zu OpenStack fortsetzen können, sind noch einige Vorbereitungen zu treffen, teils zwingend notwendige (Upload des konvertierten Images), und teils optionale (Setzen von IP und/oder MAC-Adressen).

Fangen wir doch mit dem Upload des Images an.

Upload des Images nach OpenStack

Da wir ab hier direkt mit OpenStack kommunizieren (wollen), müssen wir zuerst unsere openstack CLI konfigurieren. Konkret müssen wir Authentifizierung und Projekt definieren. Die benötigten Informationen können aus Horizon (OpenStack’s Weboberfläche) heruntergeladen werden – detaillierte Instruktionen hierfür finden sich in der offiziellen Dokumentation.

Folgst du dem Tutorial auf einem bei NWS betriebenem OpenStack, kannst du die benötigten Informationen auf deiner OpenStack Übersichtsseite auf my.nws.netways.de herunterladen. Auf diese Weise kannst du dich u.A. mit deiner NWS-ID in der OpenStack CLI authentifizieren.

Donwload Openstack CLI configuration for NWS ID

You can find instructions to configure the openstack CLI with your NWS ID on your OpenStack’s overview page.

Haben wir unseren OpenStackRC-Datei heruntergeladen, können wir sie einlesen und im Anschluss das konvertierte Image nach Glance (OpenStack’s Imagespeicher) hochladen: 

source <OpenstackRC.sh>;
openstack image create --disk-format raw \
   --file tutorial-host.raw --progress tutorial-host-image

Wie qemu-img zeigt uns auch openstack den Fortschritt der Aktion an. Ist das Image erfolgreich hochgeladen, könnten wir bereits unsere virtuelle Maschine auf OpenStack starten!

Konfigurieren von Netzwerkeinstellungen

Eine weitere, optionale Vorbereitung, die ich bereits zu Beginn dieses Abschnittes erwähnt hatte, ist das Einrichten eines sog. Ports in OpenStack. Mithilfe dieses Ports können wir spezifische IP- bzw. MAC-Adressen an unsere virtuelle Maschine hängen, um neben dem gesicherten Zustand der Maschine auch die ursprünglichen Netzwerkeinstellungen zu migrieren.

Um einen solchen Port zu konfigurieren, benötigen wir ein paar Informationen aus OpenStack:

  1. die ID des Netzwerks, in dem der Port erstellt werden soll; Wir können alle verfügbaren Netzwerke wie folgt auflisten:
    openstack network list
  2. die ID eines Subnetzes innerhalb des gewählten Netzwerks; erneut können wir alle Optionen auflisten:
    openstack subnet list
  3. [optional] die ID(s) der Security Groups, die wir mit dem Port und somit auch unserer VM verknüpfen wollen:
    openstack security group list

Haben wir alle benötigten Informationen beisammen, können wir den Port erstellen – die gewählten IDs bzw. IP-/MAC-Adressen müssen an den entsprechenden Stellen eingetragen werden: 

penstack port create --fixed-ip "subnet=<subnet-id>,ip-address=<ip-address>" \
    --security-group <securitygroup-id> \
    --network <network-id> \
    --mac-address <mac-address> \
    tutorial-host-port

Möchten wir mehrere Security Groups mit unserer VM verknüpfen, können wir den Parameter --security-group einfach wiederholen und die entsprechenden IDs eintragen. Analog können wir den Parameter auch weglassen, möchten wir vorerst keine Verknüpfungen vornehmen.

Wenn wir im weiteren Verlauf des Tutorials unsere VM in OpenStack erstellen und den soeben konfigurierten Port nutzen möchten, können wir diesen mit folgendem Parameter referenzieren: --port tutorial-host-port

Starten der Virtuellen Maschine

Nun haben wir alle notwendigen und optionalen Voraussetzungen erfüllt, um unsere virtuelle Maschine in OpenStack starten zu können – doch auch hierbei gibt es wieder verschiedene Optionen hinsichtlich Ausfallsicherheit und Datenpersistenz.

Aus diesem Grund schauen wir uns zum Abschluss des Tutorials zwei verschiedene Möglichkeiten an, unsere VM in OpenStack zu starten.

Starten der Virtuellen Maschine von einem Image

Die einfachste Möglichkeit, die Migration unseres Servers auf VMware zu OpenStack abzuschließen, ist  das Booten direkt von unserem hochgeladenen Image. Unsere VM ist lediglich einen Befehl entfernt:

openstack server create --image tutorial-host-image --flavor s1.small \
    --wait tutorial-host

Nach ein paar Augenblicken sollte uns die openstack CLI die Informationen der neu erstellten VM augeben. Wir können den Status der Maschine in Horizon überprüfen:

Hierzu navigieren wir über Compute > Instances zur Übersicht aller Server im jeweiligen Projekt und sollten nun eine VM namens tutorial-host im Power State Running sehen.

Das war einfach! Diese Einfachheit hat allerdings auch ihre Nachteile: Da wir unsere VM direkt vom importierten Image booten, sind sämtliche Daten der VM lediglich auf ihrem Hypervisor hinterlegt.

Haben wir also eine Datenpersistenz über Restarts der VM hinweg, sieht es im Falle eines Ausfalles des Hypervisor schlecht aus: Wir können die Daten der VM nicht auf einen anderen Hypervisor umziehen. Auch nach Löschen der VM selbst sind die gespeicherten Daten verloren.

Wenn dein Anwendungsfall von diesen Einschränkungen nicht betroffen ist, ist das klasse – falls du allerdings eine robustere Lösung benötigst, lies weiter und erfahre, wie wir unsere VMs von persistenten Volumes starten können.

Starten der Virtuellen Maschine von einem Volume

Anstatt unsere Virtuelle Maschine wie im letzten Abschnitt direkt von einem Image zu starten und somit komplett abhängig vom Hypervisor zu sein, können wir stattdessen von einem Volume booten. Daraus ergeben sich ein paar Vorteile:

  • bei Ausfall eines Hypervisors können wir die VM auf einen anderen Hypervisor umziehen – die persistenten Daten sind auch von dort zugreifbar
  • nach Löschen einer VM können wir das Volume für späteren Gebrauch behalten

Der entsprechende Befehl auf der openstack CLI lautet wie folgt: 

openstack server create --image tutorial-host-image --flavor s1.small \
    --boot-from-volume 8 --wait tutorial-host

Man beachte den neuen Parameter --boot-from-volume 8 im Vergleich zu obigem Beispiel. Durch ihn teilen wir OpenStack mit, dass es ein neues Volume (8GB) auf Basis unseres referenzierten Images erstellen soll, das als Root Disk unserer VM dient.

Durch diese Maßnahme booten wir von einem dedizierten Volume, das die Daten auf der VM ordentlich persistiert.

Analog zu obigem Beispiel können wir den Zustand unserer VM unter Compute > Instances in Horizon überprüfen – es sollte alles in Ordnung sein.

Wie geht es weiter?

Auch wenn wir uns jetzt mit verschiedenen grundsätzlichen Migrationsszenarien inkl. Netzwerk- und Speichereinstellungen von Servern auf VMware zu OpenStack befasst haben, gibt es natürlich noch so einige andere Dinge zu beachten:

Wie verhält es sich bspw. mit Windows VMs? Was ist mit zusätzlich gemounteten Disks? Und wie verhält es sich mit zusätzlichen Scripten, SSH-Schlüsseln und anderen Dateien, die evtl. auf den VMs landen sollten?

Fragen wie diese wollen wir in zukünftigen Tutorials behandeln, also schaue doch mal wieder vorbei oder abonniere direkt unseren Newsletter, um stets auf dem Laufenden zu sein. Solltest Du Fragen zu OpenStack, unserem NWS-Portfolio oder dem Tutorial selbst haben, schicke uns gerne eine Nachricht.

Erhalte den nächsten Artikel

Mehr Artikel in OpenStack | Tutorial
LUKS verschlüsselter Speicher auf OpenStack

LUKS verschlüsselter Speicher auf OpenStack

Die gewissenhafte Absicherung deiner IT-Landschaft hat in den vergangenen Jahren mehr und mehr an Bedeutung gewonnen. Mit einem stetigen Anstieg an (Nutzer-)daten, die verwaltet, verarbeitet, und gespeichert werden müssen, sollte die Verschlüsselung dieser Daten auf...

Ingress-NGINX mit Cert-Manager absichern

Ingress-NGINX mit Cert-Manager absichern

In einem der ersten Tutorials auf unserer Seite haben wir dir gezeigt, wie du Ingress-NGINX in deinem Cluster installieren und einrichten kannst. Heute gehen wir einen Schritt weiter und schauen uns an, wie du Ingress-NGINX und deine Services mit Hilfe von...

Meistere Kubernetes mit Cilium: Traffic Filterung auf L7 Basis

Meistere Kubernetes mit Cilium: Traffic Filterung auf L7 Basis

Mit der neuen Version des Cilium CNI auf unserem Kubernetes-Service erhältst Du die Möglichkeit, den Datenverkehr anhand von L7-Eigenschaften zu filtern. Das ist normalerweise Service-Meshes vorbehalten und kann bei der Sicherheit deiner Dienste sehr hilfreich sein....

Terraform und OpenStack

Terraform und OpenStack

Viele von Euch sind vermutlich bereits mit der Verwendung von Terraform in Kombination mit Azure oder AWS vertraut. Und obwohl dies die am häufigsten verwendeten Plattformen sind, gibt es - oftmals im Bezug auf Datenschutz (DSGVO) - Unwägbarkeiten und somit weiterhin...

Dynamic Inventory – Eine Ansible und OpenStack Lovestory

Dynamic Inventory – Eine Ansible und OpenStack Lovestory

Für diejenigen unter euch, die mit Ansible möglicherweise nicht allzu vertraut sind: Es ist ein großartiges Tool, um in die Welt der Automatisierung einzusteigen und erleichtert euer Leben im Konfigurationsmanagement erheblich.   Die Kennenlernphase In diesem Tutorial...

ReadWriteMany (RWX) mit dem NFS Ganesha Provisioner

ReadWriteMany (RWX) mit dem NFS Ganesha Provisioner

Einführung Du hast die Anforderung, dass Deine Anwendung für eine Lastverteilung über mehrere Nodes skalieren muss, aber Zugriff auf ein gemeines PVC benötigt? Zu diesem Zweck benötigst Du ein PVC welches RWX-fähig ist. Im Rahmen unserer Managed Kubernetes Cluster ist...

Persistente Volumes in Kubernetes vergrößern

Persistente Volumes in Kubernetes vergrößern

Du willst ein PersistentVolume (PV) in Kubernetes vergrößern? In diesem Blogeintrag erfährst du wie das funktioniert. Was PVs sind und wie man diese anlegt wird im Tutorial Persistente Volumes in Kubernetes erstellen erklärt, auf welchem das vorliegende Tutorial...

Wie Du Deine NETWAYS Managed Database startest

Wie Du Deine NETWAYS Managed Database startest

Im ersten Tutorial hat Sebastian bereits erklärt, was es mit Vitess auf sich hat und welche Möglichkeiten es Dir beim Betrieb Deiner Anwendung, im Vergleich zu einer gewöhnlichen Datenbank, bietet. Im folgenden Text möchte ich nun darauf eingehen, wie Du Dir in...

Was ist Vitess?

Was ist Vitess?

Im Jahr 2010 wurde eine Lösung entwickelt, um die massiven Skalierbarkeitsprobleme von MySQL bei YouTube zu lösen - und somit war Vitess geboren. Später - im Jahr 2018 - wurde das Projekt Teil der Cloud Native Computing Foundation und ist seit 2019 als eines der...