Kernel Based Virtual Machine (KVM)
- December 9, 2016
- 0
KVM is een complete virtualisatie oplossing voor Linux op x86 hardware. Je kunt tegelijk meerdere virtuele systemen naast elkaar op je Linux machine draaien. KVM is snel en betrouwbaar.
KVM maakt van je Linux systeem een hypervisor waarop je virtuele machines start. Deze virtuele machines kunnen uiteenlopende besturingssystemen draaien, zoals Linux, FreeBSD, OpenBSD, Solaris, Windows en OS X. KVM bestaat uit een kernel-module en Qemu. Samen zorgen zij voor een zeer snelle hypervisor. KVM bestaat al behoorlijk lang en heeft zich veelvuldig bewezen. Het is dan ook een stabiel en betrouwbaar platform.
KVM vereist dat je gebruik maakt van x86 architectuur die geschikt is voor virtualisatie. Dit betekent een Intel processor met VT (virtualization technology) uitbreidingen of een AMD processor met SVM uitbreidingen (AMD-V). Je checkt of je processor geschikt is met: egrep -c ‘(vmx|svm)’ /proc/cpuinfo. Wanneer hier het getal 0 uitkomt, heb je pech. Bij 1 of hoger heb je een processor die KVM ondersteunt.
Ontkoppeling
Virtualisatie biedt vele voordelen. Wanneer je meerdere servers hebt draaien die elk een lage workload kennen, dan kun je die door één KVM-server vervangen. Dit spaart het milieu en belangrijker, je portemonnee. Door de ontkoppeling van de hardware krijg je als het ware een oneindige levensduur van je systemen. Wanneer je een schijf of moederbord wilt vervangen, dan kun je de virtuele systemen naar andere hardware migreren. Blijkt een bepaalde virtuele server zwaarder belast te worden, dan ken je die eenvoudig meer geheugen toe of migreert die naar een zwaardere KVM-server.
KVM is een complete hypervisor, waardoor je er virtuele machines met uiteenlopende besturingssystemen op kunt draaien. Je kunt ook zogenoemde appliances downloaden, dit zijn kant en klare geconfigureerde systemen voor een bepaalde taak. Kijk bijvoorbeeld eens op turnkeylinux.org, daar vind je meer dan honderd appliances, zoals een Drupal systeem, een Ruby on Rails systeem, een Redmine- of een OTRS systeem.
Fysiek bestaat een virtuele machine meestal uit slechts één bestand, dit bevat de virtuele harde schijf van waaraf je het systeem opstart. Dit bestand wordt een image genoemd. Voor virtuele machines bestaan verschillende formaten. Voor KVM wordt meestal het qcow2 formaat gebruikt. Vmware images met de bestands-extensie vmdk zijn met de qemu-tools te converteren naar het qcow2 formaat.
Voordelen
Het gebruik van virtuele systemen heeft een enorme vlucht genomen, omdat het een groot aantal voordelen biedt. Doordat een virtuele machine fysiek uit een bestand bestaat, kun je deze dus eenvoudig kopiëren of verplaatsen. Je kunt bijvoorbeeld een nieuwe image aanmaken, hiermee een nieuw virtueel systeem opstarten en hierop Ubuntu installeren. Vervolgens sluit je het virtuele systeem netjes af. Je hebt nu een mooi maagdelijk systeem en maakt een kopie van dit image voordat je het verder gaat gebruiken. Wil je een keer een nieuwe applicatie gaan uitproberen, dan maak je weer een kopie van het maagdelijke systeem, start de kopie op en installeer dat die applicatie op. Nu kun je naar hartenlust experimenteren, na afloop besluit je of het virtuele systeem wilt bewaren voor toekomstig gebruik of je gooit eenvoudig het image weg.
Ook kun je op het ene systeem, bijvoorbeeld je desktop, een virtuele machine aanmaken, software erop installeren, configureren enzovoorts en het daarna afsluiten en overzetten op een ander systeem. Dat kan ook een remote systeem zijn, misschien wel aan de andere kant van de wereld. Je kunt daar eenvoudig het virtuele systeem weer opstarten en verder gaan gebruiken.
VNC
Wanneer je in KVM op je lokale desktop of laptop een virtuele machine opstart, dan wordt bij het starten van de virtuele machine een window geopend waarin je de machine ziet (zie het screenshot). Hier kun je eenvoudig met je toetsenbord of muis de installatie uitvoeren. In de praktijk zal je echter vaak KVM op servers draaien die “headless” zijn, dat wil zeggen zonder toetsenbord en beeldscherm. Je logt via ssh op je kvm-server in. Om dan bijvoorbeeld een nieuwe virtuele machine te kunnen installeren, biedt KVM de mogelijkheid de console van het virtuele systeem via VNC te exporteren. Je kunt dan op afstand je virtuele machine bedienen.
KVM-window met OpenBSD als virtuele machine
Je kunt KVM rechtstreeks vanaf de commandline opstarten. Een andere optie is om gebruik te maken van libvirt. Alle grote distributies hebben KVM in hun packages opgenomen. Hieronder volgt een manier om op Ubuntu KVM te gebruiken. Wij beginnen met een vers geïnstalleerd Ubuntu 15.04 systeem.
Je installeert KVM met ‘sudo apt-get install qemu-kvm bridge-utils qemu-utils uml-utilities’. Maak een bridge door de configuratie van /etc/network/interfaces aan te passen, zie hiervoor Listing 1 in het LXC Linux Containers artikel in dit blad (pag. 31-33). Kies het juiste ip-adres en de juiste gateway en nameserver. Vervolgens maak je het bestand /etc/qemu-ifup-br0 aan, zie Listing 2. Dit bestand maak je executable met ‘sudo chmod_+x /etc/qemu-ifup-br0’.
In het bestand /etc/sysctl.conf haal je het hekje weg aan het begin van de regel met ‘net.ipv4.ip_forward=1’. Reboot en controleer dat de bridge op is met ‘brctl show’ en dat de forwarding regel zijn werk heeft gedaan met ‘cat /proc/sys/net/ipv4/ip_forward’, dit moet als uitkomst ‘1’ geven. Wij zijn nu klaar met de voorbereidingen.
Maak een directory voor je virtuele systemen en maak hierin het image voor je eerste virtuele systeem aan met ‘sudo qemu-img create -f qcow2 debian1.img 8G’. Hiermee maak je een image aan met 8 Gb aan ruimte in het qcow2 formaat. Het bestand debian1.img is nu nog geen 200 kb groot, dit groeit in het gebruik. Download een recente Debian installatie-cd en save het iso-bestand. In plaats van Debian kun je hier ook voor een FreeBSD-installatie iso kiezen, een Windows installatie-CD, enzovoorts.
Je kunt nu vanaf de commandline je virtuele systeem opstarten, je kunt ook een klein opstart-bestandje maken en dat gebruiken om het systeem op te starten. Een voorbeeld daarvan vind je in Listing 3.
Je ziet dat de regels eindigen met een backslash. Dit is een manier om tegen de shell te zeggen dat het commando nog niet klaar is, maar op de volgende regel verder gaat. Daarom heeft de laatste regel ook geen backslash aan het inde. Je kunt de backslashes dus ook weglaten en alles achter elkaar typen, maar dat komt de leesbaarheid niet ten goede. Wij eindigen het commando met een verwijzing naar de installatie-cd (-cdrom <imagenaam>) en de aanduiding dat het systeem van cdrom moet starten (-boot d). Met de regel “-m 2048” geef je aan dat de virtuele machine 2 Gb RAM moet krijgen. Wil je via VNC bij de console, dan voeg je nog een regel toe, met “-vnc <ipnummer>:1”, waarbij <ip-nummer> het adres van je kvm-host is, met :1 geef je een port aan, je kunt meerdere virtuele machines naast elkaar draaien, waarbij je de eerste met :1, de tweede met :2, etc. van elkaar scheidt.
Het virtuele systeem wordt nu geboot en de installatie-cd wordt gestart. Je kunt nu een normale installatie doorlopen, inclusief het partitioneren van de (virtuele) harde schijf, netwerk-configuratie, etc. Nadat de installatie voltooid is, vraagt de installer je het systeem te rebooten. Je geeft het reboot-commando, wacht tot het systeem netjes is afgesloten en onderbreekt dan het eerder gegeven kvm-commando met Cltr-C. Je start de virtuele machine weer op, maar zonder de regel met de verwijzing naar de installatiecd en zonder de regel “-boot d”.
Wrap up
Je hebt gezien hoe gemakkelijk je een virtuele machine kunt maken. Jij bent nu aan zet om voor jou nuttige toepassingen te bedenken!