Attivare o disattivare il runtime delle VM su GDC

Questo documento mostra come attivare o disattivare VM Runtime su Google Distributed Cloud aggiornando la risorsa personalizzata VMRuntime o eseguendo i comandi bmctl.

Prima di iniziare

Per attivare o disattivare VM Runtime su GDC, devi avere accesso alle seguenti risorse e strumenti:

Abilita il runtime delle 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 risorse VM in Google Distributed Cloud, devi abilitare il runtime VM su GDC.

bmctl

  • Per attivare il runtime, utilizza lo strumento bmctl:

    bmctl enable vmruntime --kubeconfig KUBECONFIG_PATH
    

    Specifica il percorso del file kubeconfig per il tuo cluster. Google Distributed Cloud genera il file kubeconfig sulla workstation amministrativa 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.

  1. Modifica la risorsa personalizzata VMRuntime:

    kubectl edit vmruntime
    
  2. 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 VM Runtime 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 campo useEmulation ha come valore predefinito false.
    • vmImageFormat: supporta due valori di formato dell'immagine disco: raw e qcow2. Se non imposti vmImageFormat, VM Runtime su GDC utilizza il formato dell'immagine disco raw per creare le VM. Il formato raw potrebbe offrire prestazioni migliori rispetto a qcow2, un formato copy-on-write, ma potrebbe utilizzare più spazio su disco. Per ulteriori informazioni sui formati delle immagini per la tua VM, consulta Formati dei file immagine disco nella documentazione di QEMU.
  3. Salva la risorsa personalizzata nell'editor.

  4. Verifica che la risorsa personalizzata VMRuntime sia abilitata:

    kubectl describe vmruntime vmruntime
    

    I dettagli della risorsa personalizzata VMRuntime includono una sezione Status. Il runtime VM su GDC è abilitato e funziona quando VMRuntime.Status.Ready viene visualizzato come true.

Disabilita VM Runtime su GDC

Quando non hai più bisogno di utilizzare VM Runtime 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: imposta su true per confermare che vuoi eliminare le risorse VM esistenti. Il valore predefinito è false.

Risorsa personalizzata

Per disattivare il runtime, aggiorna la risorsa personalizzata VMRuntime:

  1. Modifica la risorsa personalizzata VMRuntime:

    kubectl edit vmruntime
    
  2. Imposta enabled:false nella specifica:

    apiVersion: vm.cluster.gke.io/v1`
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: false
      useEmulation: true
      vmImageFormat: qcow2
    
  3. Salva la specifica della risorsa personalizzata aggiornata nell'editor.

  4. Per verificare che la risorsa personalizzata VMRuntime sia disattivata, visualizza i pod in esecuzione nello spazio dei nomi vm-system:

    kubectl get pods --namespace vm-system
    

    VM Runtime su GDC è disabilitato quando nello spazio dei nomi sono in esecuzione solo i pod che appartengono al deployment vmruntime-controller-manager.

Comprendere il comportamento delle VM in esecuzione

L'annotazione baremetal.cluster.gke.io/vmrumtime-force-disable può essere utilizzata sulla risorsa VM Runtime su GDC per definire il comportamento quando il runtime è disattivato 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 delle 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 Disattiva VM Runtime 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 Richiede l'eliminazione delle VM in esecuzione e delle 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 disattivare il runtime VM su GDC. Il comando bmctl restituisce un errore.

Controllo preliminare del runtime delle 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 di VM è bloccata se il controllo preflight di VM Runtime su GDC non è riuscito. Il controllo preflight di VM Runtime 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 delle VM su GDC viene eseguito quando esegui una delle seguenti operazioni:

  1. Abilita il runtime delle VM su GDC

  2. Abilitare le funzionalità di runtime VM su GDC, ad esempio useEmulation

  3. Esegui l'upgrade dei cluster

  4. Rimuovi l'etichetta kubevm.io/VM-SkipSchedule dai nodi

  5. Crea 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 YAML VMRuntimePreflightCheck.

Puoi avviare le VM quando il controllo preflight dell'ultimo runtime VM su GDC va a buon fine. Se il controllo preflight non riesce, 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 preflight sono stati eseguiti correttamente, esegui questi comandi:

  1. Per trovare 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
    
  2. Per trovare lo stato di un controllo preliminare, esegui questo 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
    ...
    

Debug degli errori di controllo preliminare

Se il controllo preflight non va a buon fine, segui questi passaggi per eseguire il debug:

  1. Trova gli ultimi controlli preflight eseguiti.

    kubectl get vmruntimepfc -n vm-system
    
  2. Per i dettagli, controlla lo stato del controllo preflight.

    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
    ...
    
  3. Risolvi il problema ed esegui di nuovo il controllo preliminare del runtime delle 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
    

Passaggi successivi