GNU/Linux >> Linux Esercitazione >  >> Linux

Gestisci macchine virtuali KVM con il programma Virsh

Virsh , abbreviazione di Vir tuo Sh ell, è un'interfaccia utente a riga di comando per la gestione di macchine guest virtuali. Virsh consente di creare, elencare, modificare, avviare, riavviare, interrompere, sospendere, riprendere, spegnere ed eliminare VM. Attualmente supporta KVM, LXC, Xen, QEMU, OpenVZ, VirtualBox e VMware ESX. In questa guida parleremo di come gestire KVM macchine virtuali con interfaccia utente di gestione Virsh in Linux.

Assicurati di aver installato l'utilità KVM e Virsh sulla tua macchina Linux. Le seguenti guide spiegano come installare KVM su sistemi basati su DEB e RPM.

  • Installa e configura KVM in Ubuntu 20.04 Headless Server
  • Installa e configura KVM nel server CentOS 8
  • Installa e configura KVM in OpenSUSE Tumbleweed

1. Gestisci macchine virtuali KVM con il comando Virsh

Se non conosci Virsh e KVM, è meglio iniziare con la lettura del manuale di aiuto. Ti darà un'idea di base su come usare Virsh.

1.1. Ottenere aiuto

Immettere il comando seguente per visualizzare l'elenco dei comandi disponibili insieme a una breve descrizione:

$ virsh help

Vedrai un elenco completo di comandi virsh disponibili per gestire le macchine virtuali KVM dalla riga di comando.

Non devi memorizzare tutto. Basta leggere la descrizione di un comando che si desidera eseguire e utilizzarlo.

I comandi sono raggruppati nelle seguenti sezioni:

  • Gestione del dominio,
  • Monitoraggio del dominio,
  • Host e Hypervisor,
  • Punto di controllo,
  • Interfaccia,
  • Filtro di rete,
  • Rete,
  • Dispositivo nodo,
  • Segreto,
  • Istantanea,
  • Backup,
  • Piscina di stoccaggio,
  • Volume di archiviazione,
  • Virsh stesso.

Ogni sezione contiene i comandi relativi all'esecuzione di un particolare insieme di attività. Puoi visualizzare la sezione della guida di un gruppo, ad esempio Rete , come di seguito:

$ virsh help Networking

Vedrai i comandi relativi alle attività di rete:

 Networking (help keyword 'network'):
    net-autostart                  autostart a network
    net-create                     create a network from an XML file
    net-define                     define an inactive persistent virtual network or modify an existing persistent one from an XML file
    net-destroy                    destroy (stop) a network
    net-dhcp-leases                print lease info for a given network
    net-dumpxml                    network information in XML
    net-edit                       edit XML configuration for a network
    net-event                      Network Events
    net-info                       network information
    net-list                       list networks
    net-name                       convert a network UUID to network name
    net-start                      start a (previously defined) inactive network
    net-undefine                   undefine a persistent network
    net-update                     update parts of an existing network's configuration
    net-uuid                       convert a network name to network UUID
    net-port-list                  list network ports
    net-port-create                create a network port from an XML file
    net-port-dumpxml               network port information in XML
    net-port-delete                delete the specified network port

È inoltre possibile visualizzare ulteriormente la sezione della guida di un comando specifico. Ad esempio, visualizzerò la sezione della guida di "net-name" comando:

$ virsh help net-name
  NAME
    net-name - convert a network UUID to network name

  SYNOPSIS
    net-name <network>

  OPTIONS
    [--network] <string>  network uuid

1.2. Elenca le macchine virtuali

Per visualizzare l'elenco delle macchine virtuali guest in modalità di esecuzione o sospensione, eseguire il comando seguente:

$ virsh list
Id Name State
--------------------

Come puoi vedere, non ci sono ospiti in modalità corsa o sospensione.

Puoi utilizzare --inattivo opzione per elencare gli ospiti inattivi.

Per visualizzare tutte le macchine guest, esegui:

$ virsh list --all
 Id   Name            State
--------------------------------
 -    centos8-uefi    shut off
 -    nginx_centos8   shut off

Come puoi vedere nell'output sopra, ho due macchine virtuali:"centos8-uefi" e "nginx_centos8". Entrambi sono spenti.

1.3. Avvia macchine virtuali

Per avviare una macchina virtuale, ad esempio "centos8-uefi", esegui:

