Questo documento spiega come abilitare o disabilitare il runtime VM su Google Distributed Cloud aggiornando la risorsa personalizzata VMRuntime o eseguendo i comandi bmctl.
Prima di iniziare
Per abilitare o disabilitare il runtime VM su GDC, devi avere accesso alle seguenti risorse e strumenti:
- Accesso a un cluster Google Distributed Cloud versione 1.12.0 (
anthosBareMetalVersion: 1.12.0) o successive. Puoi utilizzare qualsiasi tipo di cluster in grado di eseguire carichi di lavoro. Se necessario, prova Google Distributed Cloud su Compute Engine o consulta la panoramica della creazione del cluster. - Lo strumento a riga di comando
bmctl. Per ulteriori informazioni, consulta Scaricare e installare lo strumentobmctl.
Abilitare il runtime VM su GDC
Il runtime VM su GDC viene installato automaticamente in Google Distributed Cloud versione 1.10 o successive, ma è disabilitato per impostazione predefinita. Prima di poter eseguire le risorse VM in Google Distributed Cloud, devi abilitare il runtime VM su GDC.
bmctl
Per abilitare il runtime, utilizza lo strumento
bmctl:bmctl enable vmruntime --kubeconfig KUBECONFIG_PATHFornisci il percorso del file kubeconfig per il tuo cluster. Google Distributed Cloud genera il file kubeconfig sulla workstation di amministrazione quando crei un cluster. Per impostazione predefinita, il percorso è
bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig.Se il runtime VM su GDC è già abilitato, il comando restituisce un errore.
È possibile configurare impostazioni aggiuntive, ad esempio per l'emulazione o il formato dell'immagine, modificando la risorsa personalizzata VMRuntime.
Risorsa personalizzata
Per abilitare il runtime, aggiorna la risorsa personalizzata VMRuntime. Questa risorsa personalizzata è installata per impostazione predefinita.
Modifica la risorsa personalizzata
VMRuntime:kubectl edit vmruntimeImposta
enabled:truenella specifica:apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: enabled: true # useEmulation defaults to "false" if not set. useEmulation: true # vmImageFormat defaults to "qcow2" if not set. vmImageFormat: qcow2Nella sezione
specprecedente, è possibile impostare i seguenti valori:enabled: imposta su true per abilitare il runtime VM su GDC.useEmulation: se il nodo non supporta la virtualizzazione hardware o non ne hai la certezza, imposta il valore su true. Se disponibile, la virtualizzazione hardware offre prestazioni migliori rispetto all'emulazione software. Se non specificato, il valore predefinito del campouseEmulationèfalse.vmImageFormat: supporta due valori di formato dell'immagine disco:raweqcow2. Se non impostivmImageFormat, il runtime VM su GDC utilizza il formato dell'immagine discorawper creare le VM. Il formatorawpuò offrire prestazioni migliori rispetto aqcow2, un formato di copia su scrittura, ma potrebbe utilizzare più spazio su disco. Per ulteriori informazioni su i formati delle immagini per la tua VM, consulta Formati dei file immagine disco nella documentazione di QEMU.
Salva la risorsa personalizzata nell'editor.
Verifica che la risorsa personalizzata
VMRuntimesia abilitata:kubectl describe vmruntime vmruntimeI dettagli della risorsa personalizzata
VMRuntimeincludono una sezioneStatus. Il runtime VM su GDC è abilitato e funziona quandoVMRuntime.Status.Readyè impostato sutrue.
Disabilitare il runtime VM su GDC
Quando non hai più bisogno di utilizzare il runtime VM su GDC, puoi disabilitare questa funzionalità.
bmctl
Per disabilitare il runtime, utilizza lo strumento
bmctl:bmctl disable vmruntime --kubeconfig KUBECONFIG_PATH \ --force=trueFornisci il percorso del file kubeconfig per il tuo cluster e i valori per le seguenti opzioni di configurazione:
--force: imposta sutrueper confermare che vuoi eliminare le risorse VM esistenti. Il valore predefinito èfalse.
Risorsa personalizzata
Per disabilitare il runtime, aggiorna la risorsa personalizzata VMRuntime:
Modifica la risorsa personalizzata
VMRuntime:kubectl edit vmruntimeImposta
enabled:falsenella specifica:apiVersion: vm.cluster.gke.io/v1` kind: VMRuntime metadata: name: vmruntime spec: enabled: false useEmulation: true vmImageFormat: qcow2Salva la specifica della risorsa personalizzata aggiornata nell'editor.
Per verificare che la risorsa personalizzata
VMRuntimesia disabilitata, visualizza i pod in esecuzione nello spazio dei nomivm-system:kubectl get pods --namespace vm-systemIl runtime VM su GDC è disabilitato quando nello spazio dei nomi sono in esecuzione solo i pod appartenenti al deployment
vmruntime-controller-manager.
Comprendere il comportamento per l'esecuzione delle VM
L'annotazione baremetal.cluster.gke.io/vmrumtime-force-disable può essere utilizzata sulla risorsa del runtime VM su GDC per definire il comportamento quando il runtime è disabilitato mentre le VM sono in esecuzione nel cluster.
L'esempio seguente mostra che il valore di questa annotazione è impostato su false per impostazione predefinita:
// VM runtime yaml file
apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
annotations:
baremetal.cluster.gke.io/vmrumtime-force-disable: "false"
name: vmruntime
[...]
Quando questa annotazione è impostata su false, il runtime VM su GDC tenta di proteggere le VM in esecuzione. Elimina tutte le VM in esecuzione prima che il runtime VM su GDC venga disabilitato oppure specifica il parametro --force=true con il comando bmctl disable vmruntime, come mostrato nella sezione precedente.
La tabella seguente spiega cosa succede alle VM in esecuzione quando questa annotazione
è impostata su true o false e se specifichi o meno il parametro --force=true:
| Stato del cluster | Parametro --force | Annotazione vmrumtime-force-disable | Comportamento |
|---|---|---|---|
| Nessuna VM | N/D | N/D | Disabilita il runtime VM su GDC. |
| VM esistenti | Vero | Vero | Elimina tutte le VM in esecuzione e le risorse correlate. Disabilita il runtime VM su GDC. |
| Vero | Falso | Elimina tutte le VM in esecuzione e le risorse correlate. Disabilita il runtime VM su GDC. | |
| Falso | Vero | Ti viene chiesto di eliminare le VM in esecuzione e le risorse correlate. Quando tutte le VM in esecuzione sono state eliminate, disabilita il runtime VM su GDC. | |
| Falso | Falso | Non eliminare le VM esistenti in esecuzione. Non disabilitare il
runtime VM su GDC. Il comando bmctl restituisce un
errore. |
Controllo preflight del runtime VM su GDC
Il controllo preflight del runtime VM su GDC convalida un insieme di prerequisiti nell'ambiente della macchina prima di utilizzare il runtime VM su GDC e le VM. La creazione della VM viene bloccata se il controllo preflight del runtime VM su GDC non è riuscito. Il controllo preflight del runtime VM su GDC viene eseguito automaticamente quando spec.enabled è impostato su true.
kubectl label nodes NODE_NAME "kubevm.io/VM-SkipSchedule"= --kubeconfig KUBECONFIG_PATH
Il controllo preflight del runtime VM su GDC viene eseguito quando esegui una delle seguenti operazioni:
Abilitare il runtime VM su GDC
Abilitare le funzionalità del runtime VM su GDC, ad esempio useEmulation
Eseguire l'upgrade dei cluster
Rimuovere l'etichetta
kubevm.io/VM-SkipScheduledai nodiCreare in modo indipendente l'oggetto del controllo preflight del runtime VM su GDC eseguendo il comando
bmctl check vmruntimepfc --kubeconfig KUBECONFIG_PATHo applicando unVMRuntimePreflightCheckmanifest YAML.
Puoi avviare le VM quando l'ultimo controllo preflight del runtime VM su GDC è riuscito. Se il controllo preflight non riesce, la creazione della VM viene bloccata e vengono visualizzati errori di controllo preflight.
Verificare l'esito positivo del controllo preflight
Per verificare se i controlli preflight sono riusciti, esegui i seguenti comandi:
Trova gli ultimi controlli preflight eseguiti:
kubectl get vmruntimepfc -n vm-system --kubeconfig KUBECONFIG_PATHL'output dovrebbe essere simile al seguente esempio:
NAME PASS AGE vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e false 42s vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5 true 21sPer trovare lo stato di un controllo preflight, esegui il comando seguente:
kubectl get vmruntime vmruntime -o yaml --kubeconfig KUBECONFIG_PATH... preflightCheckSummary: preflightCheckSummary: featureStatuses: CPU: passed: true KVM: passed: true preflightCheckName: vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5 preflightCheckPassed: true ...
Eseguire il debug degli errori del controllo preflight
Se il controllo preflight non riesce, segui questi passaggi per eseguire il debug:
Trova gli ultimi controlli preflight eseguiti.
kubectl get vmruntimepfc -n vm-systemControlla lo stato del controllo preflight per i dettagli.
kubectl get vmruntimepfc -n vm-system \ vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e -o yaml \ --kubeconfig KUBECONFIG_PATH... status: checks: worker-0--52229ee15841099-22c41577139a7b8c.lab.anthos: passed: false results: - checkName: CPU passed: true - checkName: KVM message: | command terminated with exit code 1 ls: /mnt/dev/kvm: No such file or directory passed: false ...Risolvi il problema ed esegui di nuovo il controllo preflight del runtime VM su GDC. Di seguito è riportato un esempio di manifest YAML VMRuntimePreflightCheck:
apiVersion: vm.cluster.gke.io/v1 kind: VMRuntimePreflightCheck metadata: name: vmruntime-preflight-check-manual namespace: vm-system