AWS a annoncé un passage de Xen vers KVM. Alors, qu'est-ce que KVM?

Liée à une annonce AWS concernant un nouveau type d'instance EC2 haut de gamme (le C5), il est fortement suggéré que le géant du cloud computing d'Amazon a commencé à déplacer ses centaines de milliers de serveurs physiques loin de l'hyperviseur open source Xen qui les exécute jusqu'à maintenant, à l'alternative open source, KVM.

Que vous ayez investi profondément votre carrière et / ou votre prêt hypothécaire dans l'avenir de Xen ou que vous n'ayez jamais su qu'il existait, vous pourriez être intéressé à en savoir plus sur KVM. Voici donc une introduction générale adaptée de mon livre, Teach Yourself Linux Virtualization and High Availability: préparez-vous à l'examen de certification LPIC-3 304.

Besoin de connaissances plus basiques sur les serveurs Linux ou AWS? Mes livres Linux en action et Learn Amazon Web Services en un mois de déjeuners de Manning pourraient vous aider, ainsi que mes cours d'administration de serveurs Linux à Pluralsight. Il existe également un cours hybride appelé Linux in Motion, composé de plus de deux heures de vidéo et d'environ 40% du texte de Linux in Action.

KVM

Comme Xen, KVM (Kernel-based Virtual Machine) est une technologie d'hyperviseur open source pour virtualiser l'infrastructure de calcul exécutée sur du matériel compatible x86. Tout comme Xen, KVM possède à la fois une communauté d'utilisateurs active et des déploiements d'entreprise importants.

Un hôte KVM fonctionne en fait sur le noyau Linux avec deux modules de noyau KVM (le module kvm.ko et kvm-intel.ko ou kvm-amd.ko). Grâce à son intégration étroite au noyau - y compris la connectivité E / S avec le bloc de noyau et les pilotes réseau fournis par Virtio - KVM peut offrir à ses clients un accès plus transparent à tous les profils matériels et réseau complexes qu'ils pourraient rencontrer.

Les extensions de virtualisation matérielle intégrées aux conceptions de processeurs modernes et requises pour les déploiements KVM signifient que, dès la sortie de la boîte, les invités KVM peuvent accéder en toute sécurité uniquement aux ressources matérielles dont ils ont besoin sans avoir à se soucier des fuites vers le système plus grand.

Où se situe exactement QEMU dans tout cela? En plus de pouvoir agir comme un hyperviseur, la force de QEMU est en tant qu'émulateur. KVM, dans son rôle de virtualisation d'hyperviseur, peut s'appuyer sur les pouvoirs d'émulation de QEMU pour compléter ses propres fonctionnalités d'accélération matérielle, présentant à ses invités un chipset émulé et un bus PCI. Le tout, comme on dit, peut être supérieur à la somme de ses parties.

De nombreuses fonctionnalités de gestion pour KVM sont souvent fournies par Libvirt. Par conséquent, vous voudrez peut-être parfois consulter les informations détaillées sur les fonctionnalités liées au KVM telles que la mise en réseau, le stockage et les dispositions de système de fichiers qui se trouvent dans le cinquième chapitre du livre Teach Yourself Linux Virtualization and High Availability («Libvirt and Related Tools») .

Installation

Avant toute chose, vous devez vous assurer que la machine physique que vous prévoyez d'utiliser comme hôte KVM prend en charge la virtualisation matérielle. Outre le réglage du BIOS et le contenu de / proc / cpuinfo (dont nous avons discuté au chapitre un), vous pouvez également le vérifier rapidement à partir d'un système Linux en cours d'exécution en utilisant kvm-ok: $ kvm-ok

C'est aussi une bonne idée de savoir avec quelle architecture matérielle - 64 ou 32 bits - vous travaillez: $ uname -m

Mais même si votre profil matériel est à la hauteur de la tâche, vous devrez laisser le noyau Linux participer à vos projets. S'ils ne sont pas déjà là, vous devez ajouter les modules kvm et kvm-intel ou kvm-amd. # Modprobe kvm-intel

Si ces modules échouent à se charger (et qu'il n'y a pas de périphérique / dev / kvm dans le système de fichiers), il y a de fortes chances que votre CPU ne soit tout simplement pas à la hauteur du travail que vous souhaitez qu'il fasse. Cependant, si tout cela a fonctionné, vous êtes prêt à installer le paquet qemu-kvm (et, si nécessaire, libvirt, virt-install et bridge-utils également).

Utilisation des outils de gestion KVM