$ virsh start centos8-uefi

Vedrai un output come di seguito:

Domain centos8-uefi started

Per verificare se la VM è in esecuzione, usa "list" comando:

$ virsh list
 Id   Name           State
------------------------------
 1    centos8-uefi   running

1.4. Salva macchine virtuali

Per salvare lo stato corrente di una macchina virtuale in esecuzione, esegui:

$ virsh save centos8-uefi centos8-save

Domain centos8-uefi saved to centos8-save

Questo comando arresta il guest chiamato "centos8-uefi" e salva i dati in un file chiamato "centos8-save". Ci vorranno alcuni istanti a seconda della quantità di memoria utilizzata dal tuo computer ospite.

1.5. Ripristina macchine virtuali

Per ripristinare lo stato precedentemente salvato di una VM, basta specificare il nome del file come di seguito:

$ virsh restore centos8-save 
Domain restored from centos8-save

Verifica se la VM viene ripristinata utilizzando il comando "list":

$ virsh list
 Id   Name           State
------------------------------
 4    centos8-uefi   running

1.6. Riavvia le macchine virtuali

Per riavviare una macchina virtuale in esecuzione, esegui:

$ virsh reboot centos8-uefi
Domain centos8-uefi is being rebooted

1.7. Sospendi/Pausa macchine virtuali

Per sospendere una macchina virtuale in esecuzione, procedere come segue:

$ virsh suspend centos8-uefi 
Domain centos8-uefi suspended

Verificalo con il comando "list":

$ virsh list
 Id   Name           State
-----------------------------
 1    centos8-uefi   paused

1.8. Riprendi le macchine virtuali

Per riprendere la VM sospesa, esegui:

$ virsh resume centos8-uefi 
Domain centos8-uefi resumed

1.9. Arresta le macchine virtuali attive

Per arrestare forzatamente una macchina virtuale attiva e lasciarla nello stato inattivo, esegui:

$ virsh destroy centos8-uefi
Domain centos8-uefi destroyed

Puoi anche arrestare con grazia la VM invece di forzarla come di seguito:

$ virsh destroy centos8-uefi --graceful
Domain centos8-uefi destroyed

1.10. Spegnimento di macchine virtuali

Per spegnere una macchina virtuale in esecuzione, procedere come segue:

$ virsh shutdown centos8-uefi
Domain centos8-uefi is being shutdown

1.11. Recupera il dump XML delle macchine virtuali

Per visualizzare il file di configurazione XML di una macchina virtuale nell'output standard, eseguire:

$ virsh dumpxml centos8-uefi

Questo comando visualizzerà i dettagli di configurazione completi (software e hardware) della macchina virtuale:

Puoi anche esportare il dump XML in un file invece di visualizzarlo semplicemente nell'output standard come di seguito:

$ virsh dumpxml centos8-uefi > centos8.xml

Questo comando scaricherà il file XML "centos8-uefi" in un file chiamato "centos8.xml" e lo salverà nella directory di lavoro corrente.

1.12. Crea macchine virtuali con dump XML

È possibile creare una nuova macchina guest virtuale utilizzando l'XML esistente dai guest precedentemente creati. Innanzitutto, crea un dump XML come mostrato sopra, quindi crea una nuova VM utilizzando il file XML come di seguito:

$ virsh create centos8.xml 
Domain centos8-uefi created from centos8.xml

Questo comando creerà una nuova VM e la avvierà immediatamente. Puoi verificarlo usando il comando:

1.13. Modifica il file di configurazione XML delle macchine virtuali

Se desideri apportare modifiche a una macchina guest, puoi semplicemente modificare il suo file di configurazione e apportare le modifiche come desideri. Gli ospiti possono essere modificati mentre sono in esecuzione o offline.

$ virsh edit centos8-uefi

Questo comando aprirà il file nel tuo editor predefinito che hai impostato con la variabile $EDITOR.

1.14. Abilita l'accesso alla console per le macchine virtuali

Dopo aver creato macchine guest KVM, puoi accedervi tramite SSH, client VNC, Virt-viewer, Virt-manager e console web Cockpit ecc. Tuttavia, non puoi accedervi usando il comando "virsh console". Il comando console viene utilizzato per connettere la console seriale virtuale per il guest. Per accedere ai guest KVM utilizzando il comando "virsh console", è necessario abilitare l'accesso alla console seriale nella macchina guest. Fare riferimento alla seguente guida per abilitare l'accesso alla console virsh:

  • Come abilitare l'accesso alla console Virsh per gli ospiti KVM

