AWS kündigte einen Wechsel von Xen zu KVM an. Was ist KVM?

In einer AWS-Ankündigung über einen neuen EC2-High-End-Instanztyp (C5) ist ein starker Hinweis darauf enthalten, dass der Cloud-Computing-Riese von Amazon damit begonnen hat, seine hunderttausenden physischen Server von dem Open-Source-Xen-Hypervisor zu entfernen, auf dem sie ausgeführt werden Nun zur Open-Source-Alternative KVM.

Unabhängig davon, ob Sie Ihre Karriere und / oder Ihre Hypothek tief in die Zukunft von Xen investiert haben oder ob Sie nie gewusst haben, dass es sie gibt, könnten Sie daran interessiert sein, mehr über KVM zu erfahren. Hier ist eine allgemeine Einführung aus meinem Buch Teach Yourself Linux Virtualization and High Availability: Bereiten Sie sich auf die LPIC-3 304-Zertifizierungsprüfung vor.

Benötigen Sie weitere grundlegende Hintergrundinformationen zu Linux-Servern oder AWS? Mein Linux in Aktion und das Erlernen von Amazon Web Services in einem Monat des Mittagessens Bücher von Manning könnten hilfreich sein, zusammen mit meinen Linux-Serververwaltungskursen bei Pluralsight. Es gibt auch einen Hybridkurs namens Linux in Motion, der aus mehr als zwei Stunden Video und rund 40% des Textes von Linux in Action besteht.

KVM

KVM (Kernel-basierte virtuelle Maschine) ist wie Xen eine Open-Source-Hypervisor-Technologie zur Virtualisierung der Computerinfrastruktur, die auf x86-kompatibler Hardware ausgeführt wird. Ebenso wie Xen verfügt KVM sowohl über eine aktive Benutzergemeinschaft als auch über wichtige Unternehmensbereitstellungen.

Ein KVM-Host läuft tatsächlich auf dem Linux-Kernel zusammen mit zwei KVM-Kernelmodulen (dem kvm.ko-Modul und entweder kvm-intel.ko oder kvm-amd.ko). Durch die enge Kernel-Integration - einschließlich der von Virtio bereitgestellten E / A-Konnektivität mit Kernelblock- und Netzwerktreibern - kann KVM seinen Gästen einen nahtloseren Zugriff auf alle komplexen Hardware- und Netzwerkprofile bieten, auf die sie möglicherweise stoßen.

Durch Hardware-Virtualisierungserweiterungen, die in moderne CPU-Designs integriert sind und für KVM-Bereitstellungen erforderlich sind, können KVM-Gäste sofort sicher auf nur die Hardware-Ressourcen zugreifen, die sie benötigen, ohne sich um den Verlust des größeren Systems sorgen zu müssen.

Wo genau passt QEMU dazu? QEMU kann nicht nur als Hypervisor fungieren, sondern auch als Emulator. KVM kann in seiner Rolle als Hypervisor-Virtualisierung die Emulationsleistung von QEMU nutzen, um seine eigenen Hardwarebeschleunigungsfunktionen zu ergänzen und seinen Gästen einen emulierten Chipsatz und einen PCI-Bus zu präsentieren. Das Ganze kann, wie sie sagen, größer sein als die Summe seiner Teile.

Viele Verwaltungsfunktionen für KVM werden häufig von Libvirt bereitgestellt. Daher möchten Sie manchmal auf die detaillierten Informationen zu KVM-bezogenen Funktionen wie Netzwerk-, Speicher- und Dateisystemlayouts verweisen, die im fünften Kapitel des Buches Teach Yourself Linux Virtualization and High Availability („Libvirt und verwandte Tools“) enthalten sind. .

Installation

Vor allem müssen Sie sicherstellen, dass die physische Maschine, die Sie als KVM-Host verwenden möchten, die Hardwarevirtualisierung unterstützt. Neben der BIOS-Einstellung und dem Inhalt von / proc / cpuinfo (den wir in Kapitel 1 besprochen haben) können Sie dies auch schnell von einem laufenden Linux-System mit kvm-ok: $ kvm-ok überprüfen

Es ist auch eine gute Idee, sicherzustellen, mit welcher Hardwarearchitektur - 64 oder 32-Bit - Sie arbeiten: $ uname -m

Aber selbst wenn Ihr Hardwareprofil der Aufgabe gewachsen ist, müssen Sie den Linux-Kernel in Ihre Pläne einbeziehen. Wenn sie noch nicht vorhanden sind, sollten Sie die Kernelmodule kvm und kvm-intel oder kvm-amd hinzufügen. # Modprobe kvm-intel

Wenn diese Module nicht geladen werden können (und es kein / dev / kvm-Gerät im Dateisystem gibt), besteht eine gute Chance, dass Ihre CPU einfach nicht dem Job entspricht, den Sie möchten. Wenn alles geklappt hat, können Sie das qemu-kvm-Paket (und ggf. auch libvirt, virt-install und bridge-utils) installieren.

