Virtualisierung mit kvm

Debian LogoDie Kernel-based Virtual Machine (oder kurz KVM) ist eine Softwaremäßige Hardware-Virtualisierungstechnik und wurde im Oktober 2006 veröffentlicht. Als Gastsysteme unterstützt KVM Linux (32 und 64 Bit), Windows (32 Bit), ReactOS, FreeDOS, Solaris und diverse BSD-Derivate sowie einige weitere. Ab dem Kernel 2.6.20 ist KVM Standardmäßig im Linux-Kernel enthalten.

Für mich hat kvm gegenüber seinen Konkurrenten wie XEN folgende Vorteile:

  • Kein spezieller Kernel des Hostsystems wie bei XEN benötigt
  • Alle Gastsysteme haben so ihre „eigenen Kernel“
  • KVM ist im Standard Kernel von Debian enthalten
  • Extrem einfache Administration
  • Es werden sehr viele unterschiedliche Gastsysteme unterstützt

Installation
Zu allererst muss für KVM wie für XEN auch die BIOS Einstellung Virtualization Technology aktiviert sein. Sollte ja eigentlich logisch sein. 😉

Unter Debian und/oder Ubuntu muss nun das Paket kvm installiert werden. Zusätzlich benötigten wir noch das Paket bridge-utils. Das ist nötig um das Network Interface eth0 zu „bridgen“, sprich um eine „Netzwerk-Brücke“ zu den Gastsystemen zu bauen und ihnen so Zugang zum Netz (falls gewünscht) zu ermöglichen. Wer lediglich ein einfaches System ohne Netzwerkanbindung benötigt, kann das Paket einfach weg lassen.

root@server01 ~ $ apt-get install kvm bridge-utils

Alle Abhängigkeiten werden dabei wie immer automatisch mitinstalliert.

Nun ist eine kleine Änderung an der Datei /etc/network/interfaces nötig, um die Bridge zu aktivieren. Aus dem Standard Interface eth0…

# The primary network interface
auto eth0
iface eth0 inet static
  address 192.168.168.100
  netmask 255.255.255.0
  gateway 192.168.168.1
  network 192.168.168.0
  broadcast 192.168.168.255

wird ein bridged Interface br0…

# The primary network interface
auto br0
iface br0 inet static
  bridge_ports eth0
  address 192.168.168.100
  netmask 255.255.255.0
  gateway 192.168.168.1
  network 192.168.168.0
  broadcast 192.168.168.255

Wie man sieht wird hier einfach nur jeweils eth0 durch br0 getauscht und die Zeile „bridge_ports eth0“ hinzugefügt.

Als Gastsystem werde ich hier als Beispiel mal ein Debian Lenny 5.0 installieren. Eine Installation von einem Windows, ReactOS oder sonstigen unterscheidet sich aber nur sehr geringfügig. Dazu brauchen wir zunächst einmal das entsprechende Installationsmedium als ISO:

root@server01 ~ $ wget -O debian.iso http://cdimage.debian.org/debian-cd/5.0.0/i386/iso-cd/debian-500-i386-businesscard.iso

Nun generieren wir uns eine virtuelle Festplatte, hier mit 10 Gigabyte Speicher:

root@server01 ~ $ kvm-img create size 10G vserver.img

Nun kommen wir zum eigentlich starten des virtuellen Systems. Dazu benötigten wir noch einige Informationen:

  • Wie viele virtuelle CPUs soll der Gast bekommen?
  • Wie viel virtuellen RAM bekommt der Gast?
  • Zusätzlich eine eindeutige MAC-Adresse (am besten erdacht)

Soweit so gut, hat man das kann man die Maschine auch schon starten. Ich habe hier mal nur die wichtigsten Parameter angegeben. kvm unterstützt noch einige mehr. Diese schlägt man am besten ebenfalls einmal in den man Pages nach.

