Verschachtelte Hyper-V-Virtualisierung in Windows Server 2016


hyper-vEs ist kein Geheimnis, dass die verschachtelte Hyper-V-Virtualisierung jetzt in Windows Server 2016 verfügbar ist. Trotz der Tatsache, dass zum Zeitpunkt dieses Schreibens Es ist nur die technische Vorschau 5 verfügbar. Bereits darin können Sie der neuen Funktionalität sehr nahe kommen, die ich in diesem Artikel kurz beschreiben werde.

Ich möchte darauf hinweisen, dass sich alles, was gesagt wurde, auf die Vorabversion bezieht und stark von der offiziellen Version abweichen kann.


Wenn Sie an Windows Server-Themen interessiert sind, empfehlen wir Ihnen, das Windows Server-Tag in meinem Blog zu lesen.


Verschachtelte Hyper-V-Virtualisierung

Die verschachtelte Virtualisierungsfunktion in Hypervisoren verschiedener Hersteller ist seit langem verfügbar. Beispielsweise wurde die Unterstützung von VMWare für verschachtelte virtuelle 64-Bit-Maschinen in der ESXi 5.1-Version implementiert, und dies war bereits 2011, ganz zu schweigen von der Unterstützung für verschachtelte 32-Bit-Betriebssysteme, die noch früher verfügbar waren. Auch andere Anbieter blieben nicht zurück. Allerdings konnten wir solche Funktionen von Microsoft bis heute nicht sehen. Warum? Ich konnte keine offizielle Antwort finden, aber wir können sowohl über eine allgemeine Position (eine zu dieser Zeit nicht vorrangige Aufgabe) als auch über rein logisches Denken sprechen – 2008, mit der Veröffentlichung von Windows Server 2008 und dem darauf folgenden 2008 R2, über verschachtelte Die Virtualisierung war nicht ganz relevant, schließlich war der Hypervisor in vielen Bereichen in vielerlei Hinsicht noch feucht (zum Beispiel war die maximale vCPU auf 4 begrenzt), und die Situation mit Wettbewerbern war so, dass Microsoft tatsächlich aktiv fangen musste mit ihnen.

Die Architektur

Die klassische Virtualisierung des ersten Typs ist ein Hypervisor, der den Zugriff auf Geräte zwischen einem einzelnen übergeordneten Element und mehreren Gastpartitionen begrenzt. Gleichzeitig ist nur eine Virtualisierungsebene verfügbar – Ebene 1 – und die Verwendung verschachtelter virtueller Maschinen (VM innerhalb der VM) ist nicht impliziert. Im Allgemeinen sieht die Architektur so aus ::

verschachteltes Diagramm

Bisher endete der Versuch, die Hyper-V-Rolle in einer virtuellen Maschine bereitzustellen, ausnahmslos mit einem Fehler:

vlozhennaya-virtualizatsiya-hyper-v-01

Dies geschah, weil der Hypervisor die für die Virtualisierung verantwortlichen Hardwareanweisungen (Virtualization Extensions) des Gastbetriebssystems absichtlich maskiert hat – Intel VT-x und AMD-V (wir alle erinnern uns, dass Hyper-V ein Hardwarevirtualisierungssystem ist und ohne Hardwareunterstützung nicht funktioniert).

Jetzt hat sich die Architektur so geändert, dass es möglich wurde, Sätze von Hardwareanweisungen auf das Gastbetriebssystem zu übertragen (standardmäßig ist diese Funktionalität deaktiviert):

nesteddiagram2

All dies eröffnet Möglichkeiten für eine verschachtelte Virtualisierung, die nicht auf die zweite Ebene beschränkt ist (Ebene 2 in der obigen Abbildung).

Hinweis: Unter Laborbedingungen setzte ich ganz ruhig eine virtuelle Maschine mit dem vierten Verschachtelungsgrad ein.

Aber wie bei jeder neuen Technologie (in diesem Fall frisch für Microsoft) gibt es einige Einschränkungen, die im Folgenden erläutert werden.

Einschränkungen

Es kann bedingt in Hardware und Software unterteilt werden.

Hardware

Hardwareeinschränkungen schränken die obligatorische Unterstützung des Intel-Prozessors für VT-x-Technologien ein und EPT. Wenn das Vorhandensein von VT-x die Standardanforderung für frühere Versionen von Hyper-V war, wurde EPT erst jetzt und nur für verschachtelte Virtualisierung benötigt ::

vlozhennaya-virtualizatsiya-hyper-v-13

Hinweis: Intel EPT bietet virtuellen Maschinen direkten Speicherzugriff unter Umgehung des Hypervisors und ist in der Tat eine Technologie zum Virtualisieren von Speicherseiten. Diese Technologie ist nicht neu und kann sogar im längst veralteten Core 2 Quad gefunden werden.

