Virtuelle Maschinen als Testumgebung für Cloud-Apps Multipass – Cloud aus dem Terminal

Von Mirco Lang

Multipass von Canonical erzeugt virtuelle Maschinen einfacher als jedes andere Tool – vorkonfiguriert per „cloud-initׅ“. Sogar ein Kubernetes-Cluster ist nur einen Befehl entfernt.

Multipass erzeugt auf Knopfdruck eine VM-basierte Multi-Cloud-Umgebung.
Multipass erzeugt auf Knopfdruck eine VM-basierte Multi-Cloud-Umgebung.
(Bild: akitada31 / Pixabay)

Wer mal eben eine Testumgebung für Cloud-Anwendungen benötigt, mehrere Instanzen eines Anwendungsservers, ein Kubernetes-Cluster oder vielleicht eine Docker-Umgebung, für den wird Multipass vielleicht zum neuen Lieblingsspielzeug. Die Basisfunktion von Canonicals kleinem Helferlein ist im Grunde simpel: Multipass erstellt virtuelle Maschinen mit Ubuntu als Betriebssystem.

Für die Virtualisierung sorgt im Hintergrund VirtualBox oder auch die Windows-eigene Lösung Hyper-V. Natürlich werden die VMs standardmäßig headless, also ohne grafischen Desktop, angelegt – schließlich geht es hier um Server. Genauer gesagt: Cloud Instances, denn im Grunde will Multipass vor allem Cloud-Test- und -Entwicklungsumgebungen mit kleinstmöglichem Aufwand bereitstellen.

Das eigentliche Ergebnis dieser Basisfunktion, also ein Headless-Ubuntu-Host, ließe sich natürlich auch mit VirtualBox direkt anlegen, allerdings mit einigen Mühen. Wer so etwas schneller realisieren möchte, greift in der Regel eher zu Containern, dort genügt ein schlichtes „docker run ubuntu_XYZ“, um einen Server aufzusetzen.

Mit Multipass geht das aber noch simpler, hier genügen sogar zwei Eingaben: „multipass launch“ erzeugt eine Standard-VM, vorkonfiguriert und mit der aktuellen Ubuntu-LTS-Version versehen. Bis hierher erstellt Multipass also VMs so einfach, wie es bislang eher Containern vorbehalten war.

Die weitere Grundkonfiguration ist sogar noch simpler: Müssen bei Containern für Netzwerk-Zugriffe noch Ports exponiert werden, können die Multipass-VMs beispielsweise direkt ins normale LAN gesetzt werden, wo sie automatisch IP-Adressen über den nächsten DHCP-Server beziehen. Auch das Ausführen von Befehlen innerhalb der VMs oder das Mounten von Ordnern des Hosts erinnert sehr an die Arbeit mit Containern, allerdings mit denkbar einfacher Syntax (später mehr dazu).

Multipass kann aber mehr als „nur“ Ubuntu-20.04-LTS-VMs im Schnellverfahren aufzusetzen. Neben der Standard-Version stehen auch Images für 18.04, 21.10, 22.04 sowie Core 16/18 zur Verfügung, dazu diverse Appliances: AdGuard Home, Mosquitto, Nextcloud, openHAB, Anbox und Plex Media Server. Spätestens mit dem Plex-Server dürfte übrigens klar werden: Multipass ist nicht nur ein Instrument für Test- und Entwicklungsumgebungen on-the-fly, sondern auch für den einfachen praktischen Betrieb von Servern – sogar privat im Heimnetz.

Natürlich könnte man bis hierher fast identisch mit Containern arbeiten. Allerdings muss eine Docker-Umgebung auch erst einmal eingerichtet werden, was mit einigen Abhängigkeiten und Einstellungen einhergeht. Multipass kann auch diese Arbeit erledigen und eine komplette Container-Umgebung, natürlich in Form einer passenden Appliance, aufbauen. Neben Docker ist darin auch die Web-Verwaltung Portainer enthalten, so dass Sie nach einem einzigen Befehl direkt in die grafische Docker-Verwaltung einsteigen können.

Nun sind einzelne Container nützlich, in der Praxis wird es für (größere) Cloud-Anwendungen aber immer wieder auf ganze Cluster hinauslaufen und damit auf die Verwaltung via Kubernetes. Multipass bietet dafür eine VM „minikube“ an: Minikube führt ein Kubernetes-Cluster mit einem einzigen Node aus und liefert so sicherlich die einfachste und schnellste Cluster-Testumgebung.

Die Arbeit mit Multipass erinnert massiv an den Umgang mit Docker auf der Kommandozeile – und denkt man dabei an die praktischen Docker-Files, um Container komplett zu konfigurieren, muss man auch bei Multipass nicht auf ähnliche Funktionalität verzichten: cloud-init erledigt auch diese Aufgabe.

Konfiguration via cloud-init

