Crmgo Blog

KVM auf CentOS

KVM auf CentOS

Wir installieren KVM. Nun kommen wir zur Installation der Virtualisierung KVM, des QEMU-Emulators und der zugehörigen Tools. Wir installieren die erforderlichen Pakete: # yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install # systemctl enable libvirtd && systemctl start libvirtd Die Images der virtuellen Maschinen speichern wir in…

KVM auf CentOS

KVM installieren

Nun kommen wir zur Installation der Virtualisierung KVM, des Emulators QEMU und der zugehörigen Werkzeuge.

Wir installieren die erforderlichen Pakete:

# yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install # systemctl enable libvirtd && systemctl start libvirtd

Die Images der virtuellen Maschinen werden in einem neuen Verzeichnis /vms gespeichert.

# mkdir /vms

Wir fügen dem Verzeichnis den entsprechenden Kontext hinzu, damit SELinux keine Beschwerden hat:

# semanage fcontext --add -t virt_image_t '/vms(/.*)?'

Überprüfung:

# semanage fcontext -l | grep virt_image_t
/var/lib/imagefactory/images(/.*)?                 all files          system_u:object_r:virt_image_t:s0
/var/lib/libvirt/images(/.*)?                      all files          system_u:object_r:virt_image_t:s0
/vms(/.*)?                                         all files          system_u:object_r:virt_image_t:s0

Änderungen anwenden:

# restorecon -R -v /vms

und prüfen, ob sie wirksam wurden:

# ls -aZ /vms drwxr-xr-x. root root unconfined_u:object_r:virt_image_t:s0 . dr-xr-xr-x. root root system_u:object_r:root_t:s0 ..

Okay, wir laden das ISO-Image des Betriebssystems, das auf der virtuellen Maschine installiert werden soll, aus dem Internet herunter, zum Beispiel CentOS 7 minimal für den zukünftigen Webserver? Oder Tails? Wer weiß :)

Erste virtuelle Maschine erstellen

Nach den oben genannten Schritten wurde auf dem Host für virtuelle Maschinen das Netzwerkinterface virbr0 mit der IP 192.168.122.1 erstellt:

# ip addr

Ebenfalls wurde das virtuelle Netzwerk „default“ erstellt:

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

Das Netzwerk kann bearbeitet werden:

# virsh net-edit default

<network>
  <name>default</name>
  <uuid>745f121b-3c89-1281-a19a-aa62808c4241</uuid>
  <forward mode="nat">
  <bridge delay="0" name="virbr0" stp="on">
  <mac address="16:18:00:21:8c:15">
  <ip address="192.168.122.1" netmask="255.255.255.0">
    <dhcp>
      <range end="192.168.122.254" start="192.168.122.2">
    </range></dhcp>
  </ip>
</mac></bridge></forward></network>

Ändern wir vorerst nichts und erstellen eine virtuelle Maschine, die mit dem Netzwerk „default“ verbunden ist:

# virt-install 
--network network=default
--name vm1 
--ram=2048 
--vcpus=1 
--disk path=/vms/vm1.img,size=30,format=qcow2 
--graphics vnc,password=vm1password 
--cdrom /vms-iso/CentOS-7-x86_64-Minimal-1503-01.iso 
--boot cdrom,hd,menu=on 

Beschreibung der Optionen:

--graphics vnc,password=vm1password
Hier geben wir das Passwort und die Möglichkeit an, sich über VNC mit der Konsole der virtuellen Maschine zu verbinden. Das Passwort kann in den Logs sichtbar werden, daher geben Sie hier keine sensiblen Daten ein.

--network network=default – verbindet unsere virtuelle Maschine mit dem virtuellen Netzwerk mit dem Namen default (damit sind wir bereits vertraut).
Alternativ kann --network bridge:br0 verwendet werden, zum Beispiel, wenn wir ein Bridge-Interface mit dem Namen br0 für Variante 2 erstellt hätten.

Der oben angegebene Befehl kann auch in einer einzigen Zeile eingegeben werden, je nach Vorliege:

virt-install --network network=default --name vm1 --ram=2048 --vcpus=1 --disk path=/vms/vm1.img,size=30,format=qcow2 --graphics vnc,password=vm1password --cdrom /vms-iso/CentOS-7-x86_64-Minimal-1503-01.iso --boot cdrom,hd,menu=on

Nach der Ausführung des Befehls können Sie folgende Meldung sehen:

