GNU/Linux >> Linux Esercitazione >  >> Cent OS

Installa e configura KVM nel server CentOS 8

Questa guida passo passo spiega cos'è KVM e come installare e configurare KVM nel sistema operativo Linux CentOS 8.

Questa guida è stata ufficialmente testata nell'edizione minima del server CentOS 8. Tuttavia, dovrebbe funzionare anche in RHEL 8 e nei suoi cloni come AlmaLinux 8 e Rocky Linux 8.

Cos'è KVM?

KVM , abbreviazione di K V basato su ernel irtuale M achine, è un modulo del kernel di FreeBSD e Linux che consente al kernel di agire come hypervisor.

A partire dalla versione del kernel 2.6.20, KVM viene unito alla linea principale del kernel Linux.

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

Ora vediamo come installare e configurare KVM in CentOS 8 Linux.

Prerequisiti

Prima di installare KVM, assicurati innanzitutto che il tuo sistema supporti la virtualizzazione hardware. Abbiamo documentato diversi modi 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 hardware, continua i seguenti passaggi.

1. Installa e configura KVM nel server CentOS 8

Ai fini di questa guida, utilizzerò il seguente sistema:

Server di virtualizzazione KVM:

  • OS – Server minimo CentOS 8 (nessuna GUI)
  • Indirizzo IP :192.168.225.53/24

Anche se è stata testata su CentOS 8, questa guida dovrebbe andare bene anche su RHEL 8.

1.1. Installa KVM in CentOS 8

Nota: Tutti i comandi forniti in questo tutorial devono essere eseguiti come root utente. Se hai effettuato l'accesso come utente normale, aggiungi sudo davanti a tutti i comandi dai di seguito.

Installa Kvm e tutte le dipendenze necessarie per configurare un ambiente di virtualizzazione sul tuo server CentOS 8 usando il comando come root utente:

# dnf install qemu-kvm libvirt virt-install

Ecco,

  • emu-kvm - Metapacchetto QEMU per supporto KVM (ovvero QEMU Full virtualization su hardware x86),
  • libvirt - programmi per la libreria libvirt,
  • installazione virtuale - programmi per creare e clonare macchine virtuali.

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

# systemctl enable libvirtd
# systemctl start libvirtd

Puoi anche combinare entrambi i comandi ed eseguirli come una riga come di seguito:

# systemctl enable --now libvirtd

Controlla lo stato del servizio libvirtd con il comando:

# systemctl status libvirtd

Risultato di esempio:

● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enable>
   Active: active (running) since Wed 2020-07-15 14:27:32 IST; 5s ago
     Docs: man:libvirtd(8)
           https://libvirt.org
 Main PID: 1097 (libvirtd)
    Tasks: 17 (limit: 32768)
   Memory: 57.0M
   CGroup: /system.slice/libvirtd.service
           └─1097 /usr/sbin/libvirtd

Jul 15 14:27:28 centos8.ostechnix.lan systemd[1]: Starting Virtualization daemon...
Jul 15 14:27:32 centos8.ostechnix.lan systemd[1]: Started Virtualization daemon.

Il servizio libvertd è attivo e funzionante!

Verifica se i moduli KVM sono caricati:

# lsmod | grep kvm

Risultato di esempio:

kvm_intel             294912  0
kvm                   786432  1 kvm_intel
irqbypass              16384  1 kvm

Grande! I moduli KVM vengono caricati. Creiamo ora un bridge di rete.

1.2. Imposta la rete bridge con KVM in CentOS

Una rete collegata 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 IPv4 disponibile o IPv6 indirizzi, 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 usando ip comando:

# ip a

