Abilita o disabilita il runtime VM su Google Distributed Cloud

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 abilitare o disabilitare il runtime VM su Google Distributed Cloud, devi accedere alle risorse e agli strumenti seguenti:

Abilita VM Runtime su Google Distributed Cloud

VM Runtime su Google Distributed Cloud viene installato automaticamente in GKE su Bare Metal versione 1.10 o successive, ma è disabilitato per impostazione predefinita. Prima di poter eseguire risorse VM nel tuo GKE su Bare Metal, devi abilitare il runtime VM su Google Distributed Cloud.

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. GKE su Bare Metal 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 Google Distributed Cloud è 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 nelle specifiche:

    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 VM su Google Distributed Cloud
    • useEmulation: se il tuo nodo non supporta la virtualizzazione hardware o non hai la certezza, imposta il valore su true. Se disponibile, la virtualizzazione hardware offre prestazioni migliori rispetto all'emulazione del software. Se non è specificato, il valore predefinito del campo useEmulation è false.
    • vmImageFormat: supporta due valori di formato dell'immagine disco: raw e qcow2. Se non imposti vmImageFormat, il runtime VM su Google Distributed Cloud utilizza il formato dell'immagine disco raw per creare le VM. Il formato raw potrebbe offrire prestazioni migliori rispetto a qcow2, una copia in formato di scrittura, ma potrebbe utilizzare più disco. Per ulteriori informazioni sui formati delle immagini per la tua VM, consulta Formati dei file immagine del 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 Google Distributed Cloud è abilitato e funziona quando VMRuntime.Status.Ready viene visualizzato come true.

Disabilita VM Runtime su Google Distributed Cloud

Quando non hai più bisogno di utilizzare VM Runtime su Google Distributed Cloud, puoi disabilitare questa funzionalità.

Bmctl

  • Per disabilitare il runtime, utilizza lo strumento bmctl:

    bmctl disable vmruntime --kubeconfig KUBECONFIG_PATH \
      --force=true
    

    Indica il percorso del file kubeconfig per il tuo cluster e i valori per le seguenti opzioni di configurazione:

    • --force: imposta il valore su true per confermare che vuoi eliminare le risorse VM esistenti. Il valore predefinito è false.

Risorsa personalizzata

Per disabilitare il runtime, aggiorna la risorsa personalizzata VMRuntime:

  1. Modifica la risorsa personalizzata VMRuntime:

    kubectl edit vmruntime
    
  2. Imposta enabled:false nelle specifiche:

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

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

    kubectl get pods --namespace vm-system
    

    Il runtime VM su Google Distributed Cloud è disabilitato quando solo i pod che appartengono al deployment vmruntime-controller-manager sono in esecuzione nello spazio dei nomi.

Comprendi il comportamento delle VM in esecuzione

L'annotazione baremetal.cluster.gke.io/vmrumtime-force-disable può essere utilizzata su VM Runtime on Google Distributed Cloud per definire il comportamento in cui 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 Google Distributed Cloud cerca di proteggere le VM in esecuzione. Elimina tutte le VM in esecuzione prima che il runtime VM su Google Distributed Cloud sia 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 --force parametro annotazione vmrumtime-force-disable Comportamento
Nessuna VM N/A N/A Disabilita VM Runtime su Google Distributed Cloud.
VM esistenti Vero Vero Elimina tutte le VM in esecuzione e le risorse correlate. Disabilita il runtime VM su Google Distributed Cloud.
Vero falso Elimina tutte le VM in esecuzione e le risorse correlate. Disabilita il runtime VM su Google Distributed Cloud.
falso Vero Richiesta di eliminazione delle VM in esecuzione e delle risorse correlate. Dopo aver eliminato tutte le VM in esecuzione, disabilita il runtime VM su Google Distributed Cloud.
falso falso Non eliminare alcuna VM esistente in esecuzione. Non disabilitare il runtime VM su Google Distributed Cloud. Il comando bmctl restituisce un errore.

Controllo preflight VM Runtime su Google Distributed Cloud

Il controllo preflight del runtime VM su Google Distributed Cloud convalida un insieme di prerequisiti nell'ambiente della macchina prima di utilizzare VM Runtime su Google Distributed Cloud e sulle VM. La creazione della VM è bloccata se il controllo preflight di VM Runtime su Google Distributed Cloud non è andato a buon fine. Il controllo preflight del runtime VM su Google Distributed Cloud 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 Google Distributed Cloud viene eseguito quando esegui una delle seguenti operazioni:

  1. Abilita VM Runtime su Google Distributed Cloud
  2. Abilita VM Runtime sulle funzionalità di Google Distributed Cloud, come useEmulation
  3. Esegui l'upgrade dei cluster
  4. Rimuovi l'etichetta kubevm.io/VM-SkipSchedule dai nodi
  5. Crea in modo indipendente il runtime VM sull'oggetto di controllo preflight Google Distributed Cloud eseguendo il comando bmctl check vmruntimepfc --kubeconfig KUBECONFIG_PATH o applicando un manifest YAML VMRuntimePreflightCheck.

Puoi avviare le VM una volta completato l'ultimo controllo preflight del runtime VM su Google Distributed Cloud. 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 preflight

Per verificare se i controlli preflight hanno avuto esito positivo, esegui i comandi seguenti:

  1. Trova gli ultimi controlli preflight eseguiti:

    kubectl get vmruntimepfc -n vm-system --kubeconfig KUBECONFIG_PATH
    

    L'output dovrebbe essere simile all'esempio seguente:

    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 preflight, 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
       ...
    
     ```
    

Controllo preflight del debug non riuscito

Se il controllo preflight non va a buon fine, esegui i seguenti passaggi per eseguire il debug:

  1. Trova gli ultimi controlli preflight eseguiti.

    kubectl get vmruntimepfc -n vm-system
    
  2. Controlla lo stato del controllo preflight per maggiori 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
      ...
    
  3. Risolvi il problema ed esegui di nuovo VM Runtime sul controllo preflight di Google Distributed Cloud. Di seguito è mostrato un manifest YAML VMRuntimePreflightCheck di esempio:

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntimePreflightCheck
    metadata:
      name: vmruntime-preflight-check-manual
      namespace: vm-system
    

Passaggi successivi