Diese Schritt-für-Schritt-Anleitung erklärt, was KVM ist und wie KVM im Betriebssystem CentOS 8 Linux installiert und konfiguriert wird.
Diese Anleitung wurde offiziell in der CentOS 8 Minimal Server Edition getestet. Es sollte jedoch auch in RHEL 8 und seinen Klonen wie AlmaLinux 8 und Rocky Linux 8 funktionieren.
Was ist KVM?
KVM , kurz für K Kern-basierte V irtual M achine ist ein FreeBSD- und Linux-Kernelmodul, das es dem Kernel ermöglicht, als Hypervisor zu fungieren.
Ab Kernel-Version 2.6.20 wird KVM in die Hauptlinie des Linux-Kernels eingebunden.
Mit KVM können Sie ganz einfach eine Virtualisierungsumgebung auf einem Linux-Rechner einrichten und eine breite Palette von Gastbetriebssystemen bereitstellen, darunter Linux, Windows, BSD, Mac OS und viele mehr.
Lassen Sie uns nun sehen, wie KVM in CentOS 8 Linux installiert und konfiguriert wird.
Voraussetzungen
Stellen Sie vor der Installation von KVM zunächst sicher, dass Ihr System die Hardwarevirtualisierung unterstützt. In der folgenden Anleitung haben wir einige verschiedene Möglichkeiten dokumentiert, um festzustellen, ob ein Linux-System Virtualisierung unterstützt.
- So finden Sie heraus, ob eine CPU die Virtualisierungstechnologie (VT) unterstützt
Wenn Ihr System Hardwarevirtualisierung unterstützt, fahren Sie mit den folgenden Schritten fort.
1. KVM in CentOS 8 Server installieren und konfigurieren
Für die Zwecke dieses Leitfadens verwende ich das folgende System:
KVM-Virtualisierungsserver:
- Betriebssystem – CentOS 8-Minimalserver (keine GUI)
- IP-Adresse :192.168.225.53/24
Obwohl es auf CentOS 8 getestet wurde, sollte diese Anleitung auch auf RHEL 8 funktionieren.
1.1. KVM in CentOS 8 installieren
Hinweis: Alle in diesem Tutorial gegebenen Befehle sollten als root
ausgeführt werden Benutzer. Wenn Sie sich als normaler Benutzer angemeldet haben, fügen Sie sudo
hinzu vor allen Befehlen unten angeben.
Installieren Sie Kvm und alle erforderlichen Abhängigkeiten, um eine Virtualisierungsumgebung auf Ihrem CentOS 8-Server einzurichten, indem Sie den Befehl als root
verwenden Benutzer:
# dnf install qemu-kvm libvirt virt-install
Hier,
- emu-kvm - QEMU-Metapaket für KVM-Unterstützung (d. h. vollständige QEMU-Virtualisierung auf x86-Hardware),
- libvirt - Programme für die libvirt-Bibliothek,
- virt-install - Programme zum Erstellen und Klonen virtueller Maschinen.
Sobald KVM installiert ist, aktivieren und starten Sie libvertd
Dienst (falls noch nicht gestartet):
# systemctl aktiviert libvirtd
# systemctl libvirtd starten
Sie können auch beide Befehle kombinieren und wie unten in einem Einzeiler ausführen:
# systemctl enable --now libvirtd
Überprüfen Sie den Status des libvirtd-Dienstes mit dem Befehl:
# systemctl status libvirtd
Beispielausgabe:
● libvirtd.service - Virtualisierungs-Daemon Geladen:geladen (/usr/lib/systemd/system/libvirtd.service; aktiviert; Herstellervoreinstellung:enable> Active:active (running) seit Mi 15.07.2020 14:27:32 IST; vor 5s 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 15. Juli 14:27:28 centos8.ostechnix.lan systemd[1]:Virtualisierungs-Daemon gestartet...15. Juli 14:27:32 centos8.ostechnix.lan systemd[1]:Virtualisierungs-Daemon gestartet.Der libvertd-Dienst ist eingerichtet und läuft!
Überprüfen Sie, ob die KVM-Module geladen sind:
# lsmod | grep kvmBeispielausgabe:
kvm_intel 294912 0kvm 786432 1 kvm_intelirqbypass 16384 1 kvmToll! KVM-Module werden geladen. Lassen Sie uns jetzt eine Netzwerkbrücke erstellen.
1.2. Bridge-Networking mit KVM in CentOS einrichten
Ein überbrücktes Netzwerk teilt die reale Netzwerkschnittstelle des Hostcomputers mit anderen VMs, um eine Verbindung zum externen Netzwerk herzustellen. Daher kann sich jede VM direkt an jede verfügbare
IPv4
binden oderIPv6
Adressen, genau wie ein physischer Computer.Standardmäßig richtet KVM eine private virtuelle Bridge ein, damit alle VMs innerhalb des Host-Computers miteinander kommunizieren können.
Es stellt sein eigenes Subnetz und DHCP bereit, um das Gastnetzwerk zu konfigurieren, und verwendet NAT, um auf das Hostnetzwerk zuzugreifen.
Sehen Sie sich die IP-Adresse der virtuellen KVM-Standardschnittstellen mit
ip
an Befehl:# ip aBeispielausgabe:
1:lo: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 Geltungsbereich Host lo valid_lft für immer Preferred_lft für immer inet6 ::1/128 Geltungsbereich Host valid_lft für immer Preferred_lft für immer2:enp0s3: mtu 1500 qdisc fq_codel state UP Gruppe Standard 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 Geltungsbereich global dynamisch noprefixroute enp0s3 valid_lft 42217sec Preferred_lft 42217sec Inet6 2409:4072:918:98cf :ad3b:b969:8ec8:f9c7/64 Geltungsbereich global noprefixroute gültig_lft für immer bevorzugt_lft für immer inet6 fe80::b404:4d52:8bee:18bf/64 Geltungsbereich Link noprefixroute gültig_lft für immer bevorzugt_lft für immer3:enp0s8: mtu 1500 qdisc fq_codel state UP Gruppenstandard qlen 1000 link/ether 08:00:27:2a:be:53 brd ff:ff:ff:ff:ff:ff4:enp0s9: 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:ff5:virbr0 : 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 Geltungsbereich global virbr0 valid_lft forever Preferred_lft forever6:virbr0-nic: 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 Wie Sie sehen können, ist das KVM-Standardnetzwerk
virbr0
verwendet192.168.122.1/24
IP Adresse. Alle VMs verwenden eine IP-Adresse im192.168.122.0/24
Der IP-Bereich und das Host-Betriebssystem sind unter192.168.122.1
erreichbar .Sie sollten in der Lage sein, per SSH auf das Host-Betriebssystem zuzugreifen (unter
192.168.122.1
) aus dem Gastbetriebssystem und verwenden Siescp
um Dateien hin und her zu kopieren.Es ist in Ordnung, wenn Sie nur vom Host selbst auf die VMs im Inneren zugreifen. Sie können jedoch nicht von anderen Remote-Systemen im Netzwerk auf die VMs zugreifen.
Weil sie einen anderen IP-Bereich verwenden, dh
192.168.225.0/24
in meinem Fall. Um von anderen Remote-Hosts aus auf die VMs zugreifen zu können, müssen wir eine öffentliche Bridge einrichten, die im Host-Netzwerk ausgeführt wird und einen beliebigen externen DHCP-Server im Host-Netzwerk verwendet.Um es für Laien auszudrücken:Wir werden dafür sorgen, dass alle VMs dieselbe IP-Serie verwenden, die vom Hostsystem verwendet wird.
Bevor wir ein öffentliches Bridged-Netzwerk einrichten, sollten wir Netfilter deaktivieren aus Leistungs- und Sicherheitsgründen . Netfilter ist derzeit standardmäßig auf Bridges aktiviert.
Um Netfilter zu deaktivieren, erstellen Sie eine Datei namens
/etc/sysctl.d/bridge.conf
:# vi /etc/sysctl.d/bridge.confFügen Sie die folgenden Zeilen hinzu:
net.bridge.bridge-nf-call-ip6tables=0net.bridge.bridge-nf-call-iptables=0net.bridge.bridge-nf-call-arptables=0Speichern und schließen Sie die Datei.
Erstellen Sie dann eine weitere Datei namens
/etc/udev/rules.d/99-bridge.rules
:# vi /etc/udev/rules.d/99-bridge.rulesFügen Sie die folgende Zeile hinzu:
ACTION=="add", SUBSYSTEM=="module", KERNEL=="br_netfilter", RUN+="/sbin/sysctl -p /etc/sysctl.d/bridge.conf"Dadurch werden die notwendigen Flags gesetzt, um den Netzfilter auf Bridges an der entsprechenden Stelle beim Systemstart zu deaktivieren. Speichern und schließen Sie die Datei. Starten Sie Ihr System neu um diese Änderungen zu übernehmen.
Als nächstes sollten wir das Standardnetzwerk deaktivieren, das KVM für sich selbst installiert hat.
Finden Sie den Namen der KVM-Standardnetzwerkschnittstellen mit dem Befehl „ip link“:
# IP-LinkBeispielausgabe:
1:lo: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 :002:enp0s3: 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 :ff3:enp0s8: 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 :ff4:enp0s9: 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 :ff5:virbr0 : 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:ff6 :virbr0-nic : 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 Wie Sie in der obigen Ausgabe sehen, sind die Einträge
virbr0
undvirbr0-nic
sind die KVM-Netzwerke.Lassen Sie uns das Standard-KVM-Netzwerk mit dem Befehl entfernen:
# virsh net-destroy defaultBeispielausgabe:
Netzwerkstandard zerstörtDefinieren Sie das Standardnetzwerk mit dem Befehl:
# virsh net-undefine defaultBeispielausgabe:
Netzwerkstandard wurde nicht definiertWenn die obigen Befehle aus irgendeinem Grund nicht funktionieren, können Sie diese Befehle verwenden, um das KVM-Standardnetzwerk zu deaktivieren und die Definition aufzuheben:
# ip link delete virbr0 type bridge# IP-Link löschen virbr0-nicFühren Sie nun
ip link
aus erneut, um zu überprüfen, ob dievirbr0
undvirbr0-nic
Interfaces tatsächlich gelöscht:# IP-LinkBeispielausgabe:
1:lo: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 :002:enp0s3: 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 :ff3:enp0s8: 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 :ff4:enp0s9: 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 Nun, die KVM-Standardnetzwerke sind weg.
Lassen Sie uns nun die öffentliche KVM-Bridge einrichten, die beim Erstellen einer neuen VM verwendet werden soll.
Erstellen Sie eine neue Bridged-Schnittstelle mit dem Namen
br0
mitnmcli
Befehl:# nmcli connection add type bridge autoconnect yes con-name br0 ifname br0Stellen Sie die IP-Adresse für die Bridge-Schnittstelle ein:
# nmcli connection modify br0 ipv4.addresses 192.168.225.53/24 ipv4.method manualGateway für die Bridge-Schnittstelle einstellen:
# nmcli-Verbindung ändern br0 ipv4.gateway 192.168.225.1Stellen Sie DNS für die Bridge-Schnittstelle ein:
# nmcli-Verbindung ändern br0 ipv4.dns 192.168.225.1Als nächstes müssen wir eine Ihrer Netzwerkschnittstellenkarten entfernen und als Slave zur Bridge hinzufügen.
Bitte beachten Sie, dass, wenn Ihr Server nur eine Netzwerkkarte hat und Sie über SSH auf den Server zugreifen, Ihre Verbindung nach dem Entfernen der Netzwerkkarte beendet wird. Ich empfehle Ihnen, die folgenden Schritte in der Konsole Ihres Servers auszuführen.
Zum Beispiel werde ich
enp0s8
hinzufügen Interface als Slave zum Bridge-Interfacebr0
.So entfernen Sie die Netzwerkschnittstelle
enp0s8
, ausführen:# nmcli connection del enp0s8Ersetzen Sie
enp0s8
mit eigener Netzwerkkarte.Hinweis: Verwenden Sie keine drahtlosen Netzwerkschnittstellenkarten für Bridges. Die meisten drahtlosen Interlaces unterstützen kein Bridging. Verwenden Sie immer kabelgebundene Netzwerkschnittstellen für nahtlose Konnektivität!
Als nächstes fügen Sie
enp0s8
hinzu zur Brücke mit dem Befehl:# nmcli connection add type bridge-slave autoconnect yes con-name enp0s8 ifname enp0s8 master br0Hier die Bridge-Netzwerkschnittstelle
br0
ist an die Netzwerkschnittstelleenp0s8
des Hosts angehängt . Ersetzen Sie die Namen der obigen Netzwerkschnittstellen, die mit Ihrem Netzwerk übereinstimmen.Starten Sie den Netzwerkmanager neu, um die Änderungen zu übernehmen:
# systemctl NetworkManager neu startenWenn möglich, ist es besser, Ihr System neu zu starten:
# NeustartMelden Sie sich bei Ihrem Server an und überprüfen Sie, ob die IP-Adresse der Bridge-Schnittstelle zugewiesen wurde:
$ ip aBeispielausgabe:
1:lo: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 Geltungsbereich Host lo valid_lft für immer Preferred_lft für immer inet6 ::1/128 Geltungsbereich Host valid_lft für immer Preferred_lft für immer2:enp0s3: mtu 1500 qdisc fq_codel Status DOWN Gruppe Standard qlen 1000 Link/Ether 08:00:27:b7:3a:84 brd ff:ff:ff:ff:ff:ff3:enp0s8 : 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:ff4:enp0s9: mtu 1500 qdisc fq_codel state UP Gruppenstandard qlen 1000 Link/Ether 08:00:27:41:91:4d brd ff:ff:ff:ff:ff:ff5:br0 : 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 Geltungsbereich global noprefixroute br0 valid_lft für immer Preferred_lft für immer inet6 2409:4072:6084:198:df03:d9ed:62eb:df34/64 Geltungsbereich global noprefixroute valid_lft für immer Preferred_lft für immer inet6 fe80::e8c8:e98b:7fef:5874/64 Geltungsbereich Link noprefixroute gültig_lft für immer bevorzugt_lft für immer Wie Sie in der obigen Ausgabe sehen, ist die überbrückte Netzwerkschnittstelle
br0
wird die IP-Adresse192.168.225.53
zugewiesen und dieenp0s8
Eintrag hat jetztmaster br0
Eintrag. Es bedeutet, dassenp0s8
gehört zur Brücke.Sie können auch
bridge
verwenden Befehl zum Anzeigen des Bridge-Status:# Brückenlink zeigt br0 3:enp0s8:mtu 1500 master br0 State Forwarding Priority 32 kostet 100 Wir haben erfolgreich eine Bridge-Schnittstelle erstellt und sie ist aktiv. Wir müssen noch eine letzte Sache erledigen.
Wir sollten KVM so konfigurieren, dass diese Bridge-Schnittstelle als Standardschnittstelle verwendet wird. Erstellen Sie dazu ein
XML
Datei namenshost-bridge.xml
:# vi host-bridge.xmlFügen Sie die folgenden Zeilen hinzu:
host-bridge Führen Sie die folgenden Befehle aus, um die neu erstellte Brücke zu starten und sie als Standardbrücke für VMs festzulegen:
# virsh net-define host-bridge.xml# virsh net-start host-bridge# virsh net-autostart host-bridgeÜberprüfen Sie, ob die Bridge aktiv ist und mit dem Befehl gestartet wurde:
# virsh net-list --allBeispielausgabe:
Name State Autostart Persistent---------------------------------------------------- ----- Host-Bridge aktiv ja jaHerzliche Glückwünsche! Wir haben KVM erfolgreich auf dem Headless-Server CentOS 8 installiert und konfiguriert.
2. KVM-Gastmaschinen erstellen und verwalten
Wir können VMs entweder über die Befehlszeile oder mit beliebigen KVM-Verwaltungstools wie Cockpit und Virt-Manager erstellen und verwalten. Weitere Einzelheiten finden Sie in den folgenden Anleitungen.
- So verwalten Sie virtuelle KVM-Maschinen mit dem Virsh-Programm
- Verwalten Sie virtuelle KVM-Maschinen mit der Cockpit-Webkonsole
- So verwalten Sie virtuelle KVM-Maschinen mit Virt-Manager
3. Virsh-Konsolenzugriff für virtuelle Maschinen aktivieren
Nachdem ich die KVM-Gäste erstellt habe, kann ich über SSH, VNC-Client, Virt-Viewer, Virt-Manager und Cockpit-Webkonsole usw. auf sie zugreifen. Aber ich konnte nicht mit virsh console
darauf zugreifen Befehl. Informationen zum Zugriff auf KVM-Gäste mithilfe der „virsh-Konsole“ finden Sie in der folgenden Anleitung:
- So aktivieren Sie den Zugriff auf die Virsh-Konsole für KVM-Gäste
Weitere Anleitungen zu KVM in diesem Blog
- KVM in Ubuntu 20.04 Headless Server installieren und konfigurieren
- KVM in OpenSUSE Tumbleweed installieren und konfigurieren
- Erstellen Sie eine virtuelle KVM-Maschine mit dem Qcow2-Image unter Linux
- So migrieren Sie Virtualbox-VMs in KVM-VMs unter Linux
- Aktivieren Sie die UEFI-Unterstützung für virtuelle KVM-Maschinen in Linux
- So aktivieren Sie verschachtelte Virtualisierung in KVM unter Linux
- Statistiken von Virtualisierungssystemen mit Virt-top unter Linux anzeigen
- So finden Sie die IP-Adresse einer virtuellen KVM-Maschine
- So benennen Sie eine virtuelle KVM-Gastmaschine um
- Mit Libguestfs auf Disk-Images virtueller Maschinen zugreifen und sie ändern
- Schnelles Erstellen von Images virtueller Maschinen mit Virt-builder
- So retten Sie virtuelle Maschinen mit Virt-Rescue
- Erweitern der Festplattengröße virtueller KVM-Maschinen unter Linux
- Einen freigegebenen Ordner zwischen KVM-Host und Gast einrichten
- So ändern Sie den Standardspeicherort von KVM Libvirt
- [Gelöst] Zugriff auf Speicherdatei nicht möglich, Zugriff verweigert Fehler in KVM Libvirt
- So exportieren und importieren Sie virtuelle KVM-Maschinen unter Linux
Schlussfolgerung
In diesem Handbuch haben wir besprochen, wie KVM in der CentOS 8 Server Edition installiert und konfiguriert wird.
Wir haben uns auch angesehen, wie man virtuelle KVM-Maschinen über die Befehlszeile mit virsh
erstellt und verwaltet Tool und unter Verwendung von GUI-Tools namens Cockpit und Virt-Manager.
Schließlich haben wir gesehen, wie man den virsh-Konsolenzugriff für virtuelle KVM-Maschinen aktiviert.
Zu diesem Zeitpunkt sollten Sie über eine voll funktionsfähige Virtualisierungsumgebung auf Ihrem CentOS 8-Server verfügen.