Ricerca nel sito web

Installa e configura KVM in Ubuntu 20.04 LTS


Questa guida passo passo spiega cos'è KVM, come installare e configurare KVM nel server Ubuntu 20.04 e come creare e gestire macchine guest KVM con il programma Virsh.

Cos'è il KVM?

KVM, abbreviazione di Virtual Machine basato su Kernel, è un modulo del kernel FreeBSD e Linux che consente il kernel per agire come un hypervisor. A partire dalla versione 2.6.20 del kernel, KVM è integrato nella linea principale del kernel Linux.

Utilizzando KVM, puoi facilmente configurare un ambiente di virtualizzazione in una macchina Linux e ospitare un'ampia gamma di sistemi operativi guest tra cui Linux, Windows, BSD, Mac OS e molti altri.

In questa guida vedremo come installare e configurare KVM nel server headless Ubuntu 20.04. E vedremo anche come creare e gestire macchine guest KVM utilizzando l'utilità della riga di comando Virsh.

Prerequisiti

Prima di installare KVM, assicurati innanzitutto che il processore del tuo sistema supporti la virtualizzazione dell'hardware. Abbiamo documentato alcuni modi diversi per identificare se un sistema Linux supporta la virtualizzazione nella seguente guida.

  • Come scoprire se una CPU supporta la tecnologia di virtualizzazione (VT)

Se il tuo sistema supporta la virtualizzazione dell'hardware, continua i passaggi seguenti.

1. Installa e configura KVM in Ubuntu 20.04 LTS

Ai fini di questa guida, utilizzerò i seguenti sistemi.

Server di virtualizzazione KVM:

  • Sistema operativo: server minimale Ubuntu 20.04 LTS (nessuna GUI)
  • Indirizzo IP: 192.168.225.52/24

Cliente remoto:

  • Sistema operativo: desktop GNOME Ubuntu 20.04

Innanzitutto, installiamo KVM nel server Ubuntu.

1.1. Installa KVM in Ubuntu 20.04 LTS

Installa Kvm e tutte le dipendenze richieste per configurare un ambiente di virtualizzazione sul tuo server Ubuntu 20.04 LTS utilizzando il comando:

sudo apt install qemu qemu-kvm libvirt-clients libvirt-daemon-system virtinst bridge-utils

Qui,

  • qemu - Un emulatore e virtualizzatore di macchine generiche,
  • qemu-kvm - Metapacchetto QEMU per il supporto KVM (ovvero virtualizzazione completa QEMU su hardware x86),
  • libvirt-client - programmi per la libreria libvirt,
  • libvirt-daemon-system - File di configurazione del demone Libvirt,
  • virtinst - programmi per creare e clonare macchine virtuali,
  • bridge-utils: utilità per la configurazione del bridge Ethernet Linux.

Una volta installato KVM, avvia il servizio libvertd (se non è già avviato):

sudo systemctl enable libvirtd
sudo systemctl start libvirtd

Controlla lo stato del servizio libvirtd con il comando:

systemctl status libvirtd

Esempio di output:

