KVM

Libvirt QEMU en KVM-stack instellen op Debian

Libvirt QEMU en KVM-stack instellen op Debian
Op QEMU-KVM gebaseerde virtualisatie vormt de kern van op Linux gebaseerde virtualisatiestack. Het is gratis en open source en is een van de meest voorkomende virtualisatietechnologieën in de branche. De meeste cloudserviceproviders gebruiken KVM en met een goede reden. Het biedt een zeer efficiënte en toch zeer veilige virtualisatiestack en er zijn geen ingewikkelde licenties om mee om te gaan. Dit is niet het geval met uw typische Hyper-V- of VMWare-installatie. Het nadeel is echter dat de installatie erg complex kan zijn, vooral voor onervaren gebruikers. Dit artikel is bedoeld om deze complexiteit voor de lezer te verminderen.

Dat gezegd hebbende, laten we proberen onze eigen KVM-hypervisor in te stellen op een Debian 9-server .

VT-x- of AMD-V-extensies inschakelen

In het ideale geval heb je een schone installatie van je favoriete Linux-distributie nodig op een machine (geen VM) met een redelijk moderne CPU. De meeste moderne Intel-CPU's ondersteunen VT-x-extensies en op dezelfde manier heeft AMD zijn AMD-V-extensies. Deze extensies zijn "verbeteringen" die rechtstreeks in het silicium van uw CPU zijn ingebouwd en die een snellere en veiligere virtualisatie mogelijk maken. U moet deze extensies inschakelen vanuit het BIOS/UEFI-menu van uw moederbord. Raadpleeg de handleiding van uw moederbord voor meer informatie.

Als u uw perfect werkende Linux-werkstation niet wilt bezoedelen, kunt u een virtuele machine in de cloud gebruiken om deze experimenten uit te voeren. DigitalOcean biedt bijvoorbeeld virtuele machines waarvoor geneste virtualisatie is ingeschakeld. Hiermee kunt u VM's uitvoeren binnen uw door de cloud gehoste VM (dit staat bekend als geneste virtualisatie). Het is duidelijk dat dit een zeer inefficiënte manier is om praktisch een hypervisor te gebruiken, maar als experiment zal het prima werken. Zorg voor minimaal 4 GB geheugen en meer dan 2 CPU's.

Nadat u de genoemde extensies hebt ingeschakeld, kunt u dat verifiëren door lscpu uit te voeren en te zoeken naar het Virtualisatie-item:

$ lscpu
… .
Virtualisatie:        VT-x
… .

Nu we de extensies hebben ingeschakeld, is het tijd om verder in de stapel te gaan.

KVM en QEMU installeren

KVM (of Kernel-Based Virtual Machine) bestaat uit een paar Linux-kernelmodules die zullen profiteren van de CPU-extensies die we eerder hebben ingeschakeld. QEMU daarentegen bestaat uit een aantal userland-programma's die ons emulatiemogelijkheden bieden. Als zelfstandige software kan QEMU worden gebruikt om programma's van de ene architectuur, zoals ARM, op ​​een andere zoals x86_64 uit te voeren en vice versa. Het kan worden gebruikt om alles uit te voeren, van een enkel binair bestand tot een compleet besturingssysteem.

We zullen het natuurlijk alleen gebruiken om x86_64-besturingssystemen op het x86_64-platform te virtualiseren. En daarvoor hebben we maar één pakket nodig:

$ sudo apt install qemu-kvm

U kunt controleren of het pakket alle vereiste modules heeft geladen door het volgende uit te voeren:

$ lsmod | grep kvm
kvm_intel             200704  0
kvm                   598016  1 kvm_intel
irqbypass              16384  1 kvm

Dat is alles wat je nodig hebt, in theorie. Maar je zult snel merken dat dat praktisch is. Virtuele machines zijn enorm complex en we hebben software-wrapper nodig om alle verschillende vereisten, zoals netwerken, bestandssysteembeheer, enz. Op een redelijk geautomatiseerde (en schaalbare manier) te beheren. Om dit te doen hebben we Libvirt virtualisatiebibliotheek/daemon nodig.

