Mithilfe der verschachtelten Virtualisierung können Sie VM-Instanzen in anderen VMs erstellen. Compute Engine fügt bestimmten Maschinenserien Virtualisierungsanweisungen hinzu, damit diese VM-Instanzen verschachtelte VMs erstellen können. Da GKE-Knoten (Google Kubernetes Engine) auf Compute Engine-VMs ausgeführt werden, können Ihre GKE-Arbeitslasten verschachtelte VMs erstellen und verwenden. In diesem Dokument wird beschrieben, wie Sie die verschachtelte Virtualisierung in GKE aktivieren.
Funktionsweise verschachtelter VMs in GKE
Wenn Sie verschachtelte VMs in GKE verwenden möchten, aktivieren Sie die verschachtelte Virtualisierung für bestimmte Knoten oder Knotenpools. Die entsprechenden CPU-Virtualisierungserweiterungen, wie Intel Virtualization Technology (VT-x) oder AMD Virtualization (AMD-V) werden in den zugrunde liegenden VMs aktiviert. Anschließend können Sie die Erstellung verschachtelter VMs über Pods mit Software wie QEMU oder Kata Containers auslösen.
In GKE sind verschachtelte VMs in den folgenden Anwendungsfällen nützlich:
- Ausführen von nicht vertrauenswürdigem Code wie KI-Agents in Lightweight-VMs wie Kata Containers. Weitere Informationen zu diesem Anwendungsfall finden Sie unter Open-Source-Kata-Container mit Agent Sandbox in GKE verwenden.
- Hinzufügen einer Ebene der hardwaregestützten Isolation für Multi-Tenant-Arbeitslasten.
- Ausführen von Spezialsoftware wie Android-Emulatoren in der Cloud.
Geringere Auswirkungen auf die Leistung
Bei der hardwaregestützten verschachtelten Virtualisierung können Arbeitslasten, die auf den verschachtelten VMs ausgeführt werden, im Vergleich zu nicht verschachtelten Virtualisierungskonfigurationen eine geringere Leistung haben. Die Auswirkungen auf die Leistung hängen vom jeweiligen Arbeitslastprofil ab, einschließlich dessen E/A- und Arbeitsspeichernutzungsmerkmale.
Darüber hinaus kann sich das Erstellen verschachtelter VMs auf den zugrunde liegenden VMs der GKE-Knoten auf die Leistung anderer Arbeitslasten auswirken, die auf diesen Knoten ausgeführt werden.
Hinweis
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten,
installieren und dann
initialisieren Sie die
gcloud CLI. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste
Version mit dem
gcloud components updateBefehl ab. Ältere gcloud CLI-Versionen unterstützen möglicherweise nicht die Ausführung der Befehle in diesem Dokument.
- Prüfen Sie, ob Ihre Organisationsrichtlinie das Erstellen verschachtelter VMs unterstützt.
- Überprüfen Sie die Einschränkungen für verschachtelte VMs.
Anforderungen und Einschränkungen
Beachten Sie die folgenden Informationen, bevor Sie die verschachtelte Virtualisierung mit GKE aktivieren und Ihren Pods das Erstellen verschachtelter VMs erlauben:
- Sie können Knotenpools mit verschachtelten VMs nur mit einer begrenzten Anzahl von VM-Maschinen konfigurieren. In der Zeile Verschachtelte Virtualisierung des Vergleichs der Maschinenserien finden Sie Informationen zu unterstützten Maschinenserien.
- Die verschachtelte Virtualisierung wird in Windows Server-Knotenpools nicht unterstützt.
- Sie können die verschachtelte Virtualisierung nicht verwenden, wenn die Einschränkung Verschachtelte Virtualisierung für VM deaktivieren für Ihre Organisationsrichtlinie erzwungen wird.
- Sie müssen
securityContext.privileged:truefestlegen, damit Pods mit verschachtelten VMs interagieren können. Wenn Sie GKE Autopilot verwenden, können Sie keine privilegierten Pod-Knoten erstellen, außer in den folgenden Szenarien:
- Die Pods gehören zu GKE, einem GKE-Partner, oder einem genehmigten Open-Source-Projekt.
- Die Pods gehören Ihnen und sind in einer WorkloadAllowlist enthalten.
Sie können die verschachtelte Virtualisierung nicht in vorhandenen Knotenpools aktivieren.
Die verschachtelte Virtualisierung ist eine unveränderliche Einstellung in GKE.
Wenn Sie ComputeClasses verwenden, um die verschachtelte Virtualisierung zu aktivieren, muss auf Ihrem Cluster die GKE-Version 1.37.0-gke.4713000 oder höher ausgeführt werden.
Verschachtelte Virtualisierung aktivieren
In den folgenden Abschnitten wird beschrieben, wie Sie die verschachtelte Virtualisierung in GKE auf folgende Arten aktivieren:
- ComputeClasses verwenden: Aktivieren Sie im Autopilot- oder Standardmodus die verschachtelte Virtualisierung für bestimmte Knotenkonfigurationen in einer ComputeClass. Mit dieser Methode können Sie die verschachtelte Virtualisierung in automatisch erstellten Knotenpools aktivieren und auf mehrere priorisierte Knotenkonfigurationen zurückgreifen.
- GKE API verwenden: Verwenden Sie im Standardmodus einen Client wie die Google Cloud Console, die gcloud CLI oder Terraform, um bestimmte Knotenpools zu erstellen, die die verschachtelte Virtualisierung verwenden.
Mit ComputeClasses aktivieren
Sie können eine ComputeClass verwenden, um die verschachtelte Virtualisierung für bestimmte Knotengruppen im Autopilot- oder Standardmodus zu aktivieren. ComputeClasses sind die einzige Methode, mit der Sie die verschachtelte Virtualisierung für automatisch erstellte Knotenpools und Autopilot-Knoten aktivieren können. So stellen Sie eine Beispiel-ComputeClass bereit, die die verschachtelte Virtualisierung aktiviert:
Speichern Sie das folgende ComputeClass-Manifest als Datei mit dem Namen
nested-virt-class.yaml:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: nested-virt-class spec: priorities: - machineFamily: c3 spot: true enableNestedVirtualization: true - machineFamily: c4 spot: false enableNestedVirtualization: true - machineFamily: c4d spot: true enableNestedVirtualization: true nodePoolConfig: imageType: "cos_containerd" nodePoolAutoCreation: enabled: true whenUnsatisfiable: DoNotScaleUpDiese Beispiel-ComputeClass hat die folgenden Eigenschaften:
- Priorisiert C3-Instanzen auf Spot-VMs, greift auf C4-On-Demand-Instanzen zurück und dann auf C4D-Instanzen auf Spot-VMs.
- Aktiviert die verschachtelte Virtualisierung für alle Instanzen.
- Verhindert, dass GKE die Standard-Maschinenserie des Clusters skaliert, wenn keine priorisierten Instanzen verfügbar sind.
- Verwendet das Container-Optimized OS-Knotenimage für alle Knoten.
- Aktiviert die automatische Erstellung von Knotenpools, sodass GKE bei Bedarf neue Knotenpools erstellen kann, um Pods auszuführen.
Alternativ können Sie die verschachtelte Virtualisierung für alle Prioritätsregeln in Ihrer ComputeClass aktivieren, indem Sie das
enableNestedVirtualization: trueFeld imspec.priorityDefaultsFeld angeben.Erstellen Sie die ComputeClass:
kubectl apply -f nested-virt-class.yamlWenn Sie die verschachtelte Virtualisierung in einer ComputeClass aktivieren, prüft GKE die angegebene Maschinenserie auf Kompatibilität mit verschachtelten VMs. Wenn eine Maschinenserie in einer Prioritätsregel, die die verschachtelte Virtualisierung aktiviert, nicht kompatibel ist, werden Sie von GKE gewarnt. Diese Prüfung findet jedoch möglicherweise nicht jede inkompatible Konfiguration.
Erstellen Sie einen Pod, der die ComputeClass auswählt, um die Erstellung des Knotenpools auszulösen:
Speichern Sie das folgende Pod-Manifest als Datei mit dem Namen
nested-virt-example-pod.yaml:apiVersion: v1 kind: Pod metadata: name: nested-virt-example-pod spec: nodeSelector: cloud.google.com/compute-class: nested-virt-class containers: - name: example-container image: registry.k8s.io/pause:3.9Erstellen Sie den Pod:
kubectl apply -f nested-virt-example-pod.yaml
Auf den Knoten, die GKE für diese ComputeClass erstellt, ist die verschachtelte Virtualisierung aktiviert. Sie können auf diesen Knoten Anwendungen ausführen, die verschachtelte VMs erstellen. Alle Pods, die die ComputeClass verwenden, können verschachtelte VMs erstellen. Sie können beispielsweise
Kata Containers auf diesen Knoten installieren, indem Sie eine
Knotenauswahl
für das cloud.google.com/compute-class="nested-virt-class" Label angeben.
In Standardknotenpools aktivieren
Wenn Sie keine ComputeClasses verwenden möchten, können Sie die verschachtelte Virtualisierung für bestimmte neue Knotenpools in Standardclustern während einer der folgenden Vorgänge manuell aktivieren:
- Wenn Sie einen neuen Standardcluster erstellen, der die verschachtelte Virtualisierung für den Standardknotenpool aktiviert. Diese Aktivierung gilt nur für den Standardknotenpool. GKE aktiviert die verschachtelte Virtualisierung nicht automatisch für zusätzliche Knotenpools, die Sie später erstellen.
- Wenn Sie einen neuen Knotenpool in einem vorhandenen Standardcluster erstellen.
Wählen Sie eine der folgenden Optionen aus, um die verschachtelte Virtualisierung in manuell erstellten Knotenpools zu aktivieren:
Console
Verschachtelte Virtualisierung für den Standardknotenpool eines neuen Clusters aktivieren:
- Rufen Sie in der Google Cloud Console die Seite Kubernetes-Cluster erstellen auf.
- Konfigurieren Sie die Grundeinstellungen für Ihren Cluster.
- Maximieren Sie im Navigationsmenü im Bereich Knotenpools den Bereich default-pool und klicken Sie auf Knoten.
- Wählen Sie im Abschnitt Maschinenkonfiguration einen unterstützten Maschinentyp aus (siehe Zeile Verschachtelte Virtualisierung ).
- Klicken Sie nach dem Abschnitt Reservierungen das Kästchen Verschachtelte Virtualisierung aktivieren an.
- Klicken Sie auf Erstellen, um den Cluster zu erstellen.
Verschachtelte Virtualisierung für einen neuen Knotenpool in einem vorhandenen Cluster aktivieren:
Rufen Sie in der Google Cloud Console die Seite Kubernetes-Cluster auf.
Klicken Sie auf den Namen des Clusters, in dem Sie den neuen Knotenpool erstellen möchten.
Konfigurieren Sie den Knotenpool.
Klicken Sie auf den Tab Knoten.
Klicken Sie in der Überschrift des Bereichs Knotenpools auf add_box Vom Nutzer verwalteten Knotenpool erstellen.
Wählen Sie im Navigationsmenü Knoten aus.
Wählen Sie im Abschnitt Maschinenkonfiguration eine Maschinenserie aus, die die verschachtelte Virtualisierung unterstützt. Weitere Informationen finden Sie in der Vergleichstabelle der Maschinenserien, die nach der Eigenschaft Verschachtelte Virtualisierung gefiltert ist.
Klicken Sie das Kästchen Verschachtelte Virtualisierung aktivieren an. Wenn dieses Kästchen deaktiviert ist, prüfen Sie, ob Sie eine Maschinenserie ausgewählt haben, die die verschachtelte Virtualisierung unterstützt.
Klicken Sie auf Erstellen.
gcloud
Verschachtelte Virtualisierung für den Standardknotenpool eines neuen Clusters aktivieren:
gcloud container clusters create CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION --enable-nested-virtualization \ --node-labels=nested-virtualization=enabled \ --machine-type=MACHINE_TYPEErsetzen Sie Folgendes:
CLUSTER_NAME: ein Name für den Cluster.CONTROL_PLANE_LOCATION: die Region oder Zone für die Steuerungsebene des Clusters.MACHINE_TYPE: ein Maschinentyp, der die verschachtelte Virtualisierung unterstützt, z. B.n4-standard-8. Weitere Informationen finden Sie in der Vergleichstabelle der Maschinenserien , die nach der Eigenschaft Verschachtelte Virtualisierung gefiltert ist.
Verschachtelte Virtualisierung für einen neuen Knotenpool in einem vorhandenen Cluster aktivieren:
gcloud container node-pools create NODEPOOL_NAME \ --enable-nested-virtualization \ --node-labels=nested-virtualization=enabled \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --machine-type=MACHINE_TYPEErsetzen Sie Folgendes:
NODEPOOL_NAME: ein Name für den Knotenpool.CLUSTER_NAME: der Name Ihres vorhandenen Clusters.CONTROL_PLANE_LOCATION: der Speicherort der Steuerungsebene des Clusters.MACHINE_TYPE: ein Maschinentyp, der die verschachtelte Virtualisierung unterstützt, z. B.n4-standard-8. Weitere Informationen finden Sie in der Vergleichstabelle der Maschinenserien , die nach der Eigenschaft Verschachtelte Virtualisierung gefiltert ist.
Nachdem Sie den Cluster oder Knotenpool erstellt haben, können Sie
prüfen, ob die verschachtelte Virtualisierung aktiviert ist.
Die Knoten in diesen Knotenpools haben das nested-virtualization=enabled
Kubernetes-Knotenlabel, mit dem Sie Pods planen können, die
verschachtelte VMs erstellen.
Pod auf einem Knoten planen, der die verschachtelte Virtualisierung unterstützt
Fügen Sie der Spezifikation die folgende Knotenauswahl hinzu, um einen Pod auf einem Knoten mit aktivierter verschachtelter Virtualisierung zu planen:
nodeSelector:
nested-virtualization: enabled
Damit der Pod eine Verbindung zu einer verschachtelten VM herstellen kann, müssen Sie den Pod durch Konfigurieren von securityContext.privileged:true als privilegiert festlegen.