kvm \
    -name vserver \ # Der "Name" des Systems (optional)
    -smp 2 \ # Die Anzahl der virtuellen CPUs
    -m 512 \ # Wie viel Speicher bekommt das System (hier 512 MB)
    -hda vserver.img \ # Die Festplatte (hda) des Systems
    -cdrom debian.iso \ # eine CD im virtuellen Laufwerk (optional)
    -boot c \ # Bootsequenz: C steht für die Festplatte, D für die CD
    -net nic,macaddr=00:16:3B:00:00:03 \ # Die MAC-Adresse des vServers
    -net tap \ # Für das bridged Network Interface
    -vnc :0 \ # Der VNC-Server mitstarten (:0 entspricht dem Port 5900)
    -pidfile /var/run/vserver.pid \ # Ein Pidfile in dem die Prozess-ID geschrieben wird
    -daemonize # Parameter für das starten als des Servers als Deamon

Nun ist der Server gestartet und man kann sich per VNC über die IP des Hostsystems (hier 192.168.168.100) und des entsprechenden VNC-Ports (hier 5900) anmelden. Per VNC installiert man die Maschine nun einmalig, klatscht noch direkt einen SSH-Server nach und voila, fertig! 😉

KVM over VNC

Zusammenfassend
kvm wirkt recht stabil und läuft flüssig. Allerdings setze ich es noch nicht weiter in produktiven Projekten ein. Momentan setze ich es dazu ein, binnen von Minuten ein „sauberes“ Testsystem bereit zu stellen. Dafür eignet sich kvm wohl besser als Beispielsweiße XEN.

Ein Problem ist mir bei meinen Tests leider aufgefallen: ich konnte mich, sobald ich kvm zusätzlich ein Passwort für den VNC-Server übergeben habe, nicht mehr per VNC auf dem Server einloggen. Möglicherweiße lag das aber an meinem Client (vncviewer). Also habe ich den VNC-Server per iptables nur für meine IP-Adresse/mein Netz freigegeben. Über Feedback zum Thema Passwort Authentifikation bei VNC/KVM wäre ich daher sehr erfreut.

Ein lästiges Problem bleibt allerdings trotzdem noch: die langen Startparameter. Man kann sich zwar hierfür jeweils Start- und Stopscripte basteln, allerdings gibt es auch eine schönere Lösung. Diese heißt libvirt. Darüber werde ich allerdings mehr in einem weiteren Post und in naher Zukunft schreiben. 😉

Für alle die noch mehr über kvm erfahren wollen kann ich die Projekt eigene Linux KVM-Wiki empfehlen.

Kommentare (4)

Mike08.04.2009 um 20:09 Uhr

Dank guter Standardwerte bei KVM kann man viele Parameter weglassen, wenn man eh nur kurz was testen will. Um eine Live-CD mit VNC anzuschauen, genügt das hier:

kvm -cdrom debian.iso -boot d -vnc :0

thomas_00309.04.2009 um 09:24 Uhr

habe das ganze gestern auch aufgesetzt und bin (über google) gleich auf deinen blog eintrag gestoßen (der btw. wirklich sehr gut gemacht ist 🙂 )
und ich muss sagen ich bin seeehr positiv überrascht von kvm
bisher hatte ich ein winxp unter vmwareserver 2, jetzt habe ich mit kvm einenen 64bit win2k8 ent. server hochgezogen und der rennt 3 mal schneller 🙂

ich freue mich auch schon auf deinen bericht zu libvirt 🙂

mfg thomas

Failed!09.04.2009 um 12:47 Uhr

~> apt-get install kvm
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut
Lese Status-Informationen ein… Fertig
[…]
Entpacke kvm (aus …/kvm_72+dfsg-4_i386.deb) …
Verarbeite Trigger für man-db …
Richte kvm ein (72+dfsg-4) …
Your system does not have the CPU extensions required to use KVM. Not doing anything. failed!

Simon09.04.2009 um 14:11 Uhr

@thomas_003:
> habe das ganze gestern auch aufgesetzt und bin (über google) gleich auf deinen
> blog eintrag gestoßen (der btw. wirklich sehr gut gemacht ist 🙂 )
Vielen Dank für das positive Feedback! 🙂

> ich freue mich auch schon auf deinen bericht zu libvirt 🙂
Kommt in kürze. *g*

@Failed!:
> Zu allererst muss für KVM wie für XEN auch die BIOS Einstellung Virtualization
> Technology aktiviert sein. Sollte ja eigentlich logisch sein.
Ohne VT geht es nicht. Darum habe ich das auch oben extra noch notiert gehabt. 😉

Einen Kommentar hinterlassen

Dein Kommentar