Libvirt installeren

Libvirt is een essentieel onderdeel van je virtualisatiestack. De libvirtd-daemon draait virtualisatiegerelateerde services op de achtergrond. Services die luisteren naar verzoeken zoals "Maak een VM", "Vernietig een VM", "Maak een netwerk", enz. en voer ze daarin uit met behulp van de basis Linux-hulpprogramma's zoals qemu binaries, iptables, enz.

Libvirt is erg algemeen en kan worden gebruikt om KVM-gasten, LXC-containers en Xen-virtualisatiestack te beheren. We zullen ons voorlopig alleen concentreren op Libvirt voor KVM-gasten. Libvirtd onthult een API die kan worden gebruikt door GUI-toepassingen zoals virt-manager of oVirt of opdrachtregelprogramma's zoals virt-install, virsh, enz. We kunnen zelfs onze eigen aangepaste clients schrijven die dezelfde standaard API gebruiken.  We zullen de commandoregeltools gebruiken, zoals virsh en virt-install, om de zaken gestandaardiseerd te houden.

Laten we al deze tools installeren:

$ apt install libvirt-clients libvirt-daemon-system virtinst

We hebben ook een ander pakket libguestfs-tools nodig om ons te helpen bij het bewerken of wijzigen van de harde schijven en bestandssystemen van gast-VM's.

Super goed! Nu hebben we de hele stapel geïnstalleerd en weten we hoe de architectuur is ingedeeld. Om libvirt (en gerelateerde tools) te gebruiken, voeg je je gebruiker toe aan libvirt-qemu en libvirt groepen.

$ sudo usermod -aG libvirt
$ sudo usermod -aG libvirt-qemu

Of voer de opdrachten uit als root-gebruiker.

Virsh en het standaardnetwerk starten

Het virsh commandoregelhulpprogramma is iets dat je veel zult gebruiken bij het beheren van je VM's. Je kunt gewoon virsh typen en naar de virsh commandoregelinterface gaan, of virsh . typen [Opties] van je normale shell. Ga door de uitvoer van virsh help wanneer je vastzit met een VM-gerelateerde operatie.

Het eerste virsh-commando dat we zullen gebruiken, roept het standaardnetwerk op waarmee een VM verbinding kan maken:

$ virsh net-autostart standaard
$ virsh net-start standaard

Hierdoor wordt het standaardnetwerk gestart en wordt het automatisch gestart wanneer de host opnieuw wordt opgestart. Gebruik de opdracht om de details over dit standaardnetwerk te controleren:

$ virsh net-dumpxml standaard

standaard
3d723dc6-49a4-4f73-bf6d-623d6b46b099












Het xml-bestand kan u het bereik van mogelijke IP-adressen laten zien en hoe ze zullen communiceren met de buitenwereld. In principe komt het verkeer naar hen toe via een NAT en maken ze geen deel uit van het externe netwerk van je host. U kunt Bridge Networking gebruiken om elke VM bloot te stellen aan het LAN van de hostmachine.

Een virtuele machine starten

Om een ​​virtuele machine te starten, hebben we een installatiemedium nodig (zoals de installatie-ISO voor elk besturingssysteem) en hoeveel CPU's en hoeveel geheugen moet worden toegewezen aan de VM, en of het VNC nodig heeft. Deze stap is waar je een GUI-installatieprogramma zoals virt-manager echt kunt waarderen, maar we zullen het doen met behulp van een nogal complex virt-install commando.

Ik bewaar graag al mijn opstartmedia op /var/lib/libvirt/boot en alle VM's en hun virtuele harde schijf op /var/lib/libvirt/images (de standaardlocatie) dit vereenvoudigt de organisatie.