Wenig verwunderlich: Auch cloud-init stammt aus dem Hause Canonical und arbeitet wunderbar mit Ubuntu und Multipass zusammen. Das Konzept ist einfach: In einer schlichten Textdatei wird die Konfiguration für eine VM zusammengestellt, von der Installation von Paketen, über Einstellungen für das System, Nutzerkonten und so weiter, bis hin zu einem fertigen SSH-Setup. Die cloud-init-Dokumentation liefert allerhand komplexe und kommentierte Beispiele, die folgendem Muster folgen:

runcmd:
   - echo 'Hello, World!'
packages:
- git
   - apache2
users:
   - default
   - name: Peter
      gecos: Peter Petersen
   primary_group: diepetersens
   groups: users

Hier würden also Befehle ausgeführt (runcmd), Pakete installiert (packages) und Nutzer eingerichtet (users).

Das Schöne an cloud-init: Die Initialisierung von Cloud-Instanzen funktioniert Anbieter- und distributionsübergreifend, neben Ubuntu werden auch Arch Linux, CentOS, RedHat Enterprise Linux, Fedora, Gentoo Linux, openSuse und auch FreeBSD unterstützt. Mit einer cloud-init-Konfiguration können Sie also fix ein paar Fedoras bei AWS, ein Dutzend FreeBSDs bei Azure oder eben eine Handvoll Ubuntu-Instanzen lokal via Multipass aufsetzen.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

Multipass in der Praxis

Die Features klingen sicherlich gut, aber die Eleganz von Multipass wird erst klar, wenn man sich die einfachen Befehle mal in der Praxis anschaut. Wenn Sie mal mit Docker auf der Kommandozeile gearbeitet haben, wird Ihnen das vermutlich sehr vertraut vorkommen. Zunächst stellt sich die Frage, welche Images überhaupt als Basis für VMs bereitstehen:

multipass find

… listet alle verfügbaren Images, während …

multipass list

… alle eingerichteten Instanzen/VMs aufzeigt. Ebenfalls interessant für das kommende Beispiel, die Liste der verfügbaren Netzwerke:

multipass networks

Mal ein praktisches Beispiel: Gewünscht ist eine Instanz „foobar“ mit Ubuntu 20.04 LTS mit automatisch bezogener IP-Adresse im aktuellen LAN (meinlan) und darin ein gemounteter Ordner des Gastgeberrechners unter „/media/meinordner“, um auf persistente Daten zugreifen zu können - schließlich können die Multipass-VMs genauso flüchtig genutzt werden wie sonst vor allem Container.

multipass launch --name foobar --network name=meinlan
multipass mount /home/peter/daten foobar:/media/meinordner

Der Zugriff erfolgt nun ähnlich simpel – sei es, um Befehle innerhalb der VM auszuführen oder in die Shell der VM zu gelangen:

multipass exec foobar -- apt-get install git
multipass shell foobar

Genauso einfach lassen sich die Docker-Umgebung und das Minikube-Cluster aufsetzen:

multipass launch minkube
multipass launch docker

Aber das Highlight ist sicherlich der Betrieb mittels cloud-init-Dateien, die einfach als Argument übergeben werden:

multipass launch --cloud-init meine-config.txt

Mit diesem simplen Kommando können Sie also einen komplex konfigurierten Server aufsetzen - und natürlich bietet sich dann ein kleines Schleifchen an:

for i in {1..20}; do
   multipass launch \
      --name foobar$i\
      --network name=meinlan \
      --cloud-init meine-config.txt
done

Schon haben wir ein Mini-Rechenzentrum mit 20 Ubuntu-Instanzen zur Verfügung. Multipass installiert übrigens auch einen kleinen grafischen Client, der sich unter Windows im Tray einnistet, das Starten und Stoppen von Instanzen unterstützt sowie das Öffnen der zugehörigen Instanz-Shell.

Zwei weitere Kommandos sollten nicht unerwähnt bleiben, da auch sie massiv zum Charme von Multipass beitragen. Zunächst einmal „transfer“:

multipass transfer meinedatei.txt foobar:.

Mit „transfer“ lassen sich Dateien schnell und einfach in die angegebene Instanz kopieren. Und auch das Ausführen von Kommandos in Instanzen lässt sich abkürzen – wie üblich mittels Alias. Hier soll ein Alias „tatsch“ für den Befehl „touch“ in der Instanz „foobar“ genutzt werden:

multipass alias foobar:touch tatsch

Um nun eine Datei „helloworld.txt“ in der Instanz „foobar“ zu erstellen:

multipass tatsch -- helloworld.txt

Aliase unterstützen also auch Argumente, die lediglich durch „--" abgetrennt werden müssen. Mit ein wenig mehr Konfiguration können Sie sogar auf den vorangestellten multipass-Befehl verzichten. Natürlich gibt es noch einige kleinere Features und Konfigurationsmöglichkeiten, doch grundsätzlich haben Sie nun alle wichtigen Funktionen und Mechanismen von Multipass kennengelernt – ein mächtiges Tool, aber einfach zu nutzen.

(ID:48518507)