AWS annoncerede et skridt fra Xen mod KVM. Så hvad er KVM?

Bundet i en AWS-meddelelse om en ny EC2 high-end instans type (C5) er et stærkt forslag om, at Amazons cloud computing gigant er begyndt at flytte sine hundreder af tusinder af fysiske servere væk fra open source Xen hypervisor, der kører dem indtil nu til open source-alternativet, KVM.

Uanset om du har din karriere og / eller boliglån dybt investeret i Xen's fremtid, eller om du aldrig vidste, at den eksisterede, kan du være interesseret i at lære mere om KVM. Så her er en generel introduktion tilpasset min bog, Teach Yourself Linux Virtualization and High Availability: forbered dig på LPIC-3 304 certificeringseksamen.

Brug for lidt mere grundlæggende baggrund på enten Linux-servere eller AWS? Min Linux i aktion og lær Amazon Web Services i en måned med frokostbøger fra Manning kan hjælpe sammen med mine Linux-serveradministrationskurser hos Pluralsight. Der er også et hybridkursus kaldet Linux in Motion, der består af mere end to timers video og omkring 40% af Linux-teksten i aktion.

KVM

Ligesom Xen er KVM (Kernel-based Virtual Machine) en open source hypervisor-teknologi til virtualisering af beregningsinfrastruktur, der kører på x86-kompatibel hardware. Ligesom Xen har KVM både et aktivt brugerfællesskab og betydelige virksomhedsinstallationer.

En KVM-vært kører faktisk på Linux-kernen sammen med to KVM-kernemoduler (kvm.ko-modulet og enten kvm-intel.ko eller kvm-amd.ko). Gennem den stramme kerneintegration - herunder I / O-forbindelse med kerneblok og netværksdrivere leveret af Virtio - kan KVM tilbyde sine gæster mere problemfri adgang til alle de komplekse hardware- og netværksprofiler, de måtte støde på.

Hardware-virtualiseringsudvidelser, der er indbygget i moderne CPU-design og kræves til KVM-implementeringer, betyder, at KVM-gæster lige uden for boksen kun kan få adgang til de hardwareressourcer, de har brug for uden behov for at bekymre sig om lækage til det større system.

Hvor præcist passer QEMU ind i alt dette? Udover at være i stand til at fungere som hypervisor, er QEMUs styrke som en emulator. KVM kan i sin hypervisor-virtualiseringsrolle trykke på QEMUs emuleringsbeføjelser for at komplimentere sine egne hardwareaccelerationsfunktioner og præsentere sine gæster for et emuleret chipsæt og PCI-bus. Helheden, som de siger, kan være større end summen af ​​dens dele.

En stor del af ledelsesfunktionalitet til KVM leveres ofte af Libvirt. Derfor vil du måske nogle gange henvise til de detaljerede oplysninger om KVM-relaterede funktioner som netværks-, lagrings- og filsystemlayouter, der findes i det femte kapitel i bogen Teach Yourself Linux Virtualization and High Availability ("Libvirt og relaterede værktøjer") .

Installation

Før noget andet skal du sørge for, at den fysiske maskine, du planlægger at bruge som en KVM-vært, understøtter hardwarevirtualisering. Udover BIOS-indstillingen og indholdet af / proc / cpuinfo (som vi diskuterede i kapitel 1), kan du også hurtigt kontrollere dette fra et kørende Linux-system ved hjælp af kvm-ok: $ kvm-ok

Det er også en god ide at være sikker på, hvilken hardwarearkitektur - 64 eller 32-bit - du arbejder med: $ uname -m

Men selvom din hardwareprofil er op til opgaven, bliver du nødt til at lade Linux-kernen komme ind på dine planer. Hvis de ikke allerede er der, skal du tilføje kvm- og enten kvm-intel- eller kvm-amd-kernemodulerne. # Modprobe kvm-intel