Und ich habe nichts vergessen, ohne über AMD-Prozessoren zu schreiben. Tatsache ist, dass verschachtelte Virtualisierung auf AMD-Prozessoren in Windows Server 2016 TP5 noch nicht unterstützt wird.

Software

Es gibt viel mehr Softwareeinschränkungen:

  1. Verwenden von Windows Server 2016 oder Windows 10 in übergeordneten und Gastabschnitten;
  2. Virtuelle Maschine mit Konfigurationsversion 8.0 und höher;
Hinweis: In Windows Server 2016 hat sich das Speicherformat der Konfigurationsdateien für virtuelle Maschinen geändert … Laut den Entwicklern ist das neue Format zuverlässiger geworden, und es wurden neue Funktionen unterstützt, die bei Verwendung virtueller Maschinen mit der alten Version der Konfiguration nicht verfügbar sind (für Windows Server 2012 R2 ist diese Version 5.0).

Wird für verschachtelte virtuelle Maschinen nicht unterstützt:

  1. Dynamisches Gedächtnis;
  2. Dynamische Migration;
  3. Schnappschüsse von virtuellen Maschinen und Status “Speichern / Wiederherstellen”;

Es ist wichtig zu beachten, dass, wenn Sie verschachtelte virtuelle Maschinen für ein externes Netzwerk freigeben möchten, ein virtueller Switch auf dem virtuellen Adapter der virtuellen “Host” -Maschine ausgelöst wird und sich mehrere virtuelle Netzwerkadapter darauf befinden bedeutet mehrere MAC-Adressen, was bedeutet Sie müssen das Spoofing von MAC-Adressen auf dem Adapter aktivieren… Dies ist auch in gewissem Sinne eine Einschränkung.

Es gibt auch eine Problemumgehung – verwenden Sie NAT (dies ist auch eine neue Funktionalität, die ich unten diskutieren werde).

Anwendung

Diejenigen, die zum ersten Mal auf verschachtelte Virtualisierung gestoßen sind, haben möglicherweise eine Frage zu deren Umfang. Lassen Sie uns näher darauf eingehen.

Testen und Entwickeln scheinen die am besten geeigneten Szenarien zu sein. In der Produktion können Sie natürlich eine vollständig verschachtelte virtuelle Infrastruktur verwenden, aber die Leistung verschachtelter Instanzen wird sicherlich sinken.

Es wurde für mich interessant, in einer realen Umgebung den Rückgang der CPU-Leistung in virtuellen Maschinen mit unterschiedlichem Verschachtelungsgrad zu überprüfen. Dafür habe ich Hot CPU Tester Pro verwendet. Obwohl sich das Testen als äußerst subjektiv herausstellte, deutet es zumindest auf einen signifikanten Rückgang der CPU-Leistung hin:

vlozhennaya-virtualizatsiya-hyper-v-02

Hinweis: Um den CPU-Leistungsindex zu messen, habe ich den Test einfach einzeln ausgeführt, zuerst auf dem Host (wobei alle VMs stummgeschaltet waren), dann die virtuelle Maschine eingeschaltet und den darin enthaltenen Index gemessen, wobei die maximal mögliche Anzahl von vCPUs zugewiesen wurde. Der nächste Schritt bestand darin, die VM in dieser VM zu starten und den Leistungsindex zu messen, der sich bereits in der virtuellen Maschine der zweiten Verschachtelung usw. befindet.

Meine Geduld reichte nur aus, um eine Instanz der dritten Verschachtelung bereitzustellen.

Anpassung

Um die verschachtelte Virtualisierung verwenden zu können, müssen Sie eine Reihe von Einstellungen auf dem Host-Betriebssystem vornehmen. Lass uns anfangen.

VM-Versions-Upgrade

Wenn Ihre virtuelle Maschine aus irgendeinem Grund eine Konfigurationsversion unter 7.1 hat (z. B. von früheren Versionen der technischen Vorschau auf Hyper-V migriert wurde), müssen Sie die Konfiguration manuell aktualisieren, indem Sie mit der rechten Maustaste auf die VM klicken und auswählen Konfigurationsversion aktualisieren::

vlozhennaya-virtualizatsiya-hyper-v-03

Oder über Powershell:

vlozhennaya-virtualizatsiya-hyper-v-04

Die letztere Option ist praktisch für Massenaktualisierungen von virtuellen Maschinen. Mit dem Befehl können Sie alle VMs gleichzeitig aktualisieren Get-VM | Update-VMVersion.

Verschachtelte Virtualisierung aktivieren