Risultato di esempio:

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:b7:3a:84 brd ff:ff:ff:ff:ff:ff
    inet 192.168.225.52/24 brd 192.168.225.255 scope global dynamic noprefixroute enp0s3
       valid_lft 42217sec preferred_lft 42217sec
    inet6 2409:4072:918:98cf:ad3b:b969:8ec8:f9c7/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::b404:4d52:8bee:18bf/64 scope link noprefixroute 
       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:2a:be:53 brd ff:ff:ff:ff:ff:ff
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:41:91:4d brd ff:ff:ff:ff:ff:ff
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:5b:a4:cd 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:5b:a4:cd brd ff:ff:ff:ff:ff:ff

Come puoi vedere, la rete predefinita KVM virbr0 utilizza 192.168.122.1/24 Indirizzo IP. Tutte le macchine virtuali utilizzeranno un indirizzo IP nel 192.168.122.0/24 L'intervallo IP e il sistema operativo host saranno raggiungibili a 192.168.122.1 .

Dovresti essere in grado di accedere al sistema operativo host (in 192.168.122.1 ) dall'interno del SO guest e usa scp per copiare i file avanti e indietro.

Va bene se accedi alle VM all'interno solo dall'host stesso. Tuttavia non è possibile accedere alle VM da altri sistemi remoti nella rete.

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

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

Prima di configurare una rete pubblica con bridge, dobbiamo 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 :

# 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 :

# 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"

Questo imposterà i flag necessari per disabilitare netfilter sui bridge nel punto appropriato all'avvio del sistema. Salva e chiudi il file. Riavvia il sistema per rendere effettive queste modifiche.

Successivamente, dovremmo disabilitare la rete predefinita che KVM ha installato per se stessa.

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

# ip link

Risultato di esempio:

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:b7:3a:84 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:2a:be:53 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:41:91:4d 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:5b:a4:cd 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:5b:a4:cd brd ff:ff:ff:ff:ff:ff

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

Risultato di esempio:

Network default destroyed

Annulla la definizione della rete predefinita con il comando:

# virsh net-undefine default

Risultato di esempio:

Network default has been undefined

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

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

Ora esegui ip link di nuovo per verificare se il virbr0 e virbr0-nic le interfacce vengono effettivamente eliminate:

# ip link

Risultato di esempio:

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:b7:3a:84 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:2a:be:53 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:41:91:4d brd ff:ff:ff:ff:ff:ff

Bene, le reti predefinite di KVM sono sparite.

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

Crea una nuova interfaccia con bridge denominata br0 usando nmcli comando:

# nmcli connection add type bridge autoconnect yes con-name br0 ifname br0

Imposta l'indirizzo IP per l'interfaccia bridge:

# nmcli connection modify br0 ipv4.addresses 192.168.225.53/24 ipv4.method manual

Imposta Gateway per l'interfaccia bridge:

# nmcli connection modify br0 ipv4.gateway 192.168.225.1

Imposta DNS per l'interfaccia bridge:

# nmcli connection modify br0 ipv4.dns 192.168.225.1

Quindi dobbiamo rimuovere una delle tue schede di interfaccia di rete e aggiungerla come slave al bridge.

Tieni presente che se il tuo server ha solo una NIC e stai accedendo al server tramite SSH, la tua connessione verrà interrotta dopo aver rimosso la NIC. Ti suggerisco di eseguire i seguenti passaggi nella console del tuo server.

Ad esempio, aggiungerò enp0s8 interfaccia come slave dell'interfaccia bridge br0 .

Per rimuovere l'interfaccia di rete enp0s8 , esegui:

# nmcli connection del enp0s8

Sostituisci enp0s8 con la tua scheda di rete.

Nota: Non utilizzare schede di interfaccia di rete wireless per i bridge. La maggior parte degli interlacciati wireless non supporta il bridging. Usa sempre le interfacce di rete cablate per una connettività senza interruzioni!

Quindi, aggiungi enp0s8 al ponte usando il comando:

# nmcli connection add type bridge-slave autoconnect yes con-name enp0s8 ifname enp0s8 master br0

Qui, l'interfaccia di rete del bridge br0 è collegato all'interfaccia di rete dell'host enp0s8 . Sostituisci i nomi delle interfacce di rete sopra che corrispondono alla tua rete.