1.15. Rinomina macchine virtuali

Se hai mai desiderato rinominare una macchina virtuale, fai riferimento alla seguente guida.

  • Come rinominare la macchina virtuale guest KVM

1.16. Visualizza l'ID dominio delle macchine virtuali

Per trovare l'ID dominio di una macchina virtuale guest in esecuzione, esegui:

$ virsh domid centos8-uefi
2

Tieni presente che l'ospite dovrebbe essere in esecuzione per ottenere il suo ID dominio.

1.17. Visualizza il nome di dominio delle macchine virtuali

Per ottenere il nome di dominio di una VM in esecuzione, eseguire:

$ virsh domname <domain-id or domain-uuid>

Esempio:

$ virsh domname 2
centos8-uefi

Qui, 2 è l'ID dominio.

1.18. Visualizza l'UUID delle macchine virtuali

Per trovare l'UUID della macchina guest, esegui:

$ virsh domuuid <domain-name or domain-id>

Esempio:

$ virsh domuuid centos8-uefi

Oppure,

$  virsh domuuid 2

Risultato di esempio:

de4100c4-632e-4c09-8dcf-bbde29170268

1.19. Visualizza i dettagli delle macchine virtuali

Per visualizzare le informazioni di una macchina ospite, usa il nome di dominio, l'id di dominio o l'uuid di dominio come di seguito:

$ virsh dominfo centos8-uefi

Oppure,

$ virsh dominfo 2

Oppure,

$ virsh dominfo de4100c4-632e-4c09-8dcf-bbde29170268

Risultato di esempio:

Id:             -
Name:           centos8-uefi
UUID:           de4100c4-632e-4c09-8dcf-bbde29170268
OS Type:        hvm
State:          shut off
CPU(s):         2
Max memory:     2097152 KiB
Used memory:    2097152 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: apparmor
Security DOI:   0

1.20. Visualizza le informazioni sull'host KVM

Per ottenere le informazioni sul tuo sistema host, esegui:

$ virsh nodeinfo

Risultato di esempio:

CPU model:           x86_64
CPU(s):              4
CPU frequency:       1167 MHz
CPU socket(s):       1
Core(s) per socket:  2
Thread(s) per core:  2
NUMA cell(s):        1
Memory size:         8058840 KiB

1.21. Visualizza le informazioni sulla CPU virtuale

Per visualizzare le informazioni sulla CPU virtuale, esegui:

$ virsh vcpuinfo <domain-id or domain-name or domain-uuid>

Esempio:

$ virsh vcpuinfo centos8-uefi
VCPU: 0
CPU: 3
State: running
CPU time: 5.6s
CPU Affinity: yyyy

VCPU: 1
CPU: 1
State: running
CPU time: 0.0s
CPU Affinity: yyyy

1.22. Trova l'indirizzo IP delle macchine virtuali

Trovare l'indirizzo IP di una macchina virtuale non è un grosso problema. Se hai l'accesso da console alla macchina virtuale, puoi facilmente trovare il suo indirizzo IP usando il comando "ip". Tuttavia, è anche possibile identificare l'indirizzo IP di una macchina virtuale KVM senza dover accedere alla sua console. La seguente guida spiega come trovare l'indirizzo IP di una macchina virtuale KVM.

  • Come trovare l'indirizzo IP di una macchina virtuale KVM

1.23. Elimina macchine virtuali

Se non vuoi più una VM, eliminala semplicemente come di seguito:

$ virsh destroy centos8-uefi
$ virsh undefine centos8-uefi

Il primo comando arresterà forzatamente la VM se è già in esecuzione. E il secondo comando annullerà la definizione e lo cancellerà completamente.

È inoltre possibile utilizzare le seguenti opzioni per eliminare anche i volumi di archiviazione e gli snapshot.

--managed-save remove domain managed state file
--storage remove associated storage volumes (comma separated list of targets or source paths) (see domblklist)
--remove-all-storage remove all associated storage volumes (use with caution)
--delete-storage-volume-snapshots delete snapshots associated with volume(s)
--wipe-storage wipe data on the removed volumes
--snapshots-metadata remove all domain snapshot metadata (vm must be inactive)