Standardmäßig maskiert der Hypervisor weiterhin die für die Virtualisierung verantwortlichen Hardware-Befehlssätze, ohne sie, wie bereits erwähnt, an das Gastbetriebssystem zu übergeben. Um dieses Verhalten zu ändern, müssen Sie den folgenden Befehl ausführen:

Ändern einer Option ExposeVirtualizationExtensions Nur über Powershell erhältlich.

Spoofing von MAC / NAT

Wenn Sie vorhaben, ein Netzwerk verschachtelter virtueller Maschinen so zu konfigurieren, dass sie sich alle in einem realen lokalen Netzwerk befinden, hängen mehrere MAC-Adressen an einem einzelnen Netzwerkadapter der virtuellen “Host” -Maschine. Dies wird voraussichtlich zu Kommunikationsproblemen führen, wenn die Einstellung nicht aktiviert ist. Aktivieren Sie das Spoofing von MAC-Adressen (und es ist nicht standardmäßig aktiviert).

Aktivieren Sie das Kontrollkästchen manuell:

vlozhennaya-virtualizatsiya-hyper-v-05

Oder über Powershell:

Wenn Sie nicht vorhaben, verschachtelte VMs für das lokale Netzwerk freizugeben, diese aber dennoch über das Netzwerk kommunizieren möchten, können Sie NAT erhöhen … Dazu müssen Sie mit dem Befehl einen virtuellen Switch des internen Typs erstellen (derzeit ist die Konfiguration von NAT nur über Powershell möglich):

Hinweis: Wenn bis zu diesem Zeitpunkt alle Einstellungen auf dem Host-Betriebssystem vorgenommen wurden, muss NAT in der virtuellen Maschine konfiguriert werden.

vlozhennaya-virtualizatsiya-hyper-v-06

NAT erstellen:

vlozhennaya-virtualizatsiya-hyper-v-07

Bitte beachten Sie, dass Sie sich zu diesem Zeitpunkt für das Subnetz entscheiden müssen, das hinter NAT verwendet wird. Natürlich sollte sich der Adressbereich nicht mit den tatsächlichen Bereichen in Ihrem lokalen Netzwerk überschneiden.

Wir weisen der Schnittstelle eine Adresse zu:

vlozhennaya-virtualizatsiya-hyper-v-08

In diesem Schritt muss der internen Schnittstelle eine Adresse zugewiesen werden, die von den verschachtelten virtuellen Maschinen als Gateway verwendet wird. Die im obigen Screenshot verwendete Befehlskonstruktion ist völlig optional, auf die Sie verzichten können Get-NetAdapter durch Angabe des Cmdlets New-NetIPAddress Netzwerkschnittstellenindex (ifIndex-Feld). In diesem Fall würde mein Befehl folgendermaßen aussehen: New-NetIPAddress -IPAddress 172.16.0.1 -AddressFamily IPv4 -PrefixLength 24 -InterfaceIndex 9.

Nun ist die Sache klein: Wir werden das Netzwerk auf der verschachtelten virtuellen Maschine konfigurieren:

vlozhennaya-virtualizatsiya-hyper-v-09

Und überprüfen Sie die Verbindung mit der Außenwelt:

vlozhennaya-virtualizatsiya-hyper-v-10

Fahren wir mit der letzten Stufe fort.

Deaktivieren Sie den dynamischen Speicher

Dynamischer Speicher wird für virtuelle Maschinen, in denen die Hyper-V-Rolle bereitgestellt wird, nicht unterstützt. Stellen Sie daher sicher, dass sie vollständig deaktiviert ist. Dies kann über die Hyper-V-Konsole erfolgen:

vlozhennaya-virtualizatsiya-hyper-v-11

Oder durch Powershell mit dem Befehl:

Damit ist die grundlegende Vorbereitung der virtuellen Maschine für die Verwendung verschachtelter Virtualisierung abgeschlossen, und Sie können mit der Installation der Hyper-V-Rolle in der VM fortfahren. Dieser Prozess unterscheidet sich nicht von der üblichen Vorbereitung des Gastgebers, daher werde ich ihn nicht im Detail betrachten. Nur um die Überzeugungskraft zu erhöhen, werde ich einen Screenshot des resultierenden Wunders zeigen:

vlozhennaya-virtualizatsiya-hyper-v-12

Natürlich müssen alle Einstellungen, die Sie auf dem Host vorgenommen haben, um verschachtelte virtuelle Maschinen auszuführen, innerhalb der virtuellen Maschinen selbst vorgenommen werden, wenn Sie verschachtelte Virtualisierung auf ihnen verwenden möchten.

Kommentare bereitgestellt von HyperComments

Leave a Reply

Your email address will not be published. Required fields are marked *