Questo documento mostra 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 attivare o disattivare il runtime VM su GDC, devi avere accesso alle seguenti risorse e strumenti:
- Accesso al cluster Google Distributed Cloud versione 1.12.0 (
anthosBareMetalVersion: 1.12.0
) o successiva. Puoi utilizzare qualsiasi tipo di cluster in grado di eseguire i carichi di lavoro. Se necessario, prova Google Distributed Cloud su Compute Engine o consulta la panoramica della creazione dei cluster. - Lo strumento a riga di comando
bmctl
. Per maggiori informazioni, consulta Scaricare e installare lo strumentobmctl
.
Attivare il runtime della VM su GDC
Il runtime VM su GDC viene installato automaticamente in Google Distributed Cloud versione 1.10 o successive, ma è disattivato per impostazione predefinita. Prima di poter eseguire le risorse VM in Google Distributed Cloud, devi attivare il runtime VM su GDC.
bmctl
Per attivare il runtime, utilizza lo strumento
bmctl
:bmctl enable vmruntime --kubeconfig KUBECONFIG_PATH
Fornisci 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.
Impostazioni aggiuntive, ad esempio per l'emulazione o il formato dell'immagine, possono essere configurate modificando la risorsa personalizzata VMRuntime
.
Risorsa personalizzata
Per attivare il runtime, aggiorna la risorsa personalizzata VMRuntime
. Questa risorsa personalizzata è installata per impostazione predefinita.
Modifica la risorsa personalizzata
VMRuntime
:kubectl edit vmruntime
Imposta
enabled:true
nella 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: qcow2
Nella sezione
spec
precedente, è possibile impostare i seguenti valori:enabled
: impostato su true per abilitare il runtime della VM su GDCuseEmulation
: se il tuo nodo non supporta la virtualizzazione hardware o se non 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 per il formato dell'immagine disco:raw
eqcow2
. Se non impostivmImageFormat
, il tempo di esecuzione VM su GDC utilizza il formato dell'immagine discoraw
per creare VM. Il formatoraw
potrebbe offrire prestazioni migliori rispetto aqcow2
, un formato di copia su scrittura, ma potrebbe utilizzare più spazio su disco. Per ulteriori informazioni sui formati delle immagini per la VM, consulta Formati file delle immagini disco nella documentazione di QEMU.
Salva la risorsa personalizzata nell'editor.
Verifica che la risorsa personalizzata
VMRuntime
sia abilitata:kubectl describe vmruntime vmruntime
I dettagli della risorsa personalizzata
VMRuntime
includono una sezioneStatus
. Il runtime VM su GDC è attivato e funziona quandoVMRuntime.Status.Ready
viene visualizzato cometrue
.
Disattivare il runtime VM su GDC
Quando non hai più bisogno di utilizzare il runtime VM su GDC, puoi disattivare questa funzionalità.
bmctl
Per disattivare il runtime, utilizza lo strumento
bmctl
:bmctl disable vmruntime --kubeconfig KUBECONFIG_PATH \ --force=true
Fornisci il percorso del file kubeconfig per il tuo cluster e i valori per le seguenti opzioni di configurazione:
--force
: impostato sutrue
per confermare che vuoi eliminare le risorse VM esistenti. Il valore predefinito èfalse
.
Risorsa personalizzata
Per disattivare il runtime, aggiorna la risorsa personalizzata VMRuntime
:
Modifica la risorsa personalizzata
VMRuntime
:kubectl edit vmruntime
Imposta
enabled:false
nella specifica:apiVersion: vm.cluster.gke.io/v1` kind: VMRuntime metadata: name: vmruntime spec: enabled: false useEmulation: true vmImageFormat: qcow2
Salva la specifica della risorsa personalizzata aggiornata nell'editor.
Per verificare che la risorsa personalizzata
VMRuntime
sia disattivata, visualizza i pod in esecuzione nello spazio dei nomivm-system
:kubectl get pods --namespace vm-system
Il runtime VM su GDC è disabilitato quando nel lo spazio dei nomi sono in esecuzione solo i pod che appartengono al deployment
vmruntime-controller-manager
.
Informazioni sul comportamento delle VM in esecuzione
L'annotazione baremetal.cluster.gke.io/vmrumtime-force-disable
può essere utilizzata nella risorsa VM Runtime 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 disattivato 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 | Disattiva il runtime VM su GDC. |
VM esistenti | Vero | Vero | Elimina tutte le VM in esecuzione e le risorse correlate. Disattiva il runtime VM su GDC. |
Vero | Falso | Elimina tutte le VM in esecuzione e le risorse correlate. Disattiva il runtime VM su GDC. | |
Falso | Vero | Richiesta di eliminazione delle VM in esecuzione e delle risorse correlate. Dopo aver eliminato tutte le VM in esecuzione, disattiva il runtime VM su GDC. | |
Falso | Falso | Non eliminare le VM esistenti in esecuzione. Non disattivare il
runtime VM su GDC. Il comando bmctl restituisce un
errore. |
Controllo preflight del runtime VM su GDC
Il controllo preflight del runtime delle VM su GDC convalida un insieme di prerequisiti nell'ambiente della macchina prima di utilizzare il runtime delle VM su GDC e sulle VM. La creazione della VM è bloccata se il controllo preflight di VM Runtime 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 della VM su GDC viene eseguito quando esegui una delle seguenti operazioni:
Attivare il runtime della VM su GDC
Attiva le funzionalità del runtime VM su GDC, ad esempio useEmulation
Eseguire l'upgrade dei cluster
Rimuovi l'etichetta
kubevm.io/VM-SkipSchedule
dai nodiCrea in modo indipendente l'oggetto di controllo preliminare del runtime VM su GDC eseguendo il comando
bmctl check vmruntimepfc --kubeconfig KUBECONFIG_PATH
o applicando un manifest YAMLVMRuntimePreflightCheck
.
Puoi avviare le VM quando il controllo preflight dell'ultimo runtime VM su GDC è stato superato. Se il controllo preflight non va a buon fine, la creazione della VM viene bloccata e vengono visualizzati errori di controllo preflight.
Verifica dell'esito positivo del controllo preliminare
Per verificare se i controlli preliminari sono andati a buon fine, esegui i seguenti comandi:
Trova gli ultimi controlli preflight eseguiti:
kubectl get vmruntimepfc -n vm-system --kubeconfig KUBECONFIG_PATH
L'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 21s
Per trovare lo stato di un controllo preliminare, esegui il seguente comando:
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 ...
Il controllo preflight di debug non va a buon fine
Se il controllo preflight non va a buon fine, svolgi i seguenti passaggi per eseguire il debug:
Trova gli ultimi controlli preflight eseguiti.
kubectl get vmruntimepfc -n vm-system
Per maggiori dettagli, controlla lo stato del controllo prevolo.
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 preliminare del runtime della 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