WARNING Unable to connect to graphical console: virt-viewer not installed. Please install the 'virt-viewer' package. WARNING No console to launch for the guest, defaulting to --wait -1

Das ist kein Problem, da unser Host für virtuelle Maschinen ohnehin keinen Window-Manager hat. Zumindest ist das bei mir so.

Starting install...
Allocating 'vm1.img'
                        |  30 GB  00:00:00
Creating domain...
                        |  0 B  00:00:00
Domain installation still in progress. Waiting for installation to complete.

Wir warten geduldig. Der Prozess wird einige Zeit in Anspruch nehmen.

Nach Abschluss des Befehls schauen wir uns die Liste der virtuellen Maschinen an:

# virsh list
 Id    Name                           State
----------------------------------------------------
 2     vm1                            running

Virtuelle Maschinen können gestartet (virsh start vm1), angehalten (virsh suspend vm1), fortgesetzt (virsh resume vm1), heruntergefahren (virsh shutdown vm1) und auf vielfältige Weise verwaltet werden. Die Maschine vm1 ist also gestartet (überprüfen Sie dies mit dem Befehl virsh domstate vm1). Wie verbinden wir uns damit?

Verbindung zur virtuellen Maschine über VNC herstellen

Auf der vorherigen Stufe haben Sie eine virtuelle Maschine erstellt, ihr ein CD-ROM-Laufwerk mit dem Betriebssystem zugewiesen und fragen sich nun: Was kommt als Nächstes? Wie planen Sie die Installation und Konfiguration des Betriebssystems? Ja, es gibt verschiedene Möglichkeiten. Man kann die Infrastruktur vorbereiten und fertige Images bereitstellen usw. Aber wir lernen gerade und haben nichts anderes als die kürzlich aus dem Internet heruntergeladene ISO-Image-Datei. Tatsächlich ist alles nicht schwierig. Wir haben im vorherigen Schritt den Parameter "--graphics vnc,password=vm1password" angegeben. Dies bedeutet, dass wir uns über VNC mit dem Terminal (sprich: dem Bildschirm) der virtuellen Maschine verbinden können, beispielsweise mit der Software TightVNC, indem wir die IP-Adresse des Hosts der virtuellen Maschinen und den Port für die Verbindung angeben.

Unsere virtuellen Maschine wurde ein VNC-Port zugewiesen. Durch die Verbindung mit diesem Port sehen wir den „Bildschirm“ der virtuellen Maschine. Welche Portnummer einer bestimmten VM (vm1) zugewiesen ist, können Sie mit dem folgenden Befehl herausfinden:

# virsh vncdisplay vm1 127.0.0.1:0

Das bedeutet, dass der VNC-Port 5900+0=5900 ist. Wäre das Ergebnis „127.0.0.1:1“, wäre der VNC-Port 5901. Und so weiter.

Die Verbindung zum Port 5900 muss zum Host der virtuellen Maschinen hergestellt werden. Dort ist dieser Port geöffnet, nicht auf der virtuellen Maschine vm1.

Standardmäßig sollte der Hypervisor-Host (bei uns CentOS 7 minimal) keine Verbindungen zu beliebigen Ports außer SSH (22/tcp) zulassen. Ich rate Ihnen davon ab, den Zugriff auf VNC-Ports von außen zu öffnen. Das ist nicht sicher. Um vom Windows-Arbeitsrechner, auf dem ich alles einrichte, auf den Bildschirm der virtuellen Maschine zuzugreifen, habe ich in PuTTY einen Port-Forwarding-Tunnel eingerichtet: 5900 -> 127.0.0.1:5900.

Port-Weiterleitung in PuTTY für VNC 5900

Nach einer erfolgreichen SSH-Anmeldung können Sie TightVNC starten und den Port 127.0.0.1::5900 angeben (achten Sie auf das doppelte Doppelpunkt).

Falls nach einem Neustart der Maschine das ISO-Image erneut eingebunden werden muss, kann dies mit dem folgenden Befehl erfolgen:

# virsh attach-disk vm1 /vms-iso/CentOS-7-x86_64-Minimal-1503-01.iso hdb --type cdrom --mode readonly

Wobei hdb der Name des Blockgeräts CD-ROM ist. Diesen Namen können Sie durch Ansehen der Konfiguration der virtuellen Maschine ermitteln (virsh edit vm1).

