Utilizzo dei carichi di lavoro basati su VM

Questa pagina mostra come eseguire il deployment delle VM su cluster Anthos su Bare Metal utilizzando Anthos VM Runtime. Anthos VM Runtime utilizza KubeVirt per orchestrare le VM su cluster, consentendoti di lavorare con le tue app basate su VM e i tuoi carichi di lavoro in un ambiente di sviluppo uniforme. Puoi abilitare Runtime VM Anthos quando crei un nuovo cluster e su cluster esistenti.

Prima di iniziare

Queste istruzioni presuppongono che il cluster sia attivo e in esecuzione. Se non è possibile, puoi seguire le istruzioni sulla guida rapida di Cluster Anthos su Bare Metal per configurare rapidamente un cluster sulla workstation.

Abilita runtime VM VM

Il runtime VM VM è disabilitato per impostazione predefinita. Per abilitare il runtime VM Anthos, modifica la risorsa personalizzata VMRuntime nel cluster. A partire dai cluster Anthos sulla versione 1.10.0 di Bare Metal, la risorsa personalizzata VMRuntime viene installata automaticamente nei cluster.

Per abilitare Runtime VM Anthos:

  1. Aggiorna la risorsa personalizzata VMRuntime per impostare enabled su true.

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: true
      # useEmulation default to false if not set.
      useEmulation: true
      # vmImageFormat default to "qcow2" if not set.
      vmImageFormat: qcow2
    
  2. Se il nodo non supporta la virtualizzazione hardware o non ne hai la certezza, imposta useEmulation su true.

    Se disponibile, la virtualizzazione hardware offre prestazioni migliori rispetto all'emulazione del software. Il campo useEmulation viene impostato su false per impostazione predefinita, se non è specificato.

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: true
      # useEmulation default to false if not set.
      useEmulation: true
      # vmImageFormat default to "qcow2" if not set.
      vmImageFormat: qcow2
    
  3. Puoi modificare il formato dell'immagine utilizzato per le VM che crei impostando il campo vmImageFormat.

    Il campo vmImageFormat supporta due valori per il formato delle immagini disco: raw e qcow2. Se non imposti vmImageFormat, il runtime VM di Anthos utilizza il formato dell'immagine disco di raw per creare le VM. Il formato raw può fornire prestazioni migliori rispetto a qcow2, una copia in formato di scrittura, ma può utilizzare più disco. Per ulteriori informazioni sui formati delle immagini per la tua VM, consulta Formati di file immagine disco nella documentazione QEMU.

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: true
      # useEmulation default to false if not set.
      useEmulation: true
      # vmImageFormat default to "qcow2" if not set.
      vmImageFormat: qcow2
    
  4. Salva la configurazione e 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 VM è abilitato e funziona quando VMRuntime.Status.Ready è impostato su true.

Upgrade di cluster 1.9.x

La risorsa personalizzata VMRuntime viene installata automaticamente nei cluster di cui è stato eseguito l'upgrade alla versione 1.10.0 o successiva. Quando esegui l'upgrade di un cluster 1.9.x alla versione 1.10.0 e successive, il processo di upgrade controlla le impostazioni del cluster e configura la risorsa personalizzata VMRuntime in modo che corrisponda alle impostazioni di runtime VM Anthos sul tuo cluster 1.9.x. Se spec.kubevirt è presente nella risorsa del cluster 1.9.x, il processo di upgrade abilita il runtime VM VM.

Le impostazioni delle risorse personalizzate di VMRuntime hanno la precedenza sulle impostazioni precedenti del cluster Anthos VM Runtime, come spec.kubevirt.useEmulation, nella versione 1.10.0 o superiore dei cluster. Aggiorna la risorsa personalizzata VMRuntime per modificare le impostazioni di runtime VM Anthos per il cluster 1.10.0 o versioni successive.

Installazione di virtctl

  1. Installa lo strumento dell'interfaccia a riga di comando virtctl come plug-in kubectl

    export GOOGLE_APPLICATION_CREDENTIALS="bm-gcr.json"
    sudo -E ./bmctl install virtctl
    
  2. Verifica che virtctl sia installato:

    kubectl plugin list
    

    Se nella risposta è presente virtctl, è stata installata correttamente.

Crea una VM

Dopo aver abilitato KubeVirt nel cluster e installato il plug-in virtctl per kubectl, puoi iniziare a creare VM nel cluster utilizzando il comando kubectl virt create vm. Prima di eseguire questo comando, ti consigliamo di configurare un file cloud-init per assicurarti di avere accesso alla console dalla VM una volta creata.

Crea un file cloud-init personalizzato per l'accesso alla console