Hvis disse moduler ikke indlæses (og der er ingen / dev / kvm-enhed i filsystemet), er der en god chance for, at din CPU bare ikke er i stand til det job, du gerne vil have det til. Men hvis alt det gik, er du klar til at installere qemu-kvm-pakken (og om nødvendigt også libvirt, virt-install og bridge-utils).

Arbejde med KVM Management Tools

Det er ingen hemmelighed, at virtualiseringsplatforme har et velfortjent ry for at være komplicerede. Men der er to ting, der kan gøre det godt at komme i gang med KVM lidt mere udfordrende end nogle af de andre:

  • Der er en hel række ledelsesværktøjssæt til rådighed, som hver tilbyder lignende - men ikke identiske - funktionalitet.
  • De har en grim vane med at ændre de navne, der bruges til nøglebinarierne, afhængigt af hvilken distribution og frigivelse du bruger.

Jeg introducerer dig til Libvirt Tools og vmbuilder i kapitel fem, men her diskuterer vi KVM-værktøjssættet.

At opbygge nye gæster ved hjælp af det, vi kalder ”KVM” -metoden, er en totrins proces. Først bruger du qemu-img til at oprette et nyt billede - eller ændre eller konvertere et gammelt. Derefter bruger du qemu-kvm til at oprette en virtuel maskine, der starter installationen.

Sagde jeg bare "du bruger qemu-kvm ..."? Fjollet mig. qemu-kvm blev fusioneret i qemu for længe siden og er blevet erstattet af qemu-system-x86_64. I mellemtiden tilbyder nogle systemer dig kvm som en indpakning, der udfører qemu-system-x86_64 -enable-kvm - selvom du ikke bør forveksle kvm-indpakningen med den gamle kvm-binære, der brugte en noget anden syntaks.

Så lad os se, hvordan disse to trin fungerer. Du opretter et diskbillede med qemu-img (som forresten også kan bruges meget effektivt til andre hypervisorer), hvor “min disk” er navnet på det billede, du gerne vil oprette, den maksimale størrelse af billedet vil være 6 GB, og qcow2 er filformatet. qcow står forresten for "QEMU Copy On Write".

qemu-img create -f qcow2 /home/username/myimages/my-disk.img 6G \ Formatting ‘/home/username/myimages/my-disk.img’, \ fmt=qcow2 size=6442450944 \ encryption=off \ cluster_size=65536 \ lazy_refcounts=off \ refcount_bits=16

Valg af filformat afhænger af dine specifikke behov. Hvis du har brug for større kompatibilitet og fleksibilitet - inklusive evnen til at generere sofistikerede snapshots - så vil qcow2 sandsynligvis være dit bedste valg.

Qcow-diskens billedformat tillader, at diskpladsallokering kun vokser efter behov, hvilket betyder, at brugen af ​​plads altid er så effektiv som muligt. Ændringer i et qcow-skrivebeskyttet billede kan gemmes i en separat fil, der internt henviser til det originale billede. qcow2 tilføjede muligheden for at oprette flere billede snapshots.

Vi er nu klar til trin to. Sådan bygger vi vores VM:

kvm -name my-VM \ -hda /home/username/myimages/my-disk.img \ -cdrom /home/username/Downloads/ubuntu-16.04-server-amd64.iso \ -boot d -m 1024

Et nyt SDL-vindue vises ofte (dog ikke nødvendigvis for alle distributioner), hvor du kan færdiggøre operativsystemets installationsproces. At genvinde kontrol over din mus fra Qemu-terminalen kræver, at du trykker på CTRL + ALT.