● libvirtd.service - Virtualization daemon
     Loaded: loaded (/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2020-07-04 08:13:41 UTC; 7min ago
TriggeredBy: ● libvirtd-ro.socket
             ● libvirtd-admin.socket
             ● libvirtd.socket
       Docs: man:libvirtd(8)
             https://libvirt.org
   Main PID: 4492 (libvirtd)
      Tasks: 19 (limit: 32768)
     Memory: 12.9M
     CGroup: /system.slice/libvirtd.service
             ├─4492 /usr/sbin/libvirtd
             ├─4641 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --l>
             └─4642 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --l>

Jul 04 08:13:42 ubuntuserver dnsmasq[4641]: compile time options: IPv6 GNU-getopt DBus i18n>
Jul 04 08:13:42 ubuntuserver dnsmasq-dhcp[4641]: DHCP, IP range 192.168.122.2 -- 192.168.12>
Jul 04 08:13:42 ubuntuserver dnsmasq-dhcp[4641]: DHCP, sockets bound exclusively to interfa>
Jul 04 08:13:42 ubuntuserver dnsmasq[4641]: reading /etc/resolv.conf
Jul 04 08:13:42 ubuntuserver dnsmasq[4641]: using nameserver 127.0.0.53#53
Jul 04 08:13:42 ubuntuserver dnsmasq[4641]: read /etc/hosts - 7 addresses
Jul 04 08:13:42 ubuntuserver dnsmasq[4641]: read /var/lib/libvirt/dnsmasq/default.addnhosts>
Jul 04 08:13:42 ubuntuserver dnsmasq-dhcp[4641]: read /var/lib/libvirt/dnsmasq/default.host>
Jul 04 08:13:42 ubuntuserver dnsmasq[4641]: reading /etc/resolv.conf
Jul 04 08:13:42 ubuntuserver dnsmasq[4641]: using nameserver 127.0.0.53#53

Bene, il servizio libvertd è stato abilitato e avviato! Facciamo ora il resto della configurazione.

1.2. Configura la rete Bridge con KVM in Ubuntu

Una rete a ponte condivide l'interfaccia di rete reale del computer host con altre VM per connettersi alla rete esterna. Pertanto ogni VM può collegarsi direttamente a qualsiasi indirizzo IPv4 o IPv6 disponibile, proprio come un computer fisico.

Per impostazione predefinita KVM configura un bridge virtuale privato, in modo che tutte le VM possano comunicare tra loro, all'interno del computer host. Fornisce la propria sottorete e DHCP per configurare la rete dell'ospite e utilizza NAT per accedere alla rete host.

Dai un'occhiata all'indirizzo IP delle interfacce virtuali predefinite di KVM utilizzando il comando "ip":

ip a

Esempio di output:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:8a:52:94 brd ff:ff:ff:ff:ff:ff
    inet 192.168.225.52/24 brd 192.168.225.255 scope global dynamic enp0s3
       valid_lft 39559sec preferred_lft 39559sec
    inet6 2409:4072:6c0f:431d:a00:27ff:fe8a:5294/64 scope global mngtmpaddr noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe8a:5294/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:10:7c:c1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.225.60/24 brd 192.168.225.255 scope global dynamic enp0s8
       valid_lft 39559sec preferred_lft 39559sec
    inet6 2409:4072:6c0f:431d:a00:27ff:fe10:7cc1/64 scope global mngtmpaddr noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe10:7cc1/64 scope link 
       valid_lft forever preferred_lft forever
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:5d:61:28 brd ff:ff:ff:ff:ff:ff
    inet 192.168.225.51/24 brd 192.168.225.255 scope global dynamic enp0s9
       valid_lft 39559sec preferred_lft 39559sec
    inet6 2409:4072:6c0f:431d:a00:27ff:fe5d:6128/64 scope global mngtmpaddr noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe5d:6128/64 scope link 
       valid_lft forever preferred_lft forever
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:f1:98:9e brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:f1:98:9e brd ff:ff:ff:ff:ff:ff

Indirizzo IP dell'interfaccia virtuale predefinita KVM

Come puoi vedere, la rete predefinita KVM virbr0 utilizza l'indirizzo IP 192.168.122.1/24. Tutte le VM utilizzeranno un indirizzo IP nell'intervallo IP 192.168.122.0/24 e il sistema operativo host sarà raggiungibile a 192.168.122.1. Dovresti essere in grado di accedere tramite ssh al sistema operativo host (su 192.168.122.1) dall'interno del sistema operativo guest e utilizzare scp per copiare i file avanti e indietro.

Va bene se accedi alle VM interne solo dall'host stesso. Tuttavia non possiamo accedere alle VM da altri sistemi remoti nella rete.

Perché nel mio caso utilizzano un intervallo IP diverso, ad esempio 192.168.225.0/24. Per accedere alle VM da altri host remoti, dobbiamo configurare un bridge pubblico che viene eseguito sulla rete host e utilizza qualsiasi server DHCP esterno presente sulla rete host.

Per dirla in parole povere, faremo in modo che tutte le VM utilizzino la stessa serie IP utilizzata dal sistema host.

Prima di configurare una rete pubblica a ponte, dovremmo disabilitare Netfilter per motivi di prestazioni e sicurezza. Netfilter è attualmente abilitato sui bridge per impostazione predefinita.

Per disabilitare netfilter, crea un file chiamato /etc/sysctl.d/bridge.conf:

sudo vi /etc/sysctl.d/bridge.conf

Aggiungi le seguenti righe:

net.bridge.bridge-nf-call-ip6tables=0
net.bridge.bridge-nf-call-iptables=0
net.bridge.bridge-nf-call-arptables=0

Salva e chiudi il file.

Quindi crea un altro file chiamato /etc/udev/rules.d/99-bridge.rules:

sudo vi /etc/udev/rules.d/99-bridge.rules

Aggiungi la seguente riga:

ACTION=="add", SUBSYSTEM=="module", KERNEL=="br_netfilter", RUN+="/sbin/sysctl -p /etc/sysctl.d/bridge.conf"

Ciò imposterà i flag necessari per disabilitare netfilter sui bridge nella posizione appropriata all'avvio del sistema. Salva e chiudi il file. Riavvia il sistema per rendere effettive queste modifiche.

Successivamente, dovremmo disabilitare la rete predefinita installata da KVM.

Trova il nome delle interfacce di rete predefinite di KVM utilizzando il comando "ip link":

ip link

Esempio di output:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:8a:52:94 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:10:7c:c1 brd ff:ff:ff:ff:ff:ff
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:5d:61:28 brd ff:ff:ff:ff:ff:ff
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:1f:a2:e7 brd ff:ff:ff:ff:ff:ff
6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:1f:a2:e7 brd ff:ff:ff:ff:ff:ff

Visualizza le interfacce di rete predefinite KVM

Come puoi vedere nell'output sopra, le voci "virbr0" e "virbr0-nic" sono le reti KVM.

Rimuoviamo la rete KVM predefinita con il comando:

virsh net-destroy default

Esempio di output:

Network default destroyed

Annulla la definizione della rete predefinita con il comando:

virsh net-undefine default

Esempio di output:

Network default has been undefined

rimuovere le interfacce di rete KVM predefinite

Se i comandi precedenti non funzionano per qualsiasi motivo, puoi utilizzare questi comandi per disabilitare e annullare la definizione della rete KVM predefinita:

sudo ip link delete virbr0 type bridge
sudo ip link delete virbr0-nic

Ora esegui nuovamente "ip link" per verificare se le interfacce virbr0 e virbr0-nic sono effettivamente cancellate:

$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:8a:52:94 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:10:7c:c1 brd ff:ff:ff:ff:ff:ff
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:5d:61:28 brd ff:ff:ff:ff:ff:ff

Vedere? Le reti predefinite KVM sono scomparse.

Ora impostiamo il bridge pubblico KVM da utilizzare durante la creazione di una nuova VM.

Nota:

Non utilizzare schede di interfaccia di rete wireless per i bridge. La maggior parte degli interlacciamenti wireless non supportano il bridging. Utilizza sempre le interfacce di rete cablate per una connettività senza interruzioni!

Per creare un bridge di rete nell'host, modifica il file /etc/netplan/00-installer-config.yaml e aggiungi i dettagli del bridge.

Ecco il contenuto predefinito del file 00-installer-config.yaml nel mio server Ubuntu 20.04 LTS.

$ cat /etc/netplan/00-installer-config.yaml
This is the network config written by 'subiquity'
network:
  ethernets:
    enp0s3:
      dhcp4: true
    enp0s8:
      dhcp4: true
    enp0s9:
      dhcp4: true
  version: 2

Come vedi, ho tre interfacce di rete cablata, ovvero enp0s3, enp0s8 ed enp0s9 nel mio server Ubuntu.

Prima di modificare questo file, esegui il backup del file /etc/netplan/00-installer-config.yaml esistente:

sudo cp /etc/netplan/00-installer-config.yaml{,.backup}

Quindi modifica il file di configurazione predefinito utilizzando il tuo editor preferito:

sudo vi /etc/netplan/00-installer-config.yaml

Aggiungi/modificalo come di seguito:

This is the network config written by 'subiquity'
network:
  ethernets:
    enp0s3:
      dhcp4: false
      dhcp6: false
    enp0s8:
      dhcp4: false
      dhcp6: false
    enp0s9:
      dhcp4: false
      dhcp6: false
  bridges:
    br0:
      interfaces: [ enp0s3 ]
      addresses: [192.168.225.52/24]
      gateway4: 192.168.225.1
      mtu: 1500
      nameservers:
        addresses: [8.8.8.8,8.8.4.4]
      parameters:
        stp: true
        forward-delay: 4
      dhcp4: no
      dhcp6: no
  version: 2

creare un bridge di rete in Ubuntu

Qui, l'interfaccia di rete bridge "br0" è collegata all'interfaccia di rete dell'host "enp0s3". L'indirizzo IP di br0 è 192.168.225.52. Il gateway è 192.168.225.1. Utilizzo i server DNS di Google (8.8.8.8 e 8.8.4.4) per connettermi a Internet. Assicurati che il rientro dello spazio sia esattamente lo stesso di sopra. Se i rientri della linea non sono corretti, l'interfaccia di rete a ponte non si attiverà. Sostituisci i valori precedenti che corrispondono alla tua rete.

Dopo aver modificato il file di configurazione della rete, salvalo e chiudilo. Applicare le modifiche eseguendo il comando seguente:

sudo netplan --debug  apply

Ora controlla se l'indirizzo IP è stato assegnato all'interfaccia bridge:

ip a

Esempio di output:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether 08:00:27:8a:52:94 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:10:7c:c1 brd ff:ff:ff:ff:ff:ff
    inet6 2409:4072:48b:ab02:a00:27ff:fe10:7cc1/64 scope global mngtmpaddr noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe10:7cc1/64 scope link 
       valid_lft forever preferred_lft forever
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:5d:61:28 brd ff:ff:ff:ff:ff:ff
    inet6 2409:4072:48b:ab02:a00:27ff:fe5d:6128/64 scope global mngtmpaddr noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe5d:6128/64 scope link 
       valid_lft forever preferred_lft forever
7: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 08:00:27:8a:52:94 brd ff:ff:ff:ff:ff:ff
    inet 192.168.225.52/24 brd 192.168.225.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe8a:5294/64 scope link 
       valid_lft forever preferred_lft foreve

controllare l'indirizzo IP della rete bridge KVM

Come puoi vedere nell'output sopra, all'interfaccia di rete con bridge br0 è assegnato l'indirizzo IP 192.168.225.52 e la voce enp0s3 ora ha la voce "master br0". Significa che enp0s3 appartiene al bridge.

Puoi anche utilizzare il comando "brctl" per mostrare lo stato del bridge:

brctl show br0

Esempio di output:

bridge name    bridge id       STP enabled interfaces
br0     8000.0800278a5294   yes     enp0s3

Ora dovremmo configurare KVM per utilizzare questo bridge. Per fare ciò, crea un file XML chiamato host-bridge.xml:

vi host-bridge.xml

Aggiungi le seguenti righe:

<network>
  <name>host-bridge</name>
  <forward mode="bridge"/>
  <bridge name="br0"/>
</network>

Esegui i seguenti comandi per avviare il bridge appena creato e renderlo come bridge predefinito per le VM:

virsh net-define host-bridge.xml
virsh net-start host-bridge
virsh net-autostart host-bridge

avviare il bridge host KVM

Per verificare se il bridge è attivo e avviato, eseguire:

virsh net-list --all

Esempio di output:

Name          State    Autostart   Persistent
------------------------------------------------
 host-bridge   active   yes         yes

verificare lo stato del bridge host KVM

Congratulazioni! Abbiamo configurato con successo il bridge KVM ed è ora attivo.

Lettura correlata:

  • Installa e configura KVM nel server CentOS 8
  • Installa e configura KVM in OpenSUSE Tumbleweed

2. Crea e gestisci macchine virtuali KVM utilizzando Virsh

Utilizziamo l'utilità della riga di comando "virsh" per gestire le macchine virtuali. Il programma virsh viene utilizzato per creare, elencare, mettere in pausa, riavviare, arrestare ed eliminare le VM dalla riga di comando.

Per impostazione predefinita, i file della macchina virtuale e altri file correlati sono archiviati nella posizione /var/lib/libvirt/ . Il percorso predefinito per archiviare le immagini ISO è /var/lib/libvirt/boot/. Ovviamente possiamo modificare queste posizioni durante l'installazione di una nuova VM.

2.1. Elenca tutte le macchine virtuali

Innanzitutto, controlliamo se esistono macchine virtuali.

Per visualizzare l'elenco di tutte le macchine virtuali disponibili, eseguire:

sudo virsh list --all

Esempio di output:

Elenca le macchine virtuali che utilizzano virsh

Come puoi vedere, non esistono macchine virtuali.

2.2. Crea macchine virtuali KVM

Creiamo una macchina virtuale Ubuntu 18.04 con 2 GB di RAM, 1 core CPU, 10 GB Hdd. Per farlo, esegui:

sudo virt-install --name Ubuntu-18.04 --ram=2048 --vcpus=1 --cpu host --hvm --disk path=/var/lib/libvirt/images/ubuntu-18.04-vm1,size=10 --cdrom /home/ostechnix/ubuntu18.iso --network bridge=br0 --graphics vnc

Analizziamo il comando precedente e vediamo cosa fa ciascuna opzione.

  • --name Ubuntu-18.04: il nome della macchina virtuale
  • --ram=2048: assegna 2 GB di RAM alla VM.
  • --vcpus=1 : indica il numero di core della CPU nella VM.
  • --cpu host : ottimizza le proprietà della CPU per la VM esponendo la configurazione della CPU dell'host al guest.
  • --hvm : richiede la virtualizzazione completa dell'hardware.
  • --disk path=/var/lib/libvirt/images/ubuntu-18.04-vm1,size=10: la posizione in cui salvare l'hdd della VM e le sue dimensioni. In questo caso, ho assegnato una dimensione dell'HDD di 10 GB.
  • --cdrom /home/ostechnix/ubuntu18.iso: la posizione in cui si trova l'effettiva immagine ISO del programma di installazione di Ubuntu.
  • --network bridge=br0: indica alla VM di utilizzare la rete bridge. Se non hai configurato la rete bridge, ignora questo parametro.
  • --graphics vnc : consente l'accesso VNC alla VM da un client remoto.

L'output di esempio del comando precedente sarebbe:

WARNING Graphics requested but DISPLAY is not set. Not running virt-viewer.
WARNING No console to launch for the guest, defaulting to --wait -1

Starting install...
Allocating 'ubuntu-18.04-vm1'                                                                                                                      |  10 GB  00:00:06     
Domain installation still in progress.
Waiting for installation to complete.

Questo messaggio continuerà a essere visualizzato finché non ti connetterai alla VM da un sistema remoto tramite qualsiasi applicazione VNC e completerai l'installazione del sistema operativo.

Poiché il nostro sistema host KVM (server Ubuntu) non dispone di GUI, non possiamo continuare l'installazione del sistema operativo guest. Quindi, utilizzerò una macchina di riserva dotata di GUI per completare l'installazione del sistema operativo guest con l'aiuto di un client VNC.

Abbiamo finito con il server Ubuntu qui. I passaggi seguenti devono essere eseguiti su un sistema client.

2.3. Accedi alle macchine virtuali da sistemi remoti tramite client VNC

Vai ai sistemi remoti che dispongono di un ambiente desktop grafico e installa qualsiasi applicazione client VNC se non è già installata. Ho un desktop Ubuntu con il client desktop remoto Remmina installato.

SSH nel sistema host KVM:

ssh ostechnix@192.168.225.52

Qui,

  • ostechnix è il nome dell'utente nell'host KVM (server Ubuntu 20.04)
  • 192.168.225.52 è l'indirizzo IP dell'host KVM.

Trova la porta VNC utilizzata dalla VM in esecuzione utilizzando il comando:

sudo virsh dumpxml Ubuntu-18.04 | grep vnc

Sostituisci "Ubuntu-18.04" con il nome della tua VM.

Esempio di output:

<graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'>

Il numero della porta VNC è 5900.

Digita il seguente comando di port forwarding SSH dal tuo terminale:

ssh ostechnix@192.168.225.52 -L 5900:127.0.0.1:5900

Avvia l'applicazione client VNC e scegli il protocollo "VNC", quindi digita "localhost:5900" nella barra degli indirizzi e infine premi INVIO:

Connettiti alle macchine virtuali remote utilizzando il client desktop remoto Remmina

L'applicazione VNC ora ti mostrerà la finestra di installazione del sistema operativo indovinato.

Accedi alle macchine virtuali da sistemi remoti tramite client VNC

Continua semplicemente l'installazione del sistema operativo guest. Una volta completata l'installazione, chiudere la finestra dell'applicazione VNC.

2.4. Elenca le VM in esecuzione

Esegui il comando "virt list" per visualizzare l'elenco delle VM in esecuzione:

sudo virsh list

Esempio di output:

 Id   Name           State
------------------------------
 2    Ubuntu-18.04   running

Come puoi vedere, la VM Ubuntu 18.04 è attualmente in esecuzione e il suo ID è 2.

2.5. Avvia le VM

Per avviare una VM, esegui:

sudo virsh start Ubuntu-18.04

Puoi anche utilizzare l'ID della VM per avviarla:

sudo virsh start 2

2.6. Riavviare le VM

Per riavviare una VM in esecuzione, eseguire:

sudo virsh reboot Ubuntu-18.04

O,

sudo reboot 2

2.7. Metti in pausa le VM

Per mettere in pausa una VM in esecuzione, eseguire:

sudo suspend Ubuntu-18.04

O,

sudo suspend 2

2.8. Riprendi le VM

Per ripristinare una VM sospesa, eseguire:

sudo virsh resume Ubuntu-18.04

O,

sudo resume 2

2.9. Arresto delle VM

Per spegnere una VM in esecuzione, eseguire:

sudo virsh shutdown Ubuntu-18.04

O,

sudo shutdown 2

2.10. Elimina VM

Per rimuovere completamente una VM, eseguire:

sudo virsh undefine Ubuntu-18.04
sudo virsh destroy Ubuntu-18.04

Virsh ha molti comandi e opzioni. Per impararli tutti, fai riferimento alla sezione di aiuto di virsh:

virsh --help

3. Gestisci graficamente gli ospiti KVM

Ricordare tutti i comandi virsh è quasi impossibile. Se sei un amministratore Linux in erba, potresti trovare difficile eseguire tutte le operazioni di gestione di KVM dalla riga di comando. Nessun problema! Sono disponibili alcuni strumenti basati sul Web per gestire graficamente le macchine guest KVM. Le seguenti guide spiegano in dettaglio come gestire gli ospiti Kvm utilizzando Cockpit e Virt-manager.

  • Gestisci macchine virtuali KVM utilizzando la console Web Cockpit
  • Come gestire le macchine virtuali KVM con Virt-Manager

4. Abilita l'accesso alla console Virsh per le macchine virtuali

Dopo aver creato gli ospiti KVM, posso essere in grado di accedervi tramite SSH, client VNC, Virt-viewer, Virt-manager e console web Cockpit ecc. Ma non sono riuscito ad accedervi utilizzando il comando "virsh console". Per accedere agli ospiti KVM utilizzando "virsh console", fare riferimento alla seguente guida:

  • Come abilitare l'accesso alla console Virsh per gli ospiti KVM
Altre guide relative a KVM
  • Crea una macchina virtuale KVM utilizzando l'immagine Qcow2 in Linux
  • Come migrare le VM Virtualbox in VM KVM in Linux
  • Abilita il supporto UEFI per le macchine virtuali KVM in Linux
  • Come abilitare la virtualizzazione annidata in KVM in Linux
  • Visualizza le statistiche dei sistemi di virtualizzazione con Virt-top in Linux
  • Come trovare l'indirizzo IP di una macchina virtuale KVM
  • Come rinominare la macchina virtuale guest KVM
  • Accedi e modifica le immagini del disco della macchina virtuale con Libguestfs
  • Crea rapidamente immagini di macchine virtuali con Virt-builder
  • Come salvare le macchine virtuali con Virt-rescue
  • Come estendere la dimensione del disco della macchina virtuale KVM in Linux
  • Configura una cartella condivisa tra host KVM e ospite
  • Come modificare la posizione predefinita del pool di archiviazione KVM Libvirt
  • [Risolto] Impossibile accedere al file di archiviazione, autorizzazione negata Errore in KVM Libvirt
  • Come esportare e importare macchine virtuali KVM in Linux

Conclusione

In questa guida, abbiamo discusso come installare e configurare KVM nell'edizione server Ubuntu 20.04 LTS.

Abbiamo anche esaminato come creare e gestire macchine virtuali KVM dalla riga di comando utilizzando lo strumento virsh e gli strumenti GUI Cockpit e Virt-manager.

Infine, abbiamo visto come abilitare l'accesso alla console virsh per le macchine virtuali KVM. A questo punto, dovresti avere un ambiente di virtualizzazione completamente funzionante nel tuo server Ubuntu 20.04.

Risorsa:

  • Sito web KVM

Articoli correlati