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-kvmU kunt controleren of het pakket alle vereiste modules heeft geladen door het volgende uit te voeren:
$ lsmod | grep kvmkvm_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 virtinstWe 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
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 standaardHet 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.