For at forklare: ved hjælp af "kvm" (selvom den nøjagtige kommando, du har brug for til din version, kan variere), kalder vi vores nye gæst "min-VM", udpeger my-disk.img-filen som hda ("harddisk a ”), peg på placeringen af ​​operativsystemets ISO (Ubuntu 16.04-server, i dette tilfælde), og indstil 1024 MB som den maksimale hukommelse, der er tildelt VM.

Som standard konfigurerer KVM din gæst til netværk på brugerniveau (som om parametrene -netdev-bruger, id = bruger.0 -enhed e1000, netdev = bruger.0 var specificeret). Dette giver gæsten en IP-adresse gennem KVMs egen DHCP-tjeneste og adgang til din vært, Internettet og til LAN-baserede ressourcer. Mens standardkonfigurationen er enkel, kan den være alt for begrænsende for nogle scenarier, da der ofte er nogle ydeevne- og funktionsbegrænsninger.

Udover disse kan du bruge kommandolinjeflag til at kontrollere forskellige VM-konfigurationsparametre, herunder:

  • -smp 2 giver to processorer (“smp” = symmetrisk multiprocessing).
  • Argumentet -net (eksempel: -net nic, model = virtio, macaddr = 52: 54: 00: 05: 11: 11) opretter en netværksforbindelse til din gæst.
  • Du kan tilvejebringe en netværksbro ved hjælp af noget som -net bridge, vlan = 0, br = br0 - selvom dette kræver en matchende -net-definition på værten. De to er forbundet via en speciel “vlan” -parameter.
  • -ballon virtio giver mig mulighed for at udvide eller reducere gæstens hukommelsesstørrelse uden at skulle genstarte den.
  • Du kan også bruge -drive file = flag til at definere yderligere bloklagerenheder. Tilføjelse af en værdi for format = (for eksempel qcow2).

The -M flag will assign a specific machine type hardware emulation. pc. For example, will provide a standard PC profile. For a complete list of available machine types, you can run kvm -M ?:

kvm -M ? Supported machines are: ubuntu Ubuntu 15.04 PC (i440FX + PIIX, 1996) (alias of pc-i440fx-wily) pc-i440fx-wily Ubuntu 15.04 PC (i440FX + PIIX, 1996) (default) ubuntu Ubuntu 15.04 PC (i440FX + PIIX, 1996) (alias of pc-i440fx-vivid) pc-i440fx-vivid Ubuntu 15.04 PC (i440FX + PIIX, 1996) (default) pc-i440fx-utopic Ubuntu 14.10 PC (i440FX + PIIX, 1996) pc-i440fx-trusty Ubuntu 14.04 PC (i440FX + PIIX, 1996) pc Standard PC (i440FX + PIIX, 1996) (alias of pc-i440fx-2.5) pc-i440fx-2.5 Standard PC (i440FX + PIIX, 1996) pc-i440fx-2.4 Standard PC (i440FX + PIIX, 1996) pc-i440fx-2.3 Standard PC (i440FX + PIIX, 1996) pc-i440fx-2.2 Standard PC (i440FX + PIIX, 1996) pc-i440fx-2.1 Standard PC (i440FX + PIIX, 1996) pc-i440fx-2.0 Standard PC (i440FX + PIIX, 1996) pc-i440fx-1.7 Standard PC (i440FX + PIIX, 1996) pc-i440fx-1.6 Standard PC (i440FX + PIIX, 1996) pc-i440fx-1.5 Standard PC (i440FX + PIIX, 1996) pc-i440fx-1.4 Standard PC (i440FX + PIIX, 1996) pc-1.3 Standard PC (i440FX + PIIX, 1996) pc-1.2 Standard PC (i440FX + PIIX, 1996) pc-1.1 Standard PC (i440FX + PIIX, 1996) pc-1.0 Standard PC (i440FX + PIIX, 1996) pc-0.15 Standard PC (i440FX + PIIX, 1996) pc-0.14 Standard PC (i440FX + PIIX, 1996) pc-0.13 Standard PC (i440FX + PIIX, 1996) pc-0.12 Standard PC (i440FX + PIIX, 1996) pc-0.11 Standard PC (i440FX + PIIX, 1996) pc-0.10 Standard PC (i440FX + PIIX, 1996) q35 Standard PC (Q35 + ICH9, 2009) (alias of pc-q35–2.5) pc-q35–2.5 Standard PC (Q35 + ICH9, 2009) pc-q35–2.4 Standard PC (Q35 + ICH9, 2009) pc-q35–2.3 Standard PC (Q35 + ICH9, 2009) pc-q35–2.2 Standard PC (Q35 + ICH9, 2009) pc-q35–2.1 Standard PC (Q35 + ICH9, 2009) pc-q35–2.0 Standard PC (Q35 + ICH9, 2009) pc-q35–1.7 Standard PC (Q35 + ICH9, 2009) pc-q35–1.6 Standard PC (Q35 + ICH9, 2009) pc-q35–1.5 Standard PC (Q35 + ICH9, 2009) pc-q35–1.4 Standard PC (Q35 + ICH9, 2009) isapc ISA-only PC none empty machine xenfv Xen Fully-virtualized PC xenpv Xen Para-virtualized PC

KVM Monitor

While working with QEMU, you can open a monitor console and interact with your clients in ways that might be difficult or even impossible using a regular headless server. You can launch the KVM Monitor by pressing CTRL+ALT, and then SHIFT+2, and a new console will open on your desktop. SHIFT+1 will close the console. You can also access the console from the command line using something like:

kvm -monitor stdio

You will probably NOT be able to launch the monitor as root (i.e., via sudo). Naturally, your version may require “qemu-system-x86_64” rather than kvm. This approach allows you to add command line arguments (like that -monitor which specified a console target). Consult man qemu-system-x86_64 for details on the kinds of operations the monitor allows.

This example (borrowed from en.wikibooks.org/wiki/QEMU/Monitor) will list all the block devices currently available to your system, and then point one of them to an ISO file you want to use:

(qemu) info block ide0-hd0: type=hd removable=0 file=/path/to/winxp.img ide0-hd1: type=hd removable=0 file=/path/to/pagefile.raw ide1-hd1: type=hd removable=0 file=/path/to/testing_data.img ide1-cd0: type=cdrom removable=1 locked=0 file=/dev/sr0 ro=1 drv=host_device floppy0: type=floppy removable=1 locked=0 [not inserted] sd0: type=floppy removable=1 locked=0 [not inserted] (qemu) change ide1-cd0 /home/images/my.iso

Networking

By default, a KVM guest will receive an IP address within the 10.0.2.0/24 subnet, and have outgoing access (including SSH access) both to its host, and to the wider network beyond. By that same default however, it won’t be able to host services for network clients. If you need to open up incoming network connectivity, you’ll probably want to create a network bridge on your host that’s similar to the one we used for Xen in the previous chapter. As before, you will install bridge-utils on the host and, assuming you’re running a Debian-based system and you want your host to receive its IP from a network DHCP server, edit the /etc/network/interfaces to look something like this (on CentOS machines, edit files in the /etc/sysconfig/network-scripts/ directory):

auto lo iface lo inet loopback auto eth0 iface eth0 inet manual auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0

På CentOS skal du oprette en ifcfg-br0-fil i / etc / sysconfig / network-scripts / directory for at se sådan ud:

DEVICE=br0 TYPE=Bridge BOOTPROTO=static DNS1=192.168.0.1 GATEWAY=192.168.0.1 IPADDR=192.168.0.100 NETMASK=255.255.255.0 ONBOOT=yes SEARCH=”example.com”

... Og tilføj derefter en linjelæsning BRIDGE = br0-linje til din primære netværksinterfacefil (som ofte vil være: / etc / sysconfig / network-scripts / ifcfg-eth0).

Du stopper derefter og genstarter dine netværkstjenester (eller genstarter).

Leder du efter en solid introduktion til Linux eller AWS administration? Tjek mine Linux i aktion og lær Amazon Web Services i en måned med frokostbøger og Linux in Motion tekst-video hybridkurset fra Manning. Foretrækker du din tekniske læring i video? Jeg har Linux-administrationskurser på Pluralsight, der bare venter på at blive set.