$ cd /var/lib/libvirt/boot
$ wget http://releases.ubuntu.com/18.04.2/ubuntu-18.04.2-desktop-amd64.iso

Het bovenstaande commando haalt Ubuntu desktop ISO op, je kunt net zo gemakkelijk CentOS of een andere distributie krijgen die je wenst.

Om een ​​nieuwe VM te maken en op te starten, voer je het volgende uit:

$ virt-install --virt-type kvm \
--naam mijnVM \
--geheugen 2048 --vcpus=2 \
--cdrom /var/lib/libvirt/boot/ubuntu-18.04.2-desktop-amd64.iso \
--schijfgrootte=40 \
--graphics vnc,luister=0.0.0.0,poort=5900 \
--geen autoconsole

Het bovenstaande commando is inderdaad ingewikkeld. Ik raad aan om deze commando's in tekstbestanden op te slaan en deze als uitvoerbare scripts uit te voeren wanneer u een nieuwe VM maakt. De meeste parameters zoals virt-type en virt-name spreken voor zich. Ze zijn gewoon vervelend om op te schrijven.

De laatste optie voor VNC-weergave start een VNC-server en stelt u in staat om op afstand consoletoegang tot uw VM te krijgen door verbinding te maken met poort 5900 van de host. Open een VNC-client op uw bureaublad en ga naar het IP-adres van uw KVM-host op poort 5900. Zorg ervoor dat u het IP-adres van de host bereikt en niet het IP-adres van de VM. Uw VNC maakt verbinding met de video-uitgang van uw VM en u kunt doorgaan met de installatie.

Waar nu heen?

Vanaf hier kunt u proberen de VM's te pauzeren, stoppen en verwijderen. U kunt ook de onderliggende infrastructuur wijzigen door pools voor opslag toe te voegen en bridge-netwerken te configureren. Alle configuratiebestanden voor individuele VM's, netwerkinterfaces en opslagpools worden opgeslagen in /etc/libvirt/ en /etc/libvirt/qemu.

Soms moet je de bestanden op de harde schijf die zijn opgeslagen in /lib/libvirt/images fysiek verwijderen, zelfs nadat je de VM uit libvirt hebt verwijderd. Om dingen verder te automatiseren, probeert u qcow2-afbeeldingen te importeren die de meeste Linux-distributies zoals Ubuntu en CentOS. Deze hebben het besturingssysteem voorgeïnstalleerd.

Conclusie

Dit instellen is nergens zo eenvoudig als het opzetten van VirtualBox en de reden hierachter is legio. De meeste stapels zijn ingewikkeld omdat ze modulair en zeer schaalbaar zijn ontworpen. Het maakt geen aannames over waar u de VM uitvoert. De omgeving kan een persoonlijke desktop of een datacenter zijn. Werken met een GUI kan deze complexiteit tot op zekere hoogte helpen verminderen. Deze systemen zijn echter ontworpen om te werken met een REST API om verbinding te maken met de factureringssystemen, bewakingssystemen, enz. van uw organisatie. Ze worden bijna nooit door een mens aangeraakt nadat ze zijn ingezet.

Dat gezegd hebbende, automatisering is de naam van het spel met libvirt en qemu-kvm. Blader door de officiële documentatie en schrijf je eigen coole script om een ​​vloot van VM's te laten draaien en laat ons weten of je deze tutorial nuttig vond.

OpenTTD-zelfstudie
OpenTTD is een van de meest populaire simulatiegames voor bedrijven die er zijn. In dit spel moet je een geweldig transportbedrijf creëren. U begint e...
SuperTuxKart voor Linux
SuperTuxKart is een geweldige titel die is ontworpen om je de Mario Kart-ervaring gratis te bieden op je Linux-systeem. Het is behoorlijk uitdagend en...
Strijd om Wesnoth Zelfstudie
The Battle for Wesnoth is een van de meest populaire open source strategiespellen die je op dit moment kunt spelen. Dit spel is niet alleen al heel la...