Arbeiten mit KVM Management Tools

Es ist kein Geheimnis, dass Virtualisierungsplattformen den wohlverdienten Ruf haben, kompliziert zu sein. Es gibt jedoch zwei Dinge, die den Einstieg in KVM etwas schwieriger machen können als einige der anderen:

  • Es stehen einige Management-Toolkits zur Verfügung, die ähnliche, aber nicht identische Funktionen bieten.
  • Sie haben die unangenehme Angewohnheit, die für die Schlüsselbinärdateien verwendeten Namen zu ändern, je nachdem, welche Distribution und Version Sie verwenden.

Ich werde Ihnen in Kapitel 5 Libvirt Tools und vmbuilder vorstellen, aber hier werden wir das KVM-Toolkit diskutieren.

Das Bauen neuer Gäste auf die sogenannte „KVM“ -Methode erfolgt in zwei Schritten. Zuerst erstellen Sie mit qemu-img ein neues Bild - oder ändern oder konvertieren ein altes. Anschließend richten Sie mit qemu-kvm eine virtuelle Maschine ein, mit der die Installation gestartet wird.

Habe ich gerade gesagt "Sie werden qemu-kvm verwenden ..."? Wie dumm von mir. qemu-kvm wurde vor langer Zeit in qemu zusammengeführt und durch qemu-system-x86_64 ersetzt. In der Zwischenzeit bieten einige Systeme kvm als Wrapper an, der qemu-system-x86_64 -enable-kvm ausführt - obwohl Sie den kvm-Wrapper nicht mit der alten kvm-Binärdatei verwechseln sollten, die eine etwas andere Syntax verwendet.

Lassen Sie uns sehen, wie diese beiden Schritte funktionieren. Sie erstellen ein Disk-Image mit qemu-img (das übrigens auch für andere Hypervisoren sehr effektiv verwendet werden kann), wobei "my-disk" der Name des Images ist, das Sie erstellen möchten, die maximale Größe des Bildes wird 6 GB sein, und qcow2 ist das Dateiformat. qcow steht übrigens für "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

Die Auswahl eines Dateiformats hängt von Ihren spezifischen Anforderungen ab. Wenn Sie mehr Kompatibilität und Flexibilität benötigen - einschließlich der Möglichkeit, anspruchsvolle Schnappschüsse zu erstellen -, ist qcow2 wahrscheinlich die beste Wahl.

Das qcow-Disk-Image-Format ermöglicht, dass die Speicherplatzzuweisung nur nach Bedarf wächst, sodass die Speicherplatznutzung immer so effizient wie möglich ist. Änderungen an einem schreibgeschützten qcow-Bild können in einer separaten Datei gespeichert werden, die intern auf das Originalbild verweist. qcow2 hat die Möglichkeit hinzugefügt, mehrere Bildschnappschüsse zu erstellen.

Wir sind jetzt bereit für Schritt zwei. So erstellen wir unsere 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

Oft wird ein neues SDL-Fenster angezeigt (obwohl dies nicht unbedingt für alle Distributionen erforderlich ist), in dem Sie den Installationsprozess des Betriebssystems abschließen können. Um die Kontrolle über Ihre Maus vom Qemu-Terminal aus wiederzuerlangen, müssen Sie STRG + ALT drücken.

Zur Erklärung: Wenn Sie "kvm" verwenden (obwohl der genaue Befehl, den Sie für Ihre Version benötigen, abweichen kann), nennen wir unseren neuen Gast "my-VM" und bezeichnen die Datei "my-disk.img" als "hda" ("Festplatte") a ”), zeigen Sie auf den Speicherort des Betriebssystems ISO (in diesem Fall Ubuntu 16.04-Server) und legen Sie 1024 MB als maximalen Speicher fest, der der VM zugewiesen ist.

Standardmäßig konfiguriert KVM Ihren Gast für Netzwerke auf Benutzerebene (als ob die Parameter -netdev user, id = user.0 -device e1000, netdev = user.0 angegeben würden). Dadurch erhält der Gast eine IP-Adresse über den KVM-eigenen DHCP-Dienst und Zugriff auf Ihren Host, das Internet und LAN-basierte Ressourcen. Obwohl die Standardkonfiguration einfach ist, kann sie in einigen Szenarien zu restriktiv sein, da häufig Leistungs- und Funktionseinschränkungen bestehen.

Besides these, you can use command line flags to control various VM configuration parameters, including:

  • -smp 2 provides two processors (“smp” = symmetric multiprocessing).
  • The -net argument (example: -net nic,model=virtio,macaddr =52:54:00:05:11:11) establishes a network connection for your guest.
  • You can provision a network bridge using something like -net bridge,vlan=0,br=br0 — although this will require a matching -net definition on the host. The two are connected through a special “vlan” parameter.
  • -balloon virtio will allow me to expand or reduce a guest’s memory size without having to reboot it.
  • You can also use the -drive file= flag to define additional block storage devices. Adding a value for format= (qcow2, for instance).

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.