KVM mit OpenPOWER
Hinweis: Bitte beachten Sie, dass dieser Artikel / diese Kategorie sich entweder auf ältere Software/Hardware Komponenten bezieht oder aus sonstigen Gründen nicht mehr gewartet wird. Diese Seite wird nicht mehr aktualisiert und ist rein zu Referenzzwecken noch hier im Archiv abrufbar. |
---|
Bei Linux-basierten Betriebssystemen, und auch generell, gibt es eine Vielzahl an unterschiedlichsten Virtualisierungslösungen. KVM, also die Kernel-based Virtual Machine, gilt als performante Lösung und ist seit Kernel-Version 2.6.20 im Kernel integriert. Dieser Artikel zeigt die Installation und Konfiguration der KVM-Funktion anhand eines OpenPOWER POWER8-Systems.
Installation
Der nachfolgende Abschnitt zeigt die Installation der erforderlichen Virtualisierungskomponenten auf einem OpenPOWER POWER8-System und zum Vergleich auf einem ein X86-System. Zum bequemen übertragen in die Kommandozeile sind nun die erforderlichen Pakete zur KVM-Virtualisierung für POWER8- sowie X86-Systeme aufgeführt.[1]
POWER8-System
Nachfolgender apt-get Aufruf installiert die für ein POWER8-System erforderlichen Komponenten. Da libvirt-bin auch mit installiert wird, steht auch das Kommandozeilentool Virsh anschließend zur Verfügung.
$ sudo apt-get install qemu-user qemu-utils cloud-image-utils qemu-system-ppc qemu-slof libvirt-bin numactl
X86-System
Bei einem klassischen X86-basierten System wird statt des Pakets qemu-system-ppc das qemu-system-x86 installiert.
$ sudo apt-get install qemu-user qemu-utils cloud-image-utils qemu-system-x86 qemu-slof libvirt-bin numactl
Virtinst Installation
Um mit virsh eine VM erstellen zu können, sind Kenntnisse der Definiton einer libvirt-XML-Datei erforderlich. Zur bequemen Erstellung einer ersten virtuellen Maschine, ohne Kenntnisse der spezifischen Syntax, ist die Installation von virt-install empfohlen.[2]
$ sudo apt-get install virtinst
Konfiguration
Nach der Installation der erforderlichen Komponenten sind nun noch folgenden Konfigurationsschritte zu erledigen. Die Schritte sind abhängig von der verwendeten Architektur.
Hinzufügen des Users zur Gruppe kvm
Der entsprechende User wird nun zur Gruppe KVM hinzugefügt, dies gilt für POWER8- ebenso wie für X86-Systeme.
$ sudo usermod -a -G kvm <user>
Überprüfen der Gruppenzugehörigkeiten
Die Ausgabe des Befehls id, in Verbindung mit dem entsprechenden User, sollte nun nachfolgende zwei Gruppenzugehörigkeiten anzeigen:
$ id <user> [...]116(kvm),117(libvirtd)
Simultaneous Multi Threading unter POWER8
Damit die KVM Virtualisierung unter POWER8 verwendet werden kann, muss Simultaneous Multi-Threading (SMT) am Host deaktiviert werden.[3]
Standardmäßig ist SMT nach einem Neustart aktiv, wie dies auch die Ausgabe von ppc64_cpu --smt zeigt:
$ ppc64_cpu --smt SMT=8
Die Ausgabe von ppc64_cpu --info zeigt die Anzahl der vorhandenen CPU-Kerne an und welche Threads der Kerne aktiv sind. Aktive Threads sind mit einem Stern (*) gekennzeichnet. Bei aktivierten SMT zeigt das Kommando am Testsystem folgende Ausgabe:
$ ppc64_cpu --info Core 0: 0* 1* 2* 3* 4* 5* 6* 7* Core 1: 8* 9* 10* 11* 12* 13* 14* 15* Core 2: 16* 17* 18* 19* 20* 21* 22* 23* Core 3: 24* 25* 26* 27* 28* 29* 30* 31* Core 4: 32* 33* 34* 35* 36* 37* 38* 39* Core 5: 40* 41* 42* 43* 44* 45* 46* 47* Core 6: 48* 49* 50* 51* 52* 53* 54* 55* Core 7: 56* 57* 58* 59* 60* 61* 62* 63*
Mittels des Parameters --smt=off wird die SMT-Funktion bis zum nächsten Neustart deaktiviert.
$ sudo ppc64_cpu --smt=off
Ein erneuter Aufruf von ppc64_cpu --smt resultiert die Ausgabe dass SMT nun deaktiviert ist.
$ ppc64_cpu --smt SMT is off
wenn anschließend das SMT deaktiviert wird, sind nur noch Threads der IDs 0,8,16,24,32,40,48 und 56 aktiv.[4]
$ ppc64_cpu --info Core 0: 0* 1 2 3 4 5 6 7 Core 1: 8* 9 10 11 12 13 14 15 Core 2: 16* 17 18 19 20 21 22 23 Core 3: 24* 25 26 27 28 29 30 31 Core 4: 32* 33 34 35 36 37 38 39 Core 5: 40* 41 42 43 44 45 46 47 Core 6: 48* 49 50 51 52 53 54 55 Core 7: 56* 57 58 59 60 61 62 63
SMT dauerhaft deaktivieren
Exakten Pfad der Binary anzeigen lassen:
$ which ppc64_cpu /usr/sbin/ppc64_cpu
Öffnen Sie mit vi und sudo-Rechten die Datei rc.local:
$ sudo vi /etc/rc.local
Tragen sie oberhalb der Zeile exit 0 folgenden Eintrag ein, speichern und verlassen Sie mit :x den vi:
/usr/sbin/ppc64_cpu --smt=off
Durch diesen Eintrag wird nun beim Startvorgang SMT dauerhaft deaktiviert, wenn Sie SMT wieder standardmäßig aktivieren wollen, löschen Sie einfach die Zeile wieder aus der rc.local.
Das KVM Modul im Kernel aktivieren
Das KVM Modul ist standardmäßig im Kernel nicht aktiviert, folgende Zeile aktiviert es temporär:
$ sudo modprobe kvm_hv
kvm_hv dauerhaft aktivieren
Permanent kann dies per Eintrag in /etc/modules geschehen: Öffnen Sie mit vi und sudo-Rechten die Datei modules:
$ sudo vi /etc/modules
Tragen sie kvm_hv in die Datei ein, speichern und verlassen Sie mit :x den vi:
kvm_hv
Durch diesen Eintrag wird beim Startvorgang das Kernelmodul kvm_hv automatisch geladen.
Netzwerkkonfiguration
Standardmäßig besteht eine NAT-Bridge mit der Bezeichnung vibr0, um KVM-Gästen den Netzwerkzugriff zu erlauben. Um jedoch Serverdienste mit den KVM-Gästen abbilden zu können, ist eine Netzwerkbrücke wie br0 erforderlich. Wie dies gelingt, zeigt folgender Abschnitt anhand des POWER8-Systems.[5]
Installation der bridge-utils
Greppen Sie bei der Ausgabe von dpkg -l nach den bridge-utils, um zu überprüfen ob diese installiert sind.
$ dpkg -l |grep bridge-utils ii bridge-utils 1.5-9ubuntu1 ppc64el Utilities for configuring the Linux Ethernet bridge
Falls die bridge-utils nicht installiert sind, können diese per apt-get nachinstalliert werden:
$ sudo apt-get install bridge-utils
br0-Netzwerkbrücke erstellen
Eine br0-Netzwerkbrücke für Ihre KVM-Gäste können Sie wie folgt zur Verfügung stellen:
$ sudo brctl addbr br0 # br0 wird hinzugefügt $ sudo ip addr show # Ausgabe aller IP-Adressen zur Überprüfung der Konfiguration $ sudo brctl addif br0 enP1p3s0f0 # Nun wird die br0-Bridge mit der entsprechenden Netzwerkverbindung verbunden, dies kann auch oft eth0 sein.
Interfaces-Datei anpassen
Ergänzen Sie nun die Konfiguration in der interfaces-Datei:
$ sudo vi /etc/network/interfaces
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo br0 # br0 wird automatisch aktiviert iface lo inet loopback iface enP1p3s0f0 inet manual # Das primäre Interface wird auf manual gesetzt, da zukünftig die br0-Bridge aktiv ist. iface br0 inet static address <IP-Adresse> netmask <Subnetz-Maske> gateway <Gateway-IP-Adresse> dns-search <URL> dns-nameservers <DNS-IP-Adresse> bridge_ports enP1p3s0f0
Troubleshooting Shutdown Kernel Oops
Mit den Kerneln der 4.4.* Reihe kommt es zu einem Kernel Panic beim Versuch das Power8-System herunterzufahren. Dieses Problem ist bekannt und tritt plattformunabhängig bei der Verwendung von Netzwerkkarten die den bnx2x Treiber nutzen auf.[6]
- Beim Herunterfahren tritt folgender Fehler in der SOL-Verbindung auf:
Oops: Kernel access of bad area, sig: 11 [#1]
- Das Problem kann mit Verwendung eines 4.8.* Kernels behoben werden. Bis zur Verfügbarkeit einer neuen Kernel Version über den Hardware Enablement Stack können Sie einen 4.8er Kernel über das kernel-ppa herunterladen.[7]
tk@ubuntu:~/Downloads/kernel-4.8$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.8/linux-headers-4.8.0-040800_4.8.0-040800.201610022031_all.deb
tk@ubuntu:~/Downloads/kernel-4.8$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.8/linux-headers-4.8.0-040800-generic_4.8.0-040800.201610022031_ppc64el.deb
tk@ubuntu:~/Downloads/kernel-4.8$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.8/linux-image-4.8.0-040800-generic_4.8.0-040800.201610022031_ppc64el.deb
- Auflisten der Kernel-Files:
tk@ubuntu:~/Downloads/kernel-4.8$ ls
linux-headers-4.8.0-040800_4.8.0-040800.201610022031_all.deb
linux-headers-4.8.0-040800-generic_4.8.0-040800.201610022031_ppc64el.deb
linux-image-4.8.0-040800-generic_4.8.0-040800.201610022031_ppc64el.deb
- Kernel installieren:
tk@ubuntu:~/Downloads/kernel-4.8$ dpkg -i *.deb
- Neu installierten Kernel anzeigen
tk@ubuntu:~/Downloads/kernel-4.8$ dpkg -L linux-image-extra-4.4.0-38-generic
- Wenn der neue Kernel wegen Speicherplatzmangel nicht installiert werden kann, hilft es alte Kernel zu entfernen:
tk@ubuntu:~/Downloads/kernel-4.8$ dpkg -l |grep linux-image
tk@ubuntu:~/Downloads/kernel-4.8$ sudo apt-get purge linux-image-4.4.0-31-generic
- Starten Sie anschließend Ihr System mit dem neuen Kernel neu.
Virtuelle Maschinen erstellen
Nach der Konfiguration des Host-Systems können nun virtuelle Maschinen erstellt werden. Es gibt die Möglichkeit einer grafischen Installation und Konfiguration über den Virtual Machine Manager auf einem Linux-Desktop, oder eine Kommandozeilen-Installation per virt-install bzw. virsh. Beide Möglichkeiten werden nun im folgenden Abschnitt aufgezeigt.
Definition der VM per virt-install
Nachfolgendes Beispiel zeigt die Erstellung einer Ubuntu VM anhand des virt-install CLI-Tools, es dient dazu neue KVM-, Xen- oder auch LXC-basierte virtuelle Maschinen zu erstellen. Die VM wird sofort gestartet und kann dann mittels VNC oder auch über den Virtual Machine Manager grafisch installiert werden.
Nachfolgende Tabelle zeigt einen Auszug der möglichen Optionen bei der Erstellung einer VM via virt-install:[8]
Parameter | Erklärung |
---|---|
--connect <Hypervisor> | Verbindung zum angegebenen Hypervisor aufnehmen |
-n | Bezeichnung der VM |
-r | RAM-Größe in Megabyte |
--vcpus | Anzahl der virt. CPUs |
--disk path=<Pfad-zur-VM> | Speicherort und Img-Bezeichnung der VM |
size | Größe des VM-Images in Gigabyte |
-c <Pfad> | Ablageort des Installationsmediums |
--graphics vnc, deprecated: --vnc | Standardmäßig gesetzt |
--noautoconsole | Keine automatische Konsolenverbindung zum KVM-Gast |
--os-type <Typ> | Angabe des Betriebssystemtyps |
--accelerate | Ein KVM Gast wird installiert |
--virt-type qemu | Ein reiner QEMU Gast wird emuliert |
-w <Bezeichnung> bzw. --network=<Bezeichnung> | Angabe der Netzwerkverbindung der VM |
-v bzw. --hvm | Vollständige Virtualisierung |
-w <Network> bzw --network=<Network> | Angabe der Netzwerkverbindung |
Ubuntu 16.04.1 KVM Gast erstellen
$ sudo virt-install --connect qemu:///system -n ubuntu-kvm-vi -r 1024 --vcpus=2 \ --disk path=/var/lib/libvirt/images/ubuntu-kvm-vi.img,size=20 -c /home/tk/Downloads/ubuntu-16.04.1-server-ppc64el.iso \ --graphics vnc --noautoconsole --os-type linux --accelerate --network=bridge:br0 --hvm Starting install... Allocating 'ubuntu-kvm-vi.img' | 20 GB 00:00 Creating domain... | 0 B 00:00 Domain installation still in progress. You can reconnect to the console to complete the installation process.
Virsh Ausgabe
Mit virsh kann durch den Parameter list --all die Ausgabe aller konfigurierten VMs, mit zugehörigem Status, erzeugt werden.
$ virsh -c qemu:///system list --all Id Name State ---------------------------------------------------- 3 ubuntu-kvm-vi running - ubuntu-kvm-test-vmm shut off
Installation mit Virtual Machine Manager fortsetzen
Die über die Kommandozeile mit virt-install erstellte VM kann nun bequem mit dem virt-manager grafisch installiert und konfiguriert werden. Verbinden Sie sich mit dem virt-manager zum KVM-Host, markieren Sie die neu erstellte VM (ubuntu-kvm-vi) und klicken Sie auf Open. Sie werden nach dem Passwort des Users des KVM-Hosts gefragt, nach der Eingabe wird die Verbindung zur VM hergestellt.
Weitere Informationen
- CommonQuestions - Virtualization (wiki.ubuntu.com)
- How to Install Linux Kernel 4.6 in Ubuntu 16.04 (ubuntuhandbook.com)
Einzelnachweise
- ↑ How to use Ubuntu as a hypervisor? (wiki.ubuntu.com)
- ↑ Virsh - Virtuelle Maschine erstellen (wiki.ubuntuusers.de)
- ↑ Simultaneous Multi-Threading (SMT) (www.ibm.com) Power8 systems support Simultaneous Multi-Threading (SMT). You can enable SMT to run in your guests, allowing you to run up to 8 threads from a single core. Note: SMT is not supported on the host and must be disabled.
- ↑ Simultanes Multithreading (SMT) (ibm.com)
- ↑ Simple Virtualization With Ubuntu 16.04 Linux and KVM (linuxconfig.org)
- ↑ Kernel oops + system freeze on network-bridge shutdown (bugs.launchpad.net)
- ↑ Kenel PPA für Kernel 4.8 (kernel.ubuntu.com)
- ↑ virt-install(1) - Linux man page (linux.die.net)
Autor: Thomas Niedermeier Thomas Niedermeier arbeitet im Product Management Team von Thomas-Krenn. Er absolvierte an der Hochschule Deggendorf sein Studium zum Bachelor Wirtschaftsinformatik. Seit 2013 ist Thomas bei Thomas-Krenn beschäftigt und kümmert sich unter anderem um OPNsense Firewalls, das Thomas-Krenn-Wiki und Firmware Sicherheitsupdates. |