Nested Virtualization

Wie erzeugt man schwarze Löcher? Abschliessend kann Microsoft die Frage auch nicht beantworten, aber mit der Nested Virtualization sind sie schon nah dran.

Wie ich schon in einem der vorherigen Artikel geschrieben habe, gibt es in der nächsten Windows Server Version Containertechnologien. Eine Art der Container sind Hyper-V Container, also quasi eine virtualisierte Umgebung innerhalb einer Virtualisierung. Um dies zu realisieren hat Microsoft (quasi heimlich nebenbei) die Nested Virtualization ins Leben gerufen. Hiermit ist es in der Technical Preview 4 erstmals möglich, einen Hyper-V Host in einem Hyper-V Guest zu betreiben und darin ebenfalls wieder virtuelle Maschinen. Hört sich kompliziert und vielleicht auch sinnfrei an, aber es wird zukünftig genügend Einsatzzwecke hierfür geben.

Ich selber warte schon sehr lange auf dieses Feature, weil man damit in Testumgebungen sehr komplexe Umgebungen aufbauen kann, ohne dass man ein Arsenal an Hardware zu Verfügung hat. Auf einem etwas dickeren Notebook mit ordentlicher CPU Leistung, einer SSD und 32GB RAM kann man somit ganze Datacenterumgebungen simulieren. Für Präsentations- und Testzwecke also super geeignet. Inwieweit Microsoft dieses Feature zukünftig für den produktiven Einsatz empfiehlt, bleibt abzuwarten.

In diesem Artikel möchte ich beschreiben, wie man die Nested Virtualization einrichtet.

Zuvor aber ein paar Hinweise, die man beachten muss, wenn man Nested Virtualization einsetzen möchte.

Für Hyper-V eignen sich sowohl Intel- als auch AMD Prozessoren. Vorausgesetzt sie haben die entspechenden Virtualisierungsfeatures an Bord, was bei einer aktuellen CPU aber keine Frage mehr sein sollte. Für AMD-Jünger kommt jetzt leider eine schlechte Nachricht, da die Nested Virtualization momentan nur auf Intel-CPUs unterstützt wird. Ob Microsoft dies auch für AMD CPUs realisiert ist zum jetzigen Zeitpunkt noch nicht kommuniziert.

Ein paar Einschränken für den virtualisierten Hyper-V Host gibt es allerdings, wenn man Nested Virtualization einsetzen möchte:

– Server 2016 TP4 oder Windows 10 1511 sind ein Muss – also die aktuellste Hyper-V Version

– Dynamic RAM funktioniert nicht

– Memory-Resize während der Laufzeit ist nicht möglich

– Checkpoints der laufenden VM sind nicht möglich

– Livemigrationen enden in einem Fehler

– Save und Restore funktionieren ebenfalls nicht

Weiterhin muss man darauf achten, dass für den virtualisierten Hyper-V Host das “Mac-Spoofing” aktiviert ist, ansonsten haben die VMs keine Netzwerkverbindungen. Ebenfalls wichtig ist die RAM Größe des Hosts. Mit 4GB kann man vielleicht mal testen, ob das Feature läuft, aber ein wirkliches Arbeiten ist damit nicht möglich. Bei der Virtualisierung gilt immer der Leitsatz, dass man nie zuviel RAM haben kann. Bei einer Maschine mit 32GB oder vielleicht 64GB RAM kann man dagegen schon richtig was auf die Beine stellen.

Nun aber zum eigentlichen Ablauf der Einrichtung.

Step 1: Installieren von Hyper-V auf der Hardware

Dieser Step sollte eigentlich selbstverständlich sein, ich möchte ihn nur der Vollständigkeit halber mit aufführen:

nested1

 

Step 2: Installieren einer virtuellen Maschine

Auf dem zuvor installierten Hyper-V installieret man nun eine VM, die später die Rolle des virtualisierten Hyper-V Hosts einnimmt. In meinem Beispiel habe ich die VM “Nested-FirstLayer” genannt:

nested2

 

Step 3: Vorbereitung zur Nested Virtualization

Damit die VM nun selber als Hyper-V Host fungieren kann, muss sie entsprechend vorbereitet werden (kein dynamischer RAM, MAC-Spoofing…). Hierfür hat Microsoft ein Script bereitgestellt, welche diese Anpassungen automatisch erledigt. Das Script heisst: Enable-Nested-VM.ps1. und wird wie folgt aufgerufen:

./Enable-Nested-Vm.ps1 –VmName Nested-FirstLayer

Zu Verfügung gestellt hat Microsoft dieses Script auf Github unter dem folgenden Link: https://raw.githubusercontent.com/Microsoft/Virtualization-Documentation/master/hyperv-tools/Nested/Enable-NestedVm.ps1

nested3

Danach ist die Nested Virtualization eingerichtet und man kann in der VM ein Hyper-V installieren.

 

Step 4: Nested-VMs erzeugen

Hierzu gibt es nicht viel zu schreiben. In dem virtualisierten Hyper-V kann man nun VMs bereitstellen, die meiner Meinung nach echt performant sind, obwohl wir noch im Technical Preview sind.

nested4

Das ganze sieht dann wie auf dem obigen Bild aus. Ist schon irgendwie krank, aber cool. Man muss nur aufpassen, dass man nicht die Orientierung verliert. Eine VM in einer VM kann einen manchmal schon etwas verwirren.

Microsoft hat bei diesem Feature anscheinend kein Limit gesetzt. Nachdem ich die VMs für diesen Blogartikel aufgebaut habe, habe ich einfach mal versucht, noch eine Ebene zu virtualisieren. Also eine VM in einer VM in einer VM. Selbst dies ging problemlos. Die Performance geht zwar ordentlich in den Keller, aber allein dass es möglich ist, verwundert mich schon etwas. Noch mehr Ebenen habe ich nicht getestet, da mir schon so langsam schwindelig wurde.

Vielleicht kann man mit Windows Server 2016 ja doch schwarze Löcher erzeugen.

One thought on “Nested Virtualization

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.