Die Verwaltung der virtuellen Maschinen vom Host aus erfolgt über die Konsolensammlung von virsh. Mit einigen Befehlen sind Sie bereits vertraut. Geben Sie in der Konsole ein:

# virsh help

und Sie sehen, wie viele Möglichkeiten es gibt.

Starten/Stoppen virtueller Maschinen

Wenn Sie eine virtuelle Maschine erstellen und versuchen, sie herunterzufahren, wird die Maschine möglicherweise nicht heruntergefahren, obwohl die Ausführung bestätigt wird:

# virsh domstate vm1
running

# virsh shutdown vm1
Domain vm1 is being shutdown

# virsh domstate vm1
running

Das Problem liegt in der Unterstützung von ACPI durch die virtuelle Maschine. Nicht in allen Fällen verarbeitet die virtuelle Maschine das Signal zum Herunterfahren oder Neustarten (virsh shutdown/restart vm1). In dieser Situation gibt es folgende Möglichkeiten:

Stromkabel abziehen:

# virsh destroy vm1
Domain vm1 destroyed

Sie verstehen sicherlich, worauf dies hinauslaufen kann. Obwohl es in der Anfangsphase, solange das Betriebssystem noch nicht installiert ist, zu Fehlern kommen kann,

Anhalten der virtuellen Maschine:

virsh suspend vm1

Es ist nicht immer notwendig, die Maschine von außen herunterzufahren oder neu zu starten. Für Wartungszwecke kann oft ein einfaches Anhalten ausreichen. Nicht immer, aber möglich.

ACPI-Unterstützung in der virtuellen Maschine aktivieren.

Es gibt verschiedene Vorgehensweisen, zum Beispiel so (auszuführen innerhalb der virtuellen Maschine, nicht auf dem Host):

yum install acpid chkconfig acpid on service acpid start

Autostart virtueller Maschinen

Um sicherzustellen, dass die virtuelle Maschine vm1 nach einem Neustart des Hosts automatisch gestartet wird:

# virsh autostart vm1 Domain vm1 marked as autostarted

Den Autostart für vm1 deaktivieren:

# virsh autostart vm1 --disable Domain vm1 unmarked as autostarted

Überwachung der Netzwerkaktivität einer KVM-Virtual Machine

Es kann hilfreich sein, die Netzwerkaktivität einer virtuellen Maschine zu bewerten – zum Beispiel, wie viel Traffic sie verbraucht hat. Dies kann auch bei der Netzwerk-Fehlersuche oder der Suche nach Traffic-Lecks nützlich sein. Zum Beispiel:

# virsh domifstat vm1 vnet0
vnet0 rx_bytes 3063962
vnet0 rx_packets 3412
vnet0 rx_errs 0
vnet0 rx_drop 0
vnet0 tx_bytes 591996
vnet0 tx_packets 1731
vnet0 tx_errs 0
vnet0 tx_drop 0

Hier ist alles verständlich, außer woher man den Namen des Adapters vnet0 erhält. Man kann im Dump der Konfiguration der virtuellen Maschine (virsh dumpxml vm1) den Abschnitt network finden und darin den Parameter dev:

<interface type='network'>
    <mac address='52:54:00:98:6c:e6'/>
    <source network='default' bridge='virbr0'/>
    <target dev='vnet0'/>
    <model type='rtl8139'/>
    <alias name='net0'/>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

An- und Abtrennen des CD-ROM-Laufwerks

Ein ISO-Abbild als CD-ROM an vm3 anschließen:

# virsh attach-disk vm3 /data/vms-iso/CentOS-7-x86_64-Minimal-1511.iso hda --type cdrom --mode readonly Disk attached successfully

Hier ist Vorsicht geboten, da nach dem Pfad zur ISO-Datei auf dem Host der Name des CD-ROM-Geräts der virtuellen Maschine vm3 angegeben wird. Wenn Sie nicht sicher sind, welchen Gerätenamen Sie angeben müssen (hda, hdb oder andere), überprüfen Sie die Konfiguration der virtuellen Maschine:

# virsh edit vm3

Das ISO-Abbild abtrennen (das Gerät nicht aus dem Gast entfernen, sondern einfach „CD aus dem Laufwerk auswerfen“):

# virsh attach-disk vm5 "" hda --type cdrom --mode readonly

Hinweis: Dieser Beitrag kann KI-unterstützt erstellt und anschließend redaktionell geprüft worden sein. Verantwortlich: Dmytro Lomaka, Kaltenkirchen.

Kategorien: KVM