Az AWS bejelentette, hogy áttér Xenről a KVM felé. Mi tehát a KVM?

Az új EC2 csúcskategóriás példánytípusról (A C5) szóló AWS-bejelentésben megfogalmazott erőteljes javaslat arra utal, hogy az Amazon felhőalapú számítástechnikai óriása elkezdte több százezer fizikai kiszolgálóját eltávolítani az őket addig futtató nyílt forráskódú Xen hipervizoroktól. most a nyílt forráskódú alternatívára, a KVM-re.

Függetlenül attól, hogy karrierjét és / vagy otthoni jelzálogkölcsönét mélyen befektette a Xen jövőjébe, vagy soha nem tudta, hogy létezik, érdekes lehet, hogy többet megtud a KVM-ről. Tehát itt van egy általános bevezetés, amely a Teach Yourself Linux virtualizáció és magas rendelkezésre állás című könyvemből készült: készüljön fel az LPIC-3 304 minősítő vizsgára.

Szüksége van még néhány alapvető háttérre a Linux szervereken vagy az AWS-en? Segíthet a Manning könyvei a működés közbeni Linuxomban és az Ismerje meg az Amazon Web Services szolgáltatásait az ebédek egy hónapjában, valamint a Pluralsight Linux szerver adminisztrációs tanfolyamaim. Van egy hibrid tanfolyam is, a Linux in Motion nevű, amely több mint két órányi videofelvételből és a Linux in Action szövegének mintegy 40% -ából áll.

KVM

A XM-hez hasonlóan a KVM (kernel alapú virtuális gép) egy nyílt forráskódú hipervizoros technológia az x86-kompatibilis hardvereken futó számítási infrastruktúra virtualizálására. A XM-hez hasonlóan a KVM is aktív felhasználói közösséggel és jelentős vállalati telepítésekkel rendelkezik.

A KVM gazdagép valójában a Linux kernelen fut, két KVM kernelmodul mellett (a kvm.ko modul és a kvm-intel.ko vagy kvm-amd.ko). Szoros kernelintegrációja révén - beleértve a kernelblokkokkal való I / O kapcsolatot és a Virtio által biztosított hálózati meghajtókat - a KVM zökkenőmentesebb hozzáférést kínál vendégeinek az összes összetett hardver- és hálózati profilhoz, amellyel találkozhatnak.

A modern CPU-tervekbe épített és a KVM-telepítésekhez szükséges hardver-virtualizációs kiterjesztések azt jelentik, hogy a KVM vendégei már a doboztól kezdve biztonságosan csak azokhoz a hardverforrásokhoz férhetnek hozzá, amelyekre szükségük van, anélkül, hogy aggódniuk kellene a nagyobb rendszer szivárgása miatt.

Hol illeszkedik a QEMU mindehhez? Amellett, hogy hipervizorként képes működni, a QEMU erőssége emulátor. A hipervizoros virtualizációs szerepében a KVM kihasználhatja a QEMU emulációs képességeit, hogy kiegészítse saját hardveres gyorsítási szolgáltatásait, emulált chipsettel és PCI busszal ajándékozva meg vendégeit. Az egész, mint mondják, nagyobb lehet, mint a részek összege.

A KVM gyakran nagyon sok kezelési funkciót a Libvirt nyújt. Ezért néha érdemes a KVM-mel kapcsolatos funkciókra, például a hálózatépítésre, a tárolásra és a fájlrendszer-elrendezésekre vonatkozó részletes információkra hivatkozni, amelyek a Teach Yourself Linux virtualizáció és magas rendelkezésre állás könyv ötödik fejezetében találhatók („Libvirt és kapcsolódó eszközök”). .

Telepítés

Minden más előtt meg kell győződnie arról, hogy a fizikai gép, amelyet KVM-állomásként kíván használni, támogatja a hardveres virtualizációt. A BIOS beállításain és a / proc / cpuinfo tartalmán kívül (amelyet az első fejezetben tárgyaltunk) ezt gyorsan ellenőrizheti egy futó Linux rendszerből is a kvm-ok használatával: $ kvm-ok

Célszerű megbizonyosodni arról is, hogy melyik hardverarchitektúrával - 64 vagy 32 bites - dolgozik: $ uname -m

De még akkor is, ha a hardverprofil megfelel a feladatnak, be kell engednie a Linux kerneljét a terveibe. Ha még nincsenek ott, akkor hozzá kell adnia a kvm és a kvm-intel vagy a kvm-amd kernelmodulokat. # Modprobe kvm-intel

Ha ezek a modulok nem töltődnek be (és nincs / dev / kvm eszköz a fájlrendszerben), akkor jó eséllyel a CPU egyszerűen nem felel meg a kívánt feladatnak. Ha azonban ez minden sikerült, akkor készen áll a qemu-kvm csomag (és ha szükséges, a libvirt, a virt-install és a bridge-utils telepítésére is).

Munka a KVM kezelőeszközökkel

Nem titok, hogy a virtualizációs platformok megérdemelt hírnévvel rendelkeznek bonyolultságuk miatt. Két dolog teheti azonban a KVM használatának megkezdését kissé kihívást jelentővé, mint néhányat:

  • Elég sok kezelési eszközkészlet áll rendelkezésre, amelyek mindegyike hasonló - de nem azonos - funkcionalitást kínál.
  • Csúnya szokásuk, hogy megváltoztatják a kulcs bináris fájljainak nevét attól függően, hogy melyik terjesztést és kiadást használják.