Esistono due modi per creare un file cloud-init personalizzato. Il modo più semplice è specificare il flag --os=<OPERATING_SYSTEM> durante la creazione della VM. Questo metodo configura automaticamente un semplice file cloud-init e funziona per i seguenti sistemi operativi.

  • Ubuntu
  • CentOS
  • Debian
  • Fedora

Dopo aver creato la VM, puoi accedervi per la prima volta con le seguenti credenziali e modificare la password:

user: root
password: changeme

Se l'immagine contiene un diverso sistema operativo basato su Linux o hai bisogno di una configurazione più avanzata, puoi creare manualmente un file cloud-init personalizzato e specificare il percorso di tale file specificando il flag --cloud-init-file=<path/to/file>. Nella forma di base, il file cloud-init è un file YAML che contiene quanto segue:

#cloud-config
user: root
password: changeme
lock_passwd: false
chpasswd: {expire: false}
disable_root: false
ssh_authorized_keys:
- <ssh-key>

Per configurazioni più avanzate, consulta gli esempi di configurazione Cloud.

Dopo aver determinato quale metodo utilizzare, puoi creare una VM.

Esegui il comando kubectl virt create vm

Puoi creare VM da immagini pubbliche o personalizzate.

Immagine pubblica

Se il tuo cluster ha una connessione esterna, puoi creare una VM da un'immagine pubblica eseguendo:

kubectl virt create vm VM_NAME \
    --boot-disk-access-mode=MODE \
    --boot-disk-size=DISK_SIZE \
    --boot-disk-storage-class="DISK_CLASS" \
    --cloud-init-file=FILE_PATH \
    --cpu=CPU_NUMBER \
    --image=IMAGE_NAME \
    --memory=MEMORY_SIZE

Sostituisci quanto segue:

  • VM_NAME con il nome della VM che vuoi creare.
  • MODE con la modalità di accesso del disco di avvio. I valori possibili sono: ReadWriteOnce (valore predefinito) o ReadWriteMany.
  • DISK_SIZE con le dimensioni che vuoi per il disco di avvio. Il valore predefinito è 20Gi.
  • DISK_CLASS con la classe di archiviazione del disco di avvio. Il valore predefinito è local-shared. Per un elenco delle classi di archiviazione disponibili, esegui kubectl get storageclass.
  • FILE_PATH con il percorso completo del file cloud-init personalizzato. A seconda dell'immagine, potrebbe essere necessario ottenere l'accesso alla console dalla VM dopo la sua creazione. Se prevedi di configurare automaticamente il file cloud-init con il flag --os, non specificare il flag --cloud-init-file. Se specifichi il flag --cloud-init-file, il flag --os viene ignorato. I valori accettabili per --os sono ubuntu, centos, debian e fedora.
  • CPU_NUMBER con il numero di CPU che vuoi configurare per la VM. Il valore predefinito è 1.
  • IMAGE_NAME con l'immagine VM, che può essere ubuntu20.04 (predefinita) centos8 o un URL dell'immagine.
  • MEMORY_SIZE con la dimensione della memoria della VM. Il valore predefinito è 4Gi.

Immagine personalizzata

Quando crei una VM da un'immagine personalizzata, puoi specificare un'immagine da un server immagine HTTP o un'immagine archiviata localmente.

Server immagine HTTP

Puoi configurare un server HTTP utilizzando Apache o nginx e caricare l'immagine personalizzata nella relativa cartella esposta. Puoi quindi creare una VM dall'immagine personalizzata eseguendo:

kubectl virt create vm VM_NAME \
    --boot-disk-access-mode=DISK_ACCESS_MODE \
    --boot-disk-size=DISK_SIZE \
    --boot-disk-storage-class=DISK_CLASS \
    --cloud-init-file=FILE_PATH \
    --cpu=CPU_NUMBER \
    --image=http://SERVER_IP/IMAGE_NAME \
    --memory=MEMORY_SIZE

Sostituisci quanto segue:

  • VM_NAME con il nome della VM che vuoi creare.
  • DISK_ACCESS_MODE con la modalità di accesso del disco di avvio. I valori possibili sono ReadWriteOnce (predefinito) o ReadWriteMany.
  • DISK_SIZE con le dimensioni che vuoi per il disco di avvio. Il valore predefinito è 20Gi.
  • DISK_CLASS con la classe di archiviazione del disco di avvio. Il valore predefinito è local-shared. Per un elenco delle classi di archiviazione disponibili, esegui kubectl get storageclass.
  • FILE_PATH con il percorso completo del file cloud-init personalizzato. A seconda dell'immagine, potrebbe essere necessario ottenere l'accesso alla console dalla VM dopo la sua creazione. Se prevedi di configurare automaticamente il file cloud-init con il flag --os, non specificare il flag --cloud-init-file. Se specifichi il flag --cloud-init-file, il flag --os viene ignorato. I valori accessibili per --os sono ubuntu, centos, debian e fedora.
  • CPU_NUMBER con il numero di CPU che vuoi configurare per la VM. Il valore predefinito è 1.
  • SERVER_IP con l'indirizzo IP del server che ospita l'immagine.
  • IMAGE_NAME con il nome file dell'immagine personalizzata.
  • MEMORY_SIZE con la dimensione della memoria della VM. Il valore predefinito è 4Gi.