Riavvia il gestore di rete per rendere effettive le modifiche:

# systemctl restart NetworkManager

Se possibile, è meglio riavviare il sistema:

# reboot

Accedi al tuo server e controlla se l'indirizzo IP è stato assegnato all'interfaccia bridge:

$ ip a

Risultato di esempio:

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> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 08:00:27:b7:3a:84 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether 08:00:27:2a:be:53 brd ff:ff:ff:ff:ff:ff
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:41:91:4d brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 08:00:27:2a:be:53 brd ff:ff:ff:ff:ff:ff
    inet 192.168.225.53/24 brd 192.168.225.255 scope global noprefixroute br0
       valid_lft forever preferred_lft forever
    inet6 2409:4072:6084:198:df03:d9ed:62eb:df34/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::e8c8:e98b:7fef:5874/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Come puoi vedere nell'output sopra, l'interfaccia di rete con bridge br0 viene assegnato l'indirizzo IP 192.168.225.53 e il enp0s8 la voce ora ha master br0 iscrizione. Significa che enp0s8 appartiene al ponte.

Puoi anche utilizzare bridge comando per mostrare lo stato del bridge:

# bridge link show br0
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 100

Abbiamo creato con successo un'interfaccia bridge ed è attiva. Dobbiamo fare un'ultima cosa.

Dovremmo configurare KVM per utilizzare questa interfaccia bridge come interfaccia predefinita. Per farlo, crea un XML file 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 impostarlo come bridge predefinito per le VM:

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

Verifica se il bridge è attivo e avviato utilizzando il comando:

# virsh net-list --all

Risultato di esempio:

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

Congratulazioni! Abbiamo installato e configurato correttamente KVM nel server senza testa CentOS 8.

2. Crea e gestisci macchine guest KVM

Possiamo creare e gestire VM sia dalla riga di comando che utilizzando qualsiasi strumento di gestione KVM come Cockpit e Virt-manager. Fare riferimento alle seguenti guide per maggiori dettagli.

  • Come gestire le macchine virtuali KVM con il programma Virsh
  • Gestisci macchine virtuali KVM utilizzando Cockpit Web Console
  • Come gestire macchine virtuali KVM con Virt-Manager

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

Dopo aver creato i guest KVM, posso accedervi tramite SSH, client VNC, Virt-viewer, Virt-manager e console web Cockpit ecc. Ma non ho potuto accedervi usando virsh console comando. Per accedere ai guest KVM utilizzando la "console virsh", fare riferimento alla seguente guida:

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

Altre guide relative a KVM su questo blog

  • Installa e configura KVM in Ubuntu 20.04 Headless Server
  • Installa e configura KVM in OpenSUSE Tumbleweed
  • 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 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 macchine virtuali con Virt-rescue
  • Come estendere la dimensione del disco della macchina virtuale KVM in Linux
  • Imposta una cartella condivisa tra host KVM e guest
  • Come modificare la posizione dello storage pool predefinito di 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 su come installare e configurare KVM nell'edizione server CentOS 8.

Abbiamo anche esaminato come creare e gestire macchine virtuali KVM dalla riga di comando utilizzando virsh strumento e utilizzando strumenti GUI denominati 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 CentOS 8.


Cent OS
  1. Installa e configura HAProxy su RHEL 8 / CentOS 8 Linux

  2. Come installare e configurare VNC su CentOS 7

  3. Installa e configura il server FTP su CentOS 7 / RHEL 7 – (vsftpfd)

  4. Come installare e configurare Gitlab su CentOS 8

  5. Come installare e configurare Postgres 13 su Centos 8

Come installare e configurare Zimbra Multi Server su CentOS 7

Come installare e configurare il server VNC in CentOS 7 / RHEL 7

Installa il server PXE e configura il client PXE su CentOS 7

Installa e configura Check_MK Server su CentOS 7

Come installare e configurare Memcached su CentOS 8

Come installare e configurare il server DHCP su Centos 8