Az ötödik fejezetben bemutatom a Libvirt Tools és a vmbuilder programokat, de itt a KVM eszközkészletet tárgyaljuk.

Az új vendégek építése az úgynevezett „KVM” módszerrel kétlépcsős folyamat. Először a qemu-img használatával hozhat létre új képet - vagy módosíthat vagy konvertálhat egy régit. Ezután a qemu-kvm segítségével beállíthat egy virtuális gépet, amely elindítja a telepítést.

Csak azt mondtam, hogy „a qemu-kvm-et fogja használni ...” Én buta. A qemu-kvm régen beolvadt a qemu-ba, és helyébe a qemu-system-x86_64 lépett. Időközben egyes rendszerek kínálják a kvm-et burkolóként, amely végrehajtja a qemu-system-x86_64 -enable-kvm programot - bár nem szabad összetévesztenie a kvm burkolót a régi kvm binárissal, amely némileg más szintaxist használt.

Tehát nézzük meg, hogyan működik ez a két lépés. Létrehoz egy lemezképet a qemu-img segítségével (amelyet egyébként nagyon hatékonyan lehet használni más hipervizorok számára is), ahol a „my-disk” a létrehozni kívánt kép neve, a maximális méret A kép mérete 6 GB lesz, és a qcow2 a fájlformátum. A qcow egyébként a „QEMU Copy On Write” rövidítést jelenti.

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

A fájlformátum kiválasztása az Ön egyedi igényeitől függ. Ha nagyobb kompatibilitásra és rugalmasságra van szüksége - ideértve a kifinomult pillanatképek előállításának képességét is -, akkor valószínűleg a qcow2 lesz a legjobb választás.

A qcow lemezképformátum lehetővé teszi, hogy a lemezterület-kiosztás csak szükség szerint növekedjen, vagyis a helykihasználás mindig a lehető leghatékonyabb. A csak olvasható qcow-változások külön fájlba menthetők, amely belülről hivatkozik az eredeti képre. A qcow2 hozzáadta a lehetőséget több kép pillanatképének létrehozására.

Most már készen állunk a második lépésre. Így alakítjuk ki a virtuális gépünket:

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

Gyakran felbukkan egy új SDL ablak (bár nem feltétlenül minden terjesztés esetén), ahol befejezheti az operációs rendszer telepítési folyamatát. Az egér irányításának visszaszerzéséhez a Qemu terminálról meg kell nyomni a CTRL + ALT billentyűt.

Magyarázat: a „kvm” használatával (bár a verziójához szükséges pontos parancs eltérhet), új vendégünket „my-VM” -nek hívjuk, a my-disk.img fájlt hda-nak („merevlemez-meghajtó”) jelöljük meg. a ”), mutasson az operációs rendszer ISO helyére (ebben az esetben az Ubuntu 16.04 szerver), és állítsa 1024 MB-ot a virtuális gép számára lefoglalt maximális memóriának.

Alapértelmezés szerint a KVM konfigurálja a vendégét a felhasználói szintű hálózati kapcsolatokra (mintha a -netdev user, id = user.0 -device e1000, netdev = user.0 paraméterek lettek volna megadva). Ez biztosítja a vendég számára az IP-címet a KVM saját DHCP-szolgáltatásán keresztül, és hozzáférést biztosít a gazdagépéhez, az internethez és a LAN-alapú forrásokhoz. Noha az alapértelmezett konfiguráció egyszerű, egyes esetekben túlságosan korlátozó lehet, mivel gyakran vannak bizonyos teljesítmény- és szolgáltatáskorlátozások.

Ezek mellett parancssori jelzőkkel vezérelheti a különböző virtuális gépek konfigurációs paramétereit, beleértve:

  • Az -smp 2 két processzort biztosít („smp” = szimmetrikus multiprocesszor).
  • A -net argumentum (példa: -net nic, model = virtio, macaddr = 52: 54: 00: 05: 11: 11) hálózati kapcsolatot létesít vendége számára.
  • A hálózati hidat valamilyen hasonló módon hozhatja létre: -net bridge, vlan = 0, br = br0 - bár ehhez egy megfelelő -net definícióra lesz szükség a gazdagépen. A kettőt egy speciális „vlan” paraméter kapcsolja össze.
  • -balloon virtio lehetővé teszi számomra a vendég memóriájának bővítését vagy csökkentését anélkül, hogy újra kellene indítanom.
  • A -drive file = flag használatával további blokktároló eszközöket is meghatározhat. Érték hozzáadása a = = formátumhoz (például 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

On CentOS, you’ll need to create an ifcfg-br0 file in the /etc/sysconfig/network-scripts/ directory to look something like this:

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”

…And then add a line reading BRIDGE=br0 line to your primary network interface file (which will often be: /etc/sysconfig/network-scripts/ifcfg-eth0).

You will then stop and restart your network services (or reboot).

Looking for a solid introduction to Linux or AWS administration? Check out my Linux in Action and Learn Amazon Web Services in a Month of Lunches books and the Linux in Motion text-video hybrid course from Manning. Prefer your tech learning in video? I’ve got Linux administration courses at Pluralsight just waiting to be watched.