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
Apri la configurazione del cluster eseguendo:
kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig edit cluster CLUSTER_NAME -n cluster-CLUSTER_NAME
Sostituisci CLUSTER_NAME con il nome del tuo cluster.
Aggiungi
kubevirt
alla sezionespec
della configurazione del cluster. Se il nodo supporta la virtualizzazione hardware, impostauseEmulation
sufalse
per migliorare le prestazioni. Se la virtualizzazione hardware non è supportata o non sei sicuro, impostala sutrue
.spec: anthosBareMetalVersion: 1.8.9 kubevirt: useEmulation: true bypassPreflightCheck: false
Salva la configurazione e verifica che KubeVirt sia attivo:
kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig get pods -n kubevirt
Sostituisci CLUSTER_NAME con il nome del tuo cluster.
Il comando restituisce un messaggio simile al seguente:
NAME READY STATUS RESTARTS AGE virt-api-767bc4ccd5-56fk2 1/1 Running 0 11d virt-api-767bc4ccd5-ms8tn 1/1 Running 0 11d virt-controller-c8468c84c-l4dzr 1/1 Running 0 11d virt-controller-c8468c84c-tljnj 1/1 Running 1 11d virt-handler-6wk5v 1/1 Running 0 11d virt-handler-ngth6 1/1 Running 0 11d virt-operator-7447547957-c6g5d 1/1 Running 1 11d virt-operator-7447547957-nl826 1/1 Running 0 11d
Installazione di virtctl
Installa lo strumento dell'interfaccia a riga di comando
virtctl
come plug-inkubectl
export GOOGLE_APPLICATION_CREDENTIALS="bm-gcr.json" sudo -E ./bmctl install virtctl
Verifica che
virtctl
sia installato:kubectl plugin list
L'app
virtctl
è installata correttamente se è elencata nella risposta.
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) oReadWriteMany
. - 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, eseguikubectl 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
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
(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) oReadWriteMany
. - 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, eseguikubectl 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
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 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) oReadWriteMany
. - 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
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 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:
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.
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:
Nella console Google Cloud, seleziona Monitoring o fai clic sul seguente pulsante:
Seleziona Dashboard.
Fai clic su Stato della VM Cluster Anthos nell'elenco Tutte le dashboard.
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.
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.
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.
Apri la configurazione del cluster eseguendo:
kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig edit cluster CLUSTER_NAME -n cluster-CLUSTER_NAME
Sostituisci CLUSTER_NAME con il nome del tuo cluster.
Rimuovi
kubevirt
dalla sezionespec
della configurazione del cluster.spec: anthosBareMetalVersion: 1.8.9
kubevirt:useEmulation: truebypassPreflightCheck: falseSalva la configurazione.
Passaggi successivi
- Scopri di più sui problemi noti di runtime VM Anthos.
- Consulta la Guida dell'utente di KubeVirt.