Ce n'est un secret pour personne que les plates-formes de virtualisation ont la réputation bien méritée d'être compliquées. Mais il y a deux choses qui peuvent rendre la mise en route de KVM un peu plus difficile que certaines des autres:

  • Il existe un certain nombre de boîtes à outils de gestion disponibles, chacune offrant des fonctionnalités similaires, mais pas identiques.
  • Ils ont la mauvaise habitude de changer les noms utilisés pour les binaires clés en fonction de la distribution et de la version que vous utilisez.

Je vais vous présenter les outils Libvirt et vmbuilder au chapitre cinq, mais ici, nous discuterons du kit d'outils KVM.

Créer de nouveaux invités en utilisant ce que nous appellerons la méthode «KVM» est un processus en deux étapes. Tout d'abord, vous utiliserez qemu-img pour créer une nouvelle image - ou modifier ou convertir une ancienne. Ensuite, vous utiliserez qemu-kvm pour configurer une machine virtuelle qui démarrera l'installation.

Est-ce que je viens de dire «vous utiliserez qemu-kvm…»? Que je suis bête. qemu-kvm a été fusionné dans qemu il y a longtemps et a été remplacé par qemu-system-x86_64. En attendant, certains systèmes vous proposent kvm comme wrapper qui exécute qemu-system-x86_64 -enable-kvm - bien que vous ne devriez pas confondre le wrapper kvm avec l'ancien binaire kvm qui utilisait une syntaxe quelque peu différente.

Voyons donc comment fonctionnent ces deux étapes. Vous créez une image disque avec qemu-img (qui, d'ailleurs, peut être utilisée très efficacement pour d'autres hyperviseurs également), où «my-disk» est le nom de l'image que vous souhaitez créer, la taille maximale de l'image sera de 6 Go et qcow2 est le format de fichier. qcow, en passant, signifie «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

Le choix d'un format de fichier dépendra de vos besoins spécifiques. Si vous avez besoin d'une plus grande compatibilité et flexibilité - y compris la possibilité de générer des instantanés sophistiqués - alors qcow2 sera probablement votre meilleur choix.

Le format d'image disque qcow permet à l'allocation d'espace disque d'augmenter uniquement si nécessaire, ce qui signifie que l'utilisation de l'espace est toujours aussi efficace que possible. Les modifications apportées à une image en lecture seule qcow peuvent être enregistrées dans un fichier séparé, qui fait référence en interne à l'image d'origine. qcow2 a ajouté la possibilité de créer plusieurs instantanés d'image.

Nous sommes maintenant prêts pour la deuxième étape. Voici comment nous allons créer notre 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

Une nouvelle fenêtre SDL apparaîtra souvent (mais pas nécessairement pour toutes les distributions) où vous pourrez terminer le processus d'installation du système d'exploitation. Reprendre le contrôle de votre souris depuis le terminal Qemu nécessite d'appuyer sur CTRL + ALT.

Pour expliquer: en utilisant «kvm» (bien que la commande précise dont vous aurez besoin pour votre version puisse différer), nous appellerons notre nouvel invité «my-VM», désignons le fichier my-disk.img comme hda («disque dur a ”), pointez sur l'emplacement du système d'exploitation ISO (serveur Ubuntu 16.04, dans ce cas) et définissez 1024 Mo comme mémoire maximale allouée à la machine virtuelle.

Par défaut, KVM configurera votre invité pour la mise en réseau au niveau utilisateur (comme si les paramètres -netdev user, id = user.0 -device e1000, netdev = user.0 étaient spécifiés). Cela fournira à l'invité une adresse IP via le propre service DHCP de KVM et l'accès à votre hôte, à Internet et aux ressources basées sur le LAN. Bien que la configuration par défaut soit simple, elle peut être trop restrictive pour certains scénarios, car il existe souvent des limitations de performances et de fonctionnalités.

Outre ceux-ci, vous pouvez utiliser des indicateurs de ligne de commande pour contrôler divers paramètres de configuration de VM, notamment:

  • -smp 2 fournit deux processeurs («smp» = multitraitement symétrique).
  • L'argument -net (exemple: -net nic, model = virtio, macaddr = 52: 54: 00: 05: 11: 11) établit une connexion réseau pour votre invité.
  • Vous pouvez provisionner un pont réseau en utilisant quelque chose comme -net bridge, vlan = 0, br = br0 - bien que cela nécessite une définition -net correspondante sur l'hôte. Les deux sont connectés via un paramètre spécial «vlan».
  • -balloon virtio me permettra d'étendre ou de réduire la taille de la mémoire d'un invité sans avoir à le redémarrer.
  • Vous pouvez également utiliser l'indicateur -drive file = pour définir des périphériques de stockage de blocs supplémentaires. Ajout d'une valeur pour format = (qcow2, par exemple).

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.