Immagine archiviata localmente

Puoi archiviare l'immagine personalizzata in locale e creare una VM eseguendola:

kubectl virt create vm VM_NAME \
    --boot-disk-access-mode=DISK_ACCESS_MODE \
    --boot-disk-size=DISK_SIZE \
    --boot-disk-storage-class=DISK_CLASS \
    --cloud-init-file=FILE_PATH \
    --cpu=CPU_NUMBER \
    --image=IMAGE_PATH \
    --memory=MEMORY_SIZE \

Sostituisci quanto segue:

  • VM_NAME con il nome della VM che vuoi creare.
  • DISK_ACCESS_MODE con la modalità di accesso del disco di avvio. I valori possibili sono ReadWriteOnce (predefinito) o ReadWriteMany.
  • DISK_SIZE con le dimensioni che vuoi per il disco di avvio. Il valore predefinito è 20Gi.
  • DISK_CLASS con la classe di archiviazione del disco di avvio. Il valore predefinito è local-shared.
  • FILE_PATH con il percorso completo del file cloud-init personalizzato. A seconda dell'immagine, potrebbe essere necessario ottenere l'accesso alla console dalla VM dopo la sua creazione. Se prevedi di configurare automaticamente il file cloud-init con il flag --os, non specificare il flag --cloud-init-file. Se specifichi il flag --cloud-init-file, il flag --os viene ignorato. I valori accessibili per --os sono ubuntu, centos, debian e fedora.
  • CPU_NUMBER con il numero di CPU che vuoi configurare per la VM. Il valore predefinito è 1.
  • IMAGE_PATH con il percorso file locale dell'immagine personalizzata.
  • MEMORY_SIZE con la dimensione della memoria della VM. Il valore predefinito è 4Gi.

Modificare i valori predefiniti per i flag

Il comando kubectl virt create vm utilizza valori predefiniti per compilare automaticamente i flag non specificati quando viene eseguito il comando. Puoi modificare questi valori predefiniti eseguendo:

kubectl virt config default FLAG

Sostituisci FLAG con il flag del parametro per cui vuoi modificare il valore predefinito.

Esempio: il seguente comando modifica la configurazione predefinita della CPU dal valore predefinito iniziale di 1 a 2:

kubectl virt config default --cpu=2

Per un elenco dei flag supportati e i relativi valori predefiniti correnti, esegui:

kubectl virt config default -h

Le configurazioni predefinite vengono archiviate lato client come file locale denominato ~/.virtctl.default. Puoi cambiare le configurazioni predefinite modificando anche questo file.

Accedi alla VM

Puoi accedere alle VM con i seguenti metodi:

Accesso alla console

Per accedere a una VM dalla console, esegui:

kubectl virt console VM_NAME

Sostituisci VM_NAME con il nome della VM a cui vuoi accedere.

Accesso VNC

Per accedere a una VM tramite VNC, esegui:

# This requires remote-viewer from the virt-viewer package and a graphical desktop from where you run virtctl
kubectl virt vnc VM_NAME

Sostituisci VM_NAME con il nome della VM a cui vuoi accedere.

Accesso interno

Gli indirizzi IP delle VM del tuo cluster sono accessibili direttamente da tutti gli altri pod nel cluster. Per trovare l'indirizzo IP di una VM, esegui:

kubectl get vmi VM_NAME

Sostituisci VM_NAME con il nome della VM a cui vuoi accedere.

Il comando restituisce un messaggio simile al seguente:

NAME     AGE   PHASE     IP              NODENAME
vm1      13m   Running   192.168.1.194   upgi-bm002

Accesso esterno

Le VM create nel cluster hanno indirizzi di rete pod a cui è possibile accedere solo dall'interno del cluster. Per accedere alle VM del cluster esternamente:

  1. Esporre la VM come un servizio bilanciatore del carico:

    kubectl virt expose vm VM_NAME \
        --port=LB_PORT \
        --target-port=VM_PORT \
        --type=LoadBalancer \
        --name=SERVICE_NAME
    

    Sostituisci quanto segue:

    • VM_NAME con il nome della VM a cui vuoi accedere.
    • LB_PORT con la porta del servizio bilanciatore del carico che è esposto.
    • VM_PORT con la porta sulla VM a cui vuoi accedere tramite il servizio bilanciatore del carico.
    • SERVICE_NAME con il nome che vuoi assegnare a questo servizio di bilanciamento del carico.
  2. Recupera l'indirizzo IP esterno del servizio bilanciatore del carico:

    kubectl get svc SERVICE_NAME
    

    Sostituisci SERVICE_NAME con il nome del servizio bilanciatore del carico che espone la VM.

    Puoi accedere alla porta di destinazione della VM tramite l'indirizzo IP indicato nel campo EXTERNAL-IP della risposta.

Esempio

Se hai una VM denominata galaxy a cui vuoi accedere dall'esterno del cluster tramite SSH, devi eseguire:

kubectl virt expose vm galaxy \
   --port=25022 \
   --target-port=22 \
   --type=LoadBalancer \
   --name=galaxy-ssh

Quindi recupera l'indirizzo IP del bilanciatore del carico:

kubectl get svc galaxy-ssh

Il comando restituisce un messaggio simile al seguente:

NAME        TYPE          CLUSTER-IP     EXTERNAL-IP   PORT(S)           AGE
galaxy-ssh  LoadBalancer  10.96.250.76   21.1.38.202   25000:30499/TCP   4m40s

Ora puoi accedere alla VM tramite SSH tramite 21.1.38.202:25022 (VIP:porta) dall'esterno del cluster:

ssh root@21.1.38.202:22 -p 25022

Esaminare i dati di telemetria e della console della VM

I dati di telemetria e della console delle VM sono stati integrati in Google Cloud Console. Le informazioni di telemetria e i dati di log sono fondamentali per il monitoraggio dello stato delle VM e per la risoluzione di eventuali problemi con le VM del cluster.

Telemetria VM

La dashboard Stato VM di Anthos cluster fornisce dati di telemetria in tempo reale per le tue VM del cluster.

Per visualizzare le informazioni sulla telemetria relative alle VM del tuo cluster:

  1. Nella console Google Cloud, seleziona Monitoring o fai clic sul seguente pulsante:

    Vai a Monitoring

  2. Seleziona Dashboard.

    Dashboard dello stato delle VM del cluster Anthos nell'elenco delle dashboard di Monitoring

  3. Fai clic su Stato della VM Cluster Anthos nell'elenco Tutte le dashboard.

    Dettagli sullo stato della VM del cluster Anthos

Log della console VM

I log della console seriale della VM vengono trasmessi in streaming a Cloud Logging e possono essere visualizzati in Esplora log.

Esplora log che mostra i dati VM del cluster Anthos

Elimina le VM e le relative risorse

Eliminazione solo della VM

kubectl virt delete vm VM_NAME

Sostituisci VM_NAME con il nome della VM che vuoi eliminare.

Eliminazione solo di dischi VM

kubectl virt delete disk DISK_NAME

Sostituisci DISK_NAME con il nome del disco che vuoi eliminare. Se tenti di eliminare un disco VM prima di eliminare la VM, il disco viene contrassegnato per l'eliminazione in attesa dell'eliminazione della VM.

Eliminazione delle risorse VM e risorse

kubectl virt delete vm VM_NAME --all

Sostituisci VM_NAME con il nome della VM che vuoi eliminare.

Se vuoi controllare le risorse utilizzate dalla VM che verrebbero eliminate, puoi specificare il flag --dry-run insieme a --all.

Disabilita runtime VM VM

Per disabilitare il runtime VM Anthos in un cluster, devi assicurarti che tutte le VM in quel cluster siano state eliminate. La disabilitazione di Anthos VM Runtime comporta la rimozione di tutti i deployment correlati a KubeVirt, ad esempio pod e servizi negli spazi dei nomi KubeVirt e CDI.

  1. Verifica la presenza di eventuali VM esistenti nel cluster:

    kubectl get vm
    

    Se il comando mostra che esistono ancora delle VM nel tuo cluster, devi eliminarle prima di procedere.

  2. Aggiorna la risorsa personalizzata VMRuntime per impostare enabled su false.

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: false
      # useEmulation default to false if not set.
      useEmulation: true
      # vmImageFormat default to "qcow2" if not set.
      vmImageFormat: qcow2
    
  3. Salva la configurazione e verifica che la risorsa personalizzata VMRuntime sia disabilitata:

    kubectl describe vmruntime vmruntime
    

    I dettagli della risorsa personalizzata VMRuntime includono una sezione Status. Il runtime VM VM è abilitato e funziona quando VMRuntime.Status.Ready è impostato su false.

Passaggi successivi