De Linux kernel bevat een module waarmee je rechtstreeks op je systeem virtuele machines kunt draaien. Deze oplossing heet KVM, Kernel-based Virtual Machine. De module kvm maakt sinds eind 2006 deel uit van de standaard 2.6 kernel. KVM werkt lekker simpel. Naast de installatie van KVM en het laden van de module hoef je niets aan je systeem te veranderen. Heb je een Debian- of Ubuntu-systeem dan is de benodigde software met een simpel apt-get commando te installeren. Ook bij de andere distributies is het meestal slechts een kwestie van een paar packages installeren. KVM is volledig open source. Een actieve community zorgt voor een continue doorontwikkeling. KVM heeft zich inmiddels ruimschoots bewezen.

KVM is een echte hypervisor. Op de virtuele machines kunnen daardoor besturingssystemen zonder speciale aanpassing geïnstalleerd worden. Linux, OpenBSD, OpenSolaris en windows werken bijvoorbeeld allemaal probleemloos als guest.

Systeem-eisen

Een voorwaarde voor het gebruik van KVM is dat de CPU waarop de kernel draait over virtualisatietechnologie beschikt. Bij Intel-processors heet dat "Vanderpool" technologie, bij AMD AMD-V. Een geschikte CPU herken je aan de vlag "vmx" in /proc/cpuinfo. Deze kun je snel opzoeken met:

grep vmx /proc/cpuinfo

Levert deze grep een leeg antwoord dan moet je op zoek naar een andere CPU. Soms moet je de virtualisatiemogelijkheid in je BIOS apart aanzetten. Helaas zijn er ook systemen waarin deze optie in de BIOS uitstaat en niet activeerbaar is.

Virtuele machines hebben geheugen nodig. De host (de machine waarop de virtuele machines draaien) dient daarom over flink wat geheugen te beschikken. Zeker wanneer de virtuele machines geheugen-hongerig zijn (bijvoorbeeld omdat ze windows draaien). 2 Gb RAM is toch wel het minimum.

KVM is eenvoudig via de commandline op te starten. Daarbij kun je bijvoorbeeld aangeven hoeveel geheugen je aan het virtuele systeem wilt toewijzen of welk mac-adres het moet gebruiken.

Virtuele machine aanmaken

Een virtuele machine maak je aan met qemu-img. De belangrijkste parameter is de grootte van de te maken virtuele disk:

qemu-img create -f qcow2 virt1.img 8G

Dit maakt een virtuele disc "virt1.img" aan met een virtuele grootte van 8 Gb in het qcow2-formaat. De fysieke grootte is in eerste instantie minder dan 50 kb. Het qcow2-formaat zorgt ervoor dat de image niet groter is dan nodig. Tijdens het gebruik groeit de fysieke grootte mee met de inhoud, in dit geval tot maximaal 8 Gb.

Als CD of DVD gebruik je meestal een iso-image. Desgewenst kun je ook de fysieke speler van je host aanspreken. Wanneer je vanaf de iso wilt booten, dan geef je dit apart op bij het aanroepen van kvm:

kvm virt1.img -cdrom debian-500-i386-netinst.iso -boot d

Je krijgt nu een nieuw window waarin je kvm ziet booten. Vervolgens kun je een normale installatie uitvoeren. Zonder het stukje "-boot d" in het bovenstaande commando probeert het systeem te booten vanaf de virtuele harddisk. Met de switch -mem kun je meer of minder geheugen aan je virtuele systeem toewijzen:

kvm virt1.img -mem 1000

Hiermee start je het virtuele systeem op met 1 Gb geheugen.

Het is niet noodzakelijk een grafische weergave van je virtuele systeem te krijgen. Heb je geen X of wil je geen window voor de virtuele machine openen dan gebruik je kvm -nographic. Je zult dan je virtuele machine over het netwerk moeten benaderen.

Netwerk

Vrijwel altijd wil je de virtuele machine toegang tot het netwerk geven. Twee veel voorkomende oplossingen zijn een virtuele switch en een virtuele bridge. In beide gevallen geldt dat elke virtuele machine een eigen uniek mac-adres moeten hebben.

VDE realiseert een virtuele switch in de host. Je maakt dan een apart vlan op je systeem. Via een tap-interface praat dit met de buitenwereld. Hier lees je hoe je een virtuele switch met VDE kunt opzetten.

Een bridge maakt het mogelijk de virtuele machines en de host in hetzelfde netwerk te laten draaien. Dit wordt gebruikt voor bijvoorbeeld virtuele web- of mailservers die vanaf het internet benaderd kunnen worden. In Debian en Ubuntu installeer je de benodigde software met apt-get install bridge-utils. Daarna pas je bestand /etc/network/interfaces aan. De referentie naar de netwerkkaart (bijv.: eth0) wordt verwijderd. In plaats daarvan komt het volgende:

auto lo

iface lo inet loopback

auto br0

iface br0 inet static

address 192.168.1.2

netmask 255.255.255.0

network 192.168.1.0

broadcast 192.168.1.255

gateway 192.168.1.1

bridge_ports eth0

bridge_stp off

bridge_maxwait 5

In dit voorbeeld is het netwerk een 192.168.1.xxx-netwerk en krijgt de host het ip-nummer 192.168.1.2 en de gateway 192.168.1.1. Pas het een en ander aan naar je lokale omgeving.

Vervolgens dient het bestand /etc/qemu-ifup-br0 te worden toegevoegd, met de volgende inhoud:

#!/bin/sh

sudo /sbin/ifconfig $1 0.0.0.0 promisc up

echo "Adding $1 to br0..."

sudo /usr/sbin/brctl addif br0 $1

sleep 2

Maak dit bestand uitvoerbaar en controleer dat sudo op je systeem aanwezig is.

Nadat de bridge werkt start je de virtuele machines op met bijvoorbeeld:

kvm -nographic -net nic,model=rtl8139,vlan=0,macaddr=00:16:3e:00:00:17 -net tap,ifname=tap0,script=/etc/qemu-ifup-br0 virt1.img

Gebruik voor elke machine een ander mac-adres en tap-interface (dus tap0, tap1, tap2, enz.).

KVM in Fedora

Red Hat is hard bezig om de performance van virtualisatie met KVM naar hetzelfde niveau te tillen als waar Xen op zit, omdat ze het later dit jaar sterk op de markt willen zetten. Daarom moet het beheer veel makkelijker worden. De standalone hypervisor die later dit jaar uit moet komen heeft het bridging en multipathing al in zich.

Het werk wordt op dit moment gedaan in Fedora, zegt Geert Jansen van Red Hat Benelux. In Rawhide kun je er al mee aan de slag. Alleen wordt op dit moment nog het protocol gebruikt van Qumranet. Red Hat is wel bezig met een nieuw protocol, dat een open standaard moet worden. Daarmee moet het werk dat hierboven toch nog moet worden verzet tot het verleden behoren.

Bron: Techworld