Puoi creare istanze di macchine virtuali (VM) all'interno di altre VM utilizzando la virtualizzazione nidificata. Compute Engine aggiunge istruzioni di virtualizzazione a serie di macchine specifiche in modo che queste istanze VM possano creare VM nidificate. Poiché i nodi Google Kubernetes Engine (GKE) vengono eseguiti su VM Compute Engine, i workload GKE possono creare e utilizzare VM nidificate. Questo documento mostra come abilitare la virtualizzazione nidificata in GKE.
Come funzionano le VM nidificate in GKE
Per utilizzare le VM nidificate in GKE, devi abilitare la virtualizzazione nidificata per nodi o node pool specifici. Le estensioni di virtualizzazione della CPU corrispondenti, come Intel Virtualization Technology (VT-x) o AMD Virtualization (AMD-V) sono abilitate nelle VM sottostanti. Puoi quindi attivare la creazione di VM nidificate dai pod utilizzando software come QEMU o Kata Containers.
In GKE, le VM nidificate sono utili per i seguenti casi d'uso:
- Esegui codice non attendibile, come gli agenti AI, in VM leggere, come Kata Containers. Per ulteriori informazioni su questo caso d'uso, consulta Utilizzare Kata Containers open source con Agent Sandbox su GKE.
- Aggiungi un livello di isolamento assistito dall'hardware per i workload multi-tenant.
- Esegui software specializzati come gli emulatori Android nel cloud.
Impatto sulle prestazioni ridotto
Con la virtualizzazione nidificata assistita dall'hardware, i workload in esecuzione sulle VM nidificate potrebbero subire una riduzione delle prestazioni rispetto alle configurazioni di virtualizzazione non nidificate. L'impatto sulle prestazioni dipende dal profilo del workload specifico, incluse le caratteristiche di utilizzo di I/O e memoria utilizzata.
Inoltre, la creazione di VM nidificate sulle VM sottostanti dei nodi GKE potrebbe influire sulle prestazioni di altri workload in esecuzione su questi nodi.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il
gcloud components updatecomando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
- Assicurati che la policy dell'organizzazione supporti la creazione di VM nidificate.
- Esamina le limitazioni delle VM nidificate restrictions.
Requisiti e limitazioni
Prima di abilitare la virtualizzazione nidificata con GKE e consentire ai pod di creare VM nidificate, tieni presente le seguenti informazioni:
- Puoi configurare i node pool con VM nidificate solo con un numero limitato di serie di macchine VM. Consulta la riga Virtualizzazione nidificata del confronto tra serie di macchine per verificare le serie di macchine supportate.
- La virtualizzazione nidificata non è supportata nei node pool Windows Server.
- Non puoi utilizzare la virtualizzazione nidificata se il vincolo Disabilita la virtualizzazione nidificata della VM è applicato alla policy dell'organizzazione.
- Devi impostare
securityContext.privileged:trueper consentire ai pod di interagire con le VM nidificate. Se utilizzi GKE Autopilot, non puoi creare nodi pod con privilegi, tranne nei seguenti scenari:
- I pod sono di proprietà di GKE, di un partner GKE, o di un progetto open source approvato.
- I pod sono di tua proprietà e sono inclusi in un WorkloadAllowlist.
Non puoi abilitare la virtualizzazione nidificata nei node pool esistenti.
La virtualizzazione nidificata è un'impostazione immutabile in GKE.
Se utilizzi ComputeClasses per abilitare la virtualizzazione nidificata, il cluster deve eseguire GKE versione 1.37.0-gke.4713000 o successive.
Abilita virtualizzazione nidificata
Le sezioni seguenti mostrano come abilitare la virtualizzazione nidificata in GKE nei seguenti modi:
- Utilizza ComputeClasses: in modalità Autopilot o Standard, abilita la virtualizzazione nidificata per configurazioni di nodi specifiche in una ComputeClass. Utilizzando questo metodo, puoi abilitare la virtualizzazione nidificata nei node pool creati automaticamente ed eseguire il fallback tra più configurazioni di nodi con priorità.
- Utilizza l'API GKE: in modalità Standard, utilizza un client come la Google Cloud console, gcloud CLI o Terraform per creare node pool specifici che utilizzano la virtualizzazione nidificata.
Abilita utilizzando ComputeClasses
Puoi utilizzare una ComputeClass per abilitare la virtualizzazione nidificata per gruppi di nodi specifici in modalità Autopilot o Standard. ComputeClasses è l'unico metodo con cui puoi abilitare la virtualizzazione nidificata per i node pool creati automaticamente e i nodi Autopilot. Per eseguire il deployment di una ComputeClass di esempio che abilita la virtualizzazione nidificata, segui questi passaggi:
Salva il seguente manifest di ComputeClass come file denominato
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: DoNotScaleUpQuesta ComputeClass di esempio ha le seguenti proprietà:
- Dà la priorità alle istanze C3 sulle VM spot, esegue il fallback alle istanze C4 on demand e poi alle istanze C4D sulle VM spot.
- Abilita la virtualizzazione nidificata per tutte le istanze.
- Impedisce a GKE di eseguire lo scale up della serie di macchine predefinita del cluster se le istanze con priorità non sono disponibili.
- Utilizza l'immagine del nodo Container-Optimized OS per tutti i nodi.
- Abilita la creazione automatica dei pool di nodi, in modo che GKE possa creare nuovi node pool per eseguire i pod quando necessario.
In alternativa, puoi abilitare la virtualizzazione nidificata per tutte le regole di priorità nella ComputeClass specificando il
enableNestedVirtualization: truecampo nelspec.priorityDefaultscampo.Crea la ComputeClass:
kubectl apply -f nested-virt-class.yamlQuando abiliti la virtualizzazione nidificata in una ComputeClass, GKE verifica la compatibilità delle serie di macchine specificate con le VM nidificate. Se una serie di macchine in una regola di priorità che abilita la virtualizzazione nidificata non è compatibile, GKE ti avvisa. Tuttavia, questo controllo potrebbe non trovare tutte le configurazioni incompatibili.
Per attivare la creazione pool di nodi, crea un pod che seleziona la ComputeClass:
Salva il seguente manifest del pod come file denominato
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.9Crea il pod:
kubectl apply -f nested-virt-example-pod.yaml
I nodi creati da GKE per questa ComputeClass hanno la virtualizzazione nidificata abilitata. Puoi eseguire applicazioni che creano VM nidificate su questi nodi. Tutti i pod che utilizzano la ComputeClass possono creare VM nidificate. Ad esempio,
puoi installare Kata Containers su questi nodi specificando un
selettore di nodi
per l'etichetta cloud.google.com/compute-class="nested-virt-class".
Abilita nei node pool standard
Se non vuoi utilizzare ComputeClasses, puoi abilitare manualmente la virtualizzazione nidificata per nuovi node pool specifici nei cluster standard durante una delle seguenti operazioni:
- Quando crei un nuovo cluster standard, che abilita la virtualizzazione nidificata per il pool di nodi predefinito. Questa abilitazione si applica solo al pool di nodi predefinito. GKE non abilita automaticamente la virtualizzazione nidificata per i node pool aggiuntivi che crei in un secondo momento.
- Quando crei un nuovo pool di nodi in un cluster standard esistente.
Per abilitare la virtualizzazione nidificata nei node pool creati manualmente, seleziona una delle seguenti opzioni:
Console
Abilita la virtualizzazione nidificata per il pool di nodi predefinito di un nuovo cluster:
- Nella Google Cloud console, vai alla pagina Crea un cluster Kubernetes.
- Configura le impostazioni di base per il cluster.
- Nel menu di navigazione, nella sezione Node pool, espandi la sezione default-pool e fai clic su Nodi.
- Nella sezione Configurazione macchina, scegli un tipo di macchina supportato (vedi la riga Virtualizzazione nidificata).
- Dopo la sezione Prenotazioni, seleziona la casella di controllo Abilita virtualizzazione nidificata.
- Per creare il cluster, fai clic su Crea.
Abilita la virtualizzazione nidificata per un nuovo pool di nodi in un cluster esistente:
Nella Google Cloud console, vai alla pagina Cluster Kubernetes.
Fai clic sul nome del cluster in cui vuoi creare il nuovo node pool.
Configura il pool di nodi.
Fai clic sulla scheda Nodi.
Nell'intestazione della sezione Node pool, fai clic su add_box Crea node pool gestito dall'utente.
Nel menu di navigazione, seleziona Nodi.
Nella sezione Configurazione macchina, scegli una serie di macchine che supporta la virtualizzazione nidificata. Per ulteriori informazioni, filtra la tabella di confronto tra serie di macchine per la proprietà Virtualizzazione nidificata.
Seleziona la casella di controllo Abilita virtualizzazione nidificata. Se questa casella di controllo è disabilitata, verifica di aver selezionato una serie di macchine che supporta la virtualizzazione nidificata.
Fai clic su Crea.
gcloud
Abilita la virtualizzazione nidificata per il pool di nodi predefinito di un nuovo cluster:
gcloud container clusters create CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION --enable-nested-virtualization \ --node-labels=nested-virtualization=enabled \ --machine-type=MACHINE_TYPESostituisci quanto segue:
CLUSTER_NAME: un nome per il cluster.CONTROL_PLANE_LOCATION: la regione o la zona per il piano di controllo del cluster.MACHINE_TYPE: un tipo di macchina che supporta la virtualizzazione nidificata, ad esempion4-standard-8. Per ulteriori informazioni, filtra la tabella di confronto tra serie di macchine per la proprietà Virtualizzazione nidificata.
Abilita la virtualizzazione nidificata per un nuovo pool di nodi in un cluster esistente:
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_TYPESostituisci quanto segue:
NODEPOOL_NAME: un nome per il pool di nodi.CLUSTER_NAME: il nome del cluster esistente.CONTROL_PLANE_LOCATION: la località del piano di controllo del cluster.MACHINE_TYPE: un tipo di macchina che supporta la virtualizzazione nidificata, ad esempion4-standard-8. Per ulteriori informazioni, filtra la tabella di confronto tra serie di macchine per la proprietà Virtualizzazione nidificata.
Dopo aver creato il cluster o pool di nodi, puoi
verificare se la virtualizzazione nidificata è abilitata.
I nodi in questi node pool hanno l'etichetta del nodo nested-virtualization=enabled
Kubernetes, che puoi utilizzare per pianificare i pod che
creano VM nidificate.
Pianifica un pod su un nodo che supporta la virtualizzazione nidificata
Per pianificare un pod su un nodo con la virtualizzazione nidificata abilitata, aggiungi il seguente selettore di nodi alla specifica:
nodeSelector:
nested-virtualization: enabled
Inoltre, affinché il pod si connetta a una VM nidificata, devi impostarlo come privilegiato configurando securityContext.privileged:true.