2. Gestisci le reti virtuali

Spero che tu abbia imparato a gestire le macchine virtuali KVM con il comando Virsh in Linux. Questa sezione elenca i comandi importanti per gestire le reti virtuali KVM in Linux utilizzando l'utilità della riga di comando virsh.

2.1. Elenca le reti virtuali

Per elencare le reti virtuali disponibili, esegui:

$ virsh net-list 
 Name      State    Autostart   Persistent
--------------------------------------------
 default   active   yes         yes

Come puoi vedere, ho solo una rete virtuale che è quella predefinita.

2.2. Visualizza i dettagli della rete virtuale

Per visualizzare i dettagli di una rete virtuale, eseguire:

$ virsh net-dumpxml default

Sostituisci "predefinito" con il nome della tua rete nel comando precedente.

Risultato di esempio:

<network connections='1'>
  <name>default</name>
  <uuid>ce25d978-e455-47a6-b545-51d01bcb9e6f</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:ee:35:49'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

2.3. Avvia reti virtuali

Per avviare una rete inattiva, esegui:

$ virsh net-start <Name-Of-Inactive-Network>

Per avviare automaticamente una rete:

$ virsh net-autostart <network-name>

2.4. Crea dump XML di reti virtuali

Per creare il file di configurazione XML di una rete virtuale esistente, eseguire:

$ virsh net-dumpxml default > default.xml

Il comando precedente creerà la configurazione XML della rete "predefinita" e la salverà in un file chiamato "default.xml" nella directory corrente.

Puoi visualizzare il file XML usando il comando cat:

$ cat default.xml 
<network connections='1'>
  <name>default</name>
  <uuid>ce25d978-e455-47a6-b545-51d01bcb9e6f</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:ee:35:49'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

2.5. Crea nuove reti virtuali da file XML

Per creare una nuova rete virtuale utilizzando un file XML esistente e avviarlo immediatamente, eseguire:

$ virsh net-create <Name-of-XMLfile>

Se vuoi creare una rete da un file XML ma non vuoi avviarla automaticamente, esegui:

$ virsh net-define <Name-of-XMLfile>

2.6. Disattiva le reti virtuali

Per disattivare una rete attiva, esegui:

$ virsh net-destroy <network-name>

2.7. Elimina le reti virtuali

Per eliminare una rete virtuale, disattivala prima come mostrato sopra e poi esegui:

$ virsh net-undefine <Name-Of-Inactive-Network>

Virsh ha molti comandi e opzioni. Imparare a usare a fondo lo strumento da riga di comando di Virsh è appena sufficiente per configurare un ambiente virtuale completo in Linux. Non hai bisogno di alcuna applicazione GUI.

Per maggiori dettagli, fare riferimento alle pagine man di virsh.

$ man virsh

3. Gestisci graficamente i guest KVM

Ricordare tutti i comandi virsh è quasi impossibile e anche inutile. Se trovi difficile eseguire tutte le attività di gestione KVM dalla riga di comando, puoi provare strumenti di gestione KVM grafici come Virt-manager e Cockpit.

  • Gestisci macchine virtuali KVM utilizzando Cockpit Web Console
  • Come gestire macchine virtuali KVM con Virt-Manager

Conclusione

Se sai come gestire le macchine virtuali KVM con l'interfaccia utente di gestione Virsh in Linux, sei a metà strada per gestire un ambiente di virtualizzazione di livello aziendale. La configurazione di KVM e la gestione delle macchine virtuali KVM utilizzando il comando virsh sono molto importanti per tutti gli amministratori Linux.

Immagine in primo piano di Elias Sch. da Pixabay.


Linux
  1. Come creare un'istantanea della macchina virtuale KVM con il comando Virsh

  2. Gestisci KVM (QEMU) con Kimchi (interfaccia web)

  3. Macchine virtuali settimanali, con build script

  4. Come rinominare la VM KVM con virsh

  5. Come gestire la rete aziendale di macchine Linux?

Come rinominare la macchina virtuale guest KVM

Come esportare e importare macchine virtuali KVM in Linux

Come installare KVM e gestire macchine virtuali in Ubuntu 20.04

Come gestire macchine virtuali in KVM usando Virt-Manager

Gestione di macchine virtuali KVM con Cockpit Web Console in Linux

Come creare e gestire macchine virtuali in KVM