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 Anthos VM Runtime quando crei un nuovo cluster e su cluster esistenti.
Prima di iniziare
Queste istruzioni presuppongono che il cluster sia attivo e in esecuzione. In caso contrario, puoi seguire le istruzioni sulla guida rapida di Anthos clusters on bare metal per configurare rapidamente un cluster sulla tua workstation.
Abilita Anthos VM Runtime
Il runtime VM di Anthos è disabilitato, per impostazione predefinita. Per abilitare il runtime VM di Anthos, modifica la risorsa personalizzata VMRuntime
nel cluster. A partire dalla versione 1.10.0 di Cluster Anthos on bare metal, la risorsa personalizzata VMRuntime
viene installata automaticamente nei cluster.
Per abilitare Anthos VM Runtime:
Aggiorna la risorsa personalizzata
VMRuntime
per impostareenabled
sutrue
.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
Se il tuo nodo non supporta la virtualizzazione hardware o se hai dubbi, imposta
useEmulation
sutrue
.Se disponibile, la virtualizzazione hardware offre prestazioni migliori rispetto all'emulazione del software. Se non viene specificato, il valore predefinito del campo
useEmulation
èfalse
.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
Puoi cambiare il formato dell'immagine utilizzato per le VM che crei impostando il campo
vmImageFormat
.Il campo
vmImageFormat
supporta due valori per il formato dell'immagine del disco:raw
eqcow2
. Se non impostivmImageFormat
, il runtime VM di Anthos utilizza il formato dell'immagine del discoraw
per creare VM. Il formatoraw
potrebbe fornire prestazioni migliori rispetto aqcow2
, una copia nel 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 della 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
Salva la configurazione e verifica che la risorsa personalizzata
VMRuntime
sia abilitata:kubectl describe vmruntime vmruntime
I dettagli della risorsa personalizzata
VMRuntime
includono una sezioneStatus
. Il runtime VM di Anthos è abilitato e funziona quandoVMRuntime.Status.Ready
è impostato sutrue
.
Aggiornamento dei cluster
La risorsa personalizzata VMRuntime
viene installata automaticamente nei cluster aggiornati alla versione 1.10.0 o successive. 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 Anthos VM Runtime sul tuo cluster 1.9.x. Se spec.kubevirt
è presente nella risorsa cluster 1.9.x, il processo di upgrade abilita Anthos VM Runtime.
Le impostazioni delle risorse personalizzate VMRuntime
hanno la precedenza sulle impostazioni precedenti del cluster Anthos VM Runtime, ad esempio spec.kubevirt.useEmulation
, nella versione 1.10.0 o successive. Aggiorna la risorsa personalizzata VMRuntime
per modificare le impostazioni di runtime VM di Anthos per il cluster 1.10.0 o versioni successive.
Installazione di virtctl
Installa lo strumento dell'interfaccia a riga di comando di
virtctl
come plug-inkubectl
export GOOGLE_APPLICATION_CREDENTIALS="bm-gcr.json" sudo -E ./bmctl install virtctl
Verifica che
virtctl
sia installato:kubectl plugin list
Se
virtctl
è elencata nella risposta, significa che è 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 l'accesso della console alla VM una volta creata.
Creare un file cloud-it 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 utilizzando le seguenti credenziali e poi cambiare la password:
user: root
password: changeme
Se l'immagine contiene un altro 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 del file specificando il flag --cloud-init-file=<path/to/file>
. Nella sua forma più semplice, 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 Esempi di configurazione Cloud.
Dopo aver stabilito 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 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) oReadWriteMany
. - DISK_SIZE con le dimensioni che vuoi applicare al 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, eseguikubectl get storageclass
. - FILE_PATH con il percorso completo del file cloud-init personalizzato.
A seconda dell'immagine, ciò potrebbe essere necessario per ottenere l'accesso alla console dalla VM dopo averla creata. 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
sonoubuntu
,centos
,debian
efedora
. - 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
(impostazione predefinita)centos8
o un URL dell'immagine. - MEMORY_SIZE con le dimensioni 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 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) oReadWriteMany
. - DISK_SIZE con le dimensioni che vuoi applicare al 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, eseguikubectl get storageclass
. - FILE_PATH con il percorso completo del file cloud-init personalizzato.
A seconda dell'immagine, ciò potrebbe essere necessario per ottenere l'accesso alla console dalla VM dopo averla creata. 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
sonoubuntu
,centos
,debian
efedora
. - 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 le dimensioni della memoria della VM. Il valore predefinito è
4Gi
.
Immagine archiviata localmente
Puoi archiviare l'immagine personalizzata in locale e creare da lì una VM 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=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) oReadWriteMany
. - DISK_SIZE con le dimensioni che vuoi applicare al 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, ciò potrebbe essere necessario per ottenere l'accesso alla console dalla VM dopo averla creata. 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
sonoubuntu
,centos
,debian
efedora
. - CPU_NUMBER con il numero di CPU che vuoi configurare per la VM. Il valore predefinito è
1
. - IMAGE_PATH con il percorso del file locale per l'immagine personalizzata.
- MEMORY_SIZE con le dimensioni della memoria della VM. Il valore predefinito è
4Gi
.
Modifica 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. 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 cambia la configurazione predefinita della CPU dall'impostazione predefinita iniziale di 1
in 2
:
kubectl virt config default --cpu=2
Per un elenco dei flag supportati e i relativi valori predefiniti attuali, esegui:
kubectl virt config default -h
Le configurazioni predefinite vengono archiviate sul lato client come file locale denominato
~/.virtctl.default
. Puoi anche modificare le configurazioni predefinite modificando questo file.
Accedi alla tua VM
Puoi accedere alle VM utilizzando i seguenti metodi:
Accesso alla console
Per accedere a una VM dalla console, esegui questo comando:
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 cluster sono accessibili direttamente da tutti gli altri pod del 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 dei pod a cui è possibile accedere solo dall'interno del cluster. Per accedere alle VM del cluster esternamente:
Esponi la VM come servizio di bilanciamento 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 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.
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, esegui questo comando:
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:port) dall'esterno del cluster:
ssh root@21.1.38.202:22 -p 25022
Ispeziona la telemetria e i log della console VM
La telemetria delle VM e i log della console sono stati integrati in Google Cloud Console. Le informazioni di telemetria e i dati di log sono fondamentali per monitorare lo stato delle VM e risolvere eventuali problemi con le VM del cluster.
Telemetria delle VM
La dashboard Anthos VM status, fornisce dati in tempo reale sulla telemetria delle VM del cluster.
Per visualizzare le informazioni di telemetria per le VM del cluster:
Nella console Google Cloud, seleziona Monitoring o fai clic sul seguente pulsante:
Seleziona Dashboard.
Fai clic su Stato VM Anthos nell'elenco Tutte le dashboard.
Log della console VM
I log della console seriale delle VM vengono trasmessi in streaming a Cloud Logging e possono essere visualizzati in Esplora log.
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 dei 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 eliminarlo, il disco viene contrassegnato per l'eliminazione in attesa dell'eliminazione della VM.
Eliminazione di 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 verranno eliminate, puoi specificare il flag --dry-run
insieme a --all
.
Disabilita il runtime VM di Anthos
Quando non hai più bisogno di utilizzare Anthos VM Runtime, puoi disabilitare questa funzionalità.
mmctl
Per disattivare il runtime, utilizza lo strumento
bmctl
:bmctl disable vmruntime --kubeconfig KUBECONFIG_PATH \ --timeout TIMEOUT_IN_MINUTES \ --force true
Specifica il percorso del file kubeconfig per il cluster e i valori delle seguenti opzioni di configurazione:
--timeout
: TIMEOUT_IN_MINUTES in attesa di risorse esistenti delle VM da eliminare. Il valore predefinito è 10 minuti.--force
: imposta sutrue
per confermare che vuoi eliminare le risorse VM esistenti. Il valore predefinito èfalse
.
Risorsa personalizzata
Prima di poter disabilitare il runtime VM di Anthos in un cluster modificando la risorsa personalizzata VMRuntime
, devi assicurarti che tutte le VM nel cluster siano state eliminate.
Per disabilitare il runtime, aggiorna la risorsa personalizzata VMRuntime
:
Verifica la presenza di VM esistenti nel cluster:
kubectl get vm
Se il comando mostra che nel cluster sono ancora presenti VM, devi eliminarle prima di procedere.
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 nell'editor la specifica aggiornata delle risorse personalizzate.
Per verificare che la risorsa personalizzata
VMRuntime
sia disabilitata, visualizza i pod eseguiti nello spazio dei nomivm-system
:kubectl get pods --namespace vm-system
Il runtime VM di Anthos è disabilitato quando solo i pod che appartengono al deployment
vmruntime-controller-manager
sono in esecuzione nello spazio dei nomi.
Passaggi successivi
- Scopri di più sui problemi noti di Anthos VM Runtime.
- Consulta la Guida dell'utente a KubeVirt.