Virtualisatie is uit het computerlandschap niet meer weg te denken. Even een virtuele machine installeren in software, zoals VirtualBox, is handig om uit te proberen wat de mogelijkheden zijn van een bepaald OS. Daarnaast biedt Linux de mogelijkheid om met KVM een virtualisatieplatform te bouwen dat in een bedrijfsomgeving niet misstaat.

 Om te begrijpen wat we in dit artikel gaan doen, is het van belang om te weten hoe virtuele machines op Linux beheerd worden. Deze beheersinterface wordt toegewezen door libvirtd. Libvirtd is een proces dat op de virtualisatie host (de hypervisor) actief hoort te zijn, wat gecontroleerd kan worden met de opdracht systemctl status libvirtd.

 

 Als libvirtd actief is, geeft het toegang tot diverse virtualisatie oplossingen, waaronder KVM, Xen, maar ook anderen, zoals VirtualBox. Er zijn verschillende programma’s die gebruikt kunnen worden om virtuele machines te beheren via libvirtd. Een vrij algemene oplossing is Virtual Machine Manager, een grafische tool waarmee virtuele machines eenvoudig beheerd kunnen worden en van waaruit je ook een console naar de virtuele machines kunt openen. Hoewel Virtual Machine Manager eenvoudig en toegankelijk is, is het niet de meest voor de hand liggende utility op een KVM server, aangezien de virtualisatie hosts niet altijd eenvoudig toegang bieden tot de grafische console. Om die reden kijken we in dit artikel met name naar de virsh command line interface. Ook lees je hoe je virtuele machines aanmaakt en beheert vanaf de Linux command line.

 

 

Image bestanden importeren

KVM virtuele machines kunnen geïnstalleerd worden vanuit een grafische tool, zoals Virtual Manager. Wil je een flexibele manier om ervoor te zorgen dat meerdere virtuele machines op efficiënte wijze uitgerold kunnen worden, dan is het handig ervoor te zorgen dat je ze voor gebruik niet hoeft te installeren. Dat betekent dat je een kant-en-klaar disk image nodig hebt dat je als template kan gebruiken. Dit is gewoon een diskbestand dat vooraf met KVM of een andere virtualisatietool gemaakt is.

 In feite maakt het niet eens zo heel veel uit wat voor type diskbestand je gebruikt, maar als je flexibel wilt zijn, dan is het aan te raden om gebruik te maken van het qcow2 formaat. Dit formaat is de huidige standaard in open source virtualisatie en maakt features mogelijk die als handig beschouwd worden in een gevirtualiseerde omgeving, zoals bijvoorbeeld het werken met snapshots. Gebruik van een andere type virtualisatieformaat is echter ook mogelijk, je zult dan wel moeten converteren voordat je van de virtuele machine gebruik kan maken in KVM.

 

 

Converteren van VMware naar Qcow2

Als je virtuele machine is aangemaakt in VMware, kan deze op een vrij eenvoudige wijze omgezet worden naar KVM formaat. Gebruik hiervoor het commando:

 

 

qemu-img convert -O qcow2 naam-van-je-vmfile.vmdk naam-van-je-vmfile.qcow2.

 

 

Wacht vervolgens even totdat de volledige schijf is omgezet en je kan verder met de procedure die in dit artikel beschreven wordt.

 

Als je eenmaal het disk image bestand in het gewenste formaat hebt, kan je verder en een virtuele machine aanmaken op basis van dat diskbestand. Hiervoor gebruik je het virt-install commando, gevolgd bij de nodige parameters die aangeven welke hardware configuratie je specifiek wilt gebruiken. Gebruik hiervoor het commando virt-install. Het commando in kwestie kan er bijvoorbeeld als volgt uitzien:

 

 

virt-install -n server1 –disk=/var/lib/libvirt/images/server1.qcow2 –ram 1024 –vcpus 1 –connect qemu:///system –import –noautoconsole

 

Het resultaat van dit commando is een nieuwe virtuele machine die gebaseerd is op het qcow2 bestand dat opgeslagen is in de directory /var/lib/libvirt/images. (Je moet er dan natuurlijk wel voor gezorgd hebben dat het image file ook in die directory gekopieerd is). Daarbij wordt in KVM de naam server1 gebruikt, een hoeveelheid van 1GB RAM toegekend en 1 vCPU gebruikt. De –connect optie zorgt ervoor dat de virtuele machine lokaal contact maakt met de Qemu interface die door KVM gebruikt wordt om virtualisatie aan te bieden. De optie –noautoconsole behelst dat er geen console gestart wordt. De VM draait dus “headless” en als je er gebruik van wilt maken, zal dat moeten door gebruik te maken van SSH.

 

 Nadat de virtuele machine op bovenstaande wijze is aangemaakt, gebruik je de opdracht virsh list om te controleren dat deze inderdaad beschikbaar is. Met dit commando zie je virtuele machines die bij libvirtd bekend zijn. Staat je virtuele machine daar niet tussen? Gebruik dan virsh list –all voor een volledig overzicht, waarbij de virtuele machines die niet gestart zijn ook getoond worden. Indien nodig kan je virsh start vmnaam gebruiken om een betreffende virtuele machine zelf handmatig te starten.

 

 

Werken met virtuele hardware

Nadat je de virtuele machines geïmporteerd hebt, kan je er vanuit de KVM interface ook hardware aan toevoegen. Hiervoor maak je gebruik van het virsh commando, dat rechtstreeks communiceert met de virsh managementlaag die op zijn beurt weer een interface biedt tot libvirtd. Libvirtd is de beheersinterface die gebruikt wordt door verschillende virtualisatieoplossingen, waaronder niet alleen KVM, maar bijvoorbeeld ook Xen en anderen, zoals virtualbox. Zo is het bijvoorbeeld vrij eenvoudig een extra netwerkkaart toe te voegen: gebruik hiervoor de volgende opdracht:

 

virsh attach-interface –domain server1 –type network –source default –model virtio –mac 52:54:00:00:11:23 –config –live

 

In dit commando wordt een extra netwerkkaart toegevoegd. Deze maakt gebruik van de VirtIO driver (die er in KVM voor zorgt dat de hardware toegang min of meer direct is en niet via een emulatie plaatsvindt. De optie –config zorgt dat de configuratie naar het configuratiebestand wordt weggeschreven, terwijl je er met –live voor zorgt dat de configuratie ook naar de runtime configuratie weggeschreven wordt en dus direct actief is. Tot slot is er de optie “default”, waarmee wordt aangegeven dat de configuratie wordt toegepast op de default bridge.

 

 

Meer over bridge

Naast het toevoegen van nieuwe netwerkkaarten, is het ook vrij eenvoudig om een extra harde schijf aan te maken voor een virtuele machine. Uiteraard kan dat vanuit de Virtual Machine Manager, maar het is ook vrij eenvoudig te doen vanaf de command line. Om dit te doen moet je eerst een disk bestand aanmaken. Dat kan met behulp van dd:

 

dd if=/dev/zero of=/var/lib/libvirt/images/1Gfile-server1.img bs=1M seek=1024 count=0

 

 

Met behulp van dit commando maak je een harde schijfbestand aan met een grootte van 1GB. De optie seek=1024 bs=1M zorgt ervoor dat 1024 blokken van 1MB gereserveerd, maar niet gealloceerd, worden. De optie count=0 maakt het sparse file af: je virtuele machine zal 1GB zien, maar op de host wordt deze gigabyte niet daadwerkelijk ook gealloceerd.

 

 Nadat op deze manier een sparse file is aangemaakt, kan je hem toevoegen aan je virtuele machine. Gebruik daarvoor het volgende commando:

 

 

virsh attach-disk server1 /var/lib/libvirt/images/1Gfile-server1.img vdb –config –live

 

 

Met dit commando wordt het zojuist aangemaakte bestand weggeschreven naar de runtime configuratie en het configuratiebestand en het device zal in de virtuele machine aangemaakt worden als device vdb.

 

In dit artikel heb je gelezen hoe je vanaf de command line virtuele machines kunt beheren. We hebben het proces stap voor stap doorlopen, waarbij eerst de virtuele machine zelf is aangemaakt en er vervolgens de nodige devices aan zijn toegewezen.