Configuration de Libvirt Qemu et KVM Stack sur Debian

Configuration de Libvirt Qemu et KVM Stack sur Debian
La virtualisation basée sur Qemu-KVM est au cœur de la pile de virtualisation basée sur Linux. Il est gratuit et open source et est l'une des technologies de virtualisation les plus répandues de l'industrie. La plupart des fournisseurs de services cloud utilisent KVM et pour une bonne raison. Il offre une pile de virtualisation très efficace et pourtant très sécurisée et il n'y a pas de licence compliqué. Ce n'est pas le cas avec votre configuration typique de Hyper-V ou VMware. Le compromis, cependant, est que la configuration peut être très complexe, en particulier pour les utilisateurs inexpérimentés. Cet article est destiné à réduire cette complexité pour le lecteur.

Cela dit, essayons de configurer notre propre hyperviseur KVM sur un serveur Debian 9 .

Activer les extensions VT-X ou AMD-V

Idéalement, vous aurez besoin d'une installation propre de votre distribution Linux préférée sur une machine (pas une machine virtuelle) qui a un CPU assez moderne. La plupart des processeurs Intel modernes prennent en charge les extensions VT-X et, de même, AMD a ses extensions AMD-V. Ces extensions sont des «améliorations» construites directement dans le silicium de votre processeur qui permet une virtualisation plus rapide et plus sécurisée. Vous devez activer ces extensions de l'intérieur du menu BIOS / UEFI de votre carte mère. Reportez-vous à votre manuel de carte mère pour plus d'informations.

Si vous ne voulez pas soulever votre poste de travail Linux parfaitement fonctionnel, vous pouvez utiliser une machine virtuelle dans le cloud pour exécuter ces expériences. DigitalOcean, par exemple, propose des machines virtuelles qui ont activé la virtualisation imbriquée. Cela vous permet d'exécuter des machines virtuelles à l'intérieur de votre machine virtuelle hébergée par le cloud (ceci est connu sous le nom de virtualisation imbriquée). De toute évidence, ce sera un moyen très inefficace de gérer pratiquement un hyperviseur, mais en tant qu'expérience, cela fera très bien. Assurez-vous d'obtenir au moins 4 Go de mémoire et plus de 2 CPU.

Une fois que vous avez activé lesdites extensions, vous pouvez vérifier cela en exécutant LSCPU et en recherchant l'entrée de virtualisation:

$ LSCPU
… .
Virtualisation: VT-X
… .

Maintenant que nous avons le temps pour les extensions de monter plus loin dans la pile.

Installation de KVM et QEMU

KVM (ou machine virtuelle basée sur le noyau) se compose de quelques modules de noyau Linux qui profiteront des extensions du CPU que nous avons activées plus tôt. Qemu, d'autre part, se compose d'un tas de programmes d'utilisateur qui nous offre des capacités d'émulation. En tant que logiciel autonome, Qemu peut être utilisé pour exécuter des programmes à partir d'une architecture, comme ARM, sur un autre comme x86_64 et vice versa. Il peut être utilisé pour exécuter n'importe quoi d'un seul fichier binaire à un système d'exploitation complet.

Nous allons bien sûr l'utiliser uniquement pour virtualiser les systèmes d'exploitation x86_64 sur la plate-forme x86_64. Et pour cela, nous avons besoin d'un seul package:

$ sudo apt installer qemu-kvm

Vous pouvez vérifier que le package a chargé tous les modules requis, en exécutant:

$ lsmod | grep kvm
kvm_intel 200704 0
KVM 598016 1 KVM_INTEL
IrqByPass 16384 1 kvm

C'est tout ce dont vous avez besoin, théoriquement. Mais vous vous rendrez bientôt compte que c'est pratique. Les machines virtuelles sont extrêmement complexes et nous avons besoin de l'emballage logiciel pour gérer toutes les différentes demandes comme le réseautage, la gestion du système de fichiers, etc. d'une manière assez automatisée (et évolutive). Pour ce faire, nous avons besoin de LibVirt Virtualization Library / Daemon.

Installation de libvirt

Libvirt est une partie par excellence de votre pile de virtualisation. Le démon LibVirtd gère des services liés à la virtualisation en arrière-plan. Services qui écoutent des demandes comme «Créer une machine virtuelle», «Détruisez une machine virtuelle», «Créer un réseau», etc. et les exécute en utilisant les utilitaires Linux de base comme les binaires Qemu, les iptables, etc.

LibVirt est très généralisé et peut être utilisé pour gérer les invités KVM, les conteneurs LXC et la pile de virtualisation Xen. Nous nous concentrerons uniquement sur LibVirt pour les invités KVM pour l'instant. LibVirtd expose une API qui peut être consommée par des applications GUI comme Virt-Manager ou OVIRT ou des outils de ligne de commande comme Virgin-install, VIRSH, etc. Nous pouvons écrire même nos propres clients personnalisés qui utilisent la même API standard. Nous utiliserons les outils de ligne de commande, comme VIRSH et Virt-install, afin de garder les choses standardisées.

Installons tous ces outils:

$ apt install libvirt-clienties libvirt-daemon-system virtinst

Nous aurons également besoin d'un autre package LibGuestfs-Tools, pour nous aider à éditer ou à modifier les disques durs et les systèmes de fichiers de VM invité.

Super! Maintenant, nous avons installé toute la pile et savons comment l'architecture est présentée. Pour utiliser libvirt (et outils connexes), ajoutez votre utilisateur aux groupes libvirt-qemu et libvirt.

$ sudo usermod -ag libvirt
$ sudo usermod -ag libvirt-qemu

Ou exécutez les commandes en tant qu'utilisateur racine.

VIRSH et démarrage du réseau par défaut

L'utilitaire de ligne de commande VIRSH est quelque chose que vous utiliserez beaucoup, lorsque vous gérez vos machines virtuelles. Vous pouvez simplement taper VIRSH et tomber dans l'interface de ligne de commande VIRSH, ou taper VIRSH [Options] de votre coquille ordinaire. Passez la sortie de l'aide de VIRSH chaque fois que vous êtes coincé avec une opération liée à VM.

La première commande VIRSH que nous utiliserons invoquera le réseau par défaut auquel une machine virtuelle peut se connecter:

$ VIRSH NET-AUTOSTOSTART par défaut
$ VIRSH NET-START DEAUT

Cela démarrera le réseau par défaut et s'assurera qu'il est démarré automatiquement lorsque l'hôte redémarre. Pour vérifier les détails de ce réseau par défaut, utilisez la commande:

$ VIRSH Net-Dumpxml par défaut

défaut
3D723DC6-49A4-4F73-BF6D-623D6B46B099












Le fichier XML peut vous montrer la gamme des adresses IP possibles et la façon dont ils communiqueront avec le monde extérieur. Fondamentalement, le trafic leur reviendra via un NAT et ils ne feront pas partie du réseau externe de votre hôte. Vous pouvez utiliser le réseautage de ponts pour exposer chaque machine virtuelle au LAN de la machine hôte.

Pour démarrer une machine virtuelle

Pour démarrer une machine virtuelle, nous avons besoin d'un support d'installation (comme l'ISO d'installation pour tout système d'exploitation) et du nombre de processeurs et de la quantité de mémoire à allouer à la machine virtuelle, et si elle a besoin de VNC. Cette étape est l'endroit où vous pouvez vraiment apprécier un installateur d'interface graphique comme Virt-Manager, cependant, nous le ferons en utilisant une commande Virgin-install assez complexe.

J'aime garder tous mes supports de démarrage à / var / lib / libvirt / bott et toutes les machines virtuelles et leur disque dur virtuel à / var / lib / libvirt / images (l'emplacement par défaut) Cela simplifie l'organisation.

$ cd / var / lib / libvirt / bott
$ wget http: //.ubuntu.com / 18.04.2 / Ubuntu-18.04.2-desktop-amd64.ISO

La commande ci-dessus récupère Ubuntu Desktop ISO, vous pouvez tout aussi facilement obtenir Centos ou toute autre distribution que vous désirez.

Pour créer une nouvelle machine virtuelle et pour le démarrer:

$ Virt-install - Virt-Type KVM \
--Nom Myvm \
--mémoire 2048 --vcpus = 2 \
--CDROM / VAR / LIB / LIBVIRT / BOOT / UBUNTU-18.04.2-desktop-amd64.ISO \
--Taille du disque = 40 \
--graphiques vnc, écouter = 0.0.0.0, port = 5900 \
--noautoconsole

La commande ci-dessus est, en effet, compliquée. Je suggère d'enregistrer ces commandes dans des fichiers texte et de les exécuter en tant que scripts exécutables chaque fois que vous créez une nouvelle machine virtuelle. La plupart des paramètres comme Virt-Type et Virt-Name sont assez explicites. Ils sont juste fastidieux d'écrire.

La dernière option pour l'écran VNC démarrera un serveur VNC et vous permettrait d'avoir un accès à la console à votre machine virtuelle à distance, en vous connectant au port de l'hôte 5900. Ouvrez un client VNC sur votre bureau et accédez à IP de votre hôte KVM au port 5900. Assurez-vous d'atteindre l'IP de l'hôte et non l'IP de la machine virtuelle. Votre VNC se connectera à la sortie vidéo de votre machine virtuelle et vous pouvez procéder à l'installation.

Où ensuite?

À partir de là, vous pouvez essayer de faire une pause, d'arrêter et de supprimer les VM. Vous pouvez également modifier l'infrastructure sous-jacente en ajoutant des pools pour le stockage et la configuration des réseaux de ponts. Tous les fichiers de configuration, pour les machines virtuelles individuelles, les interfaces réseau et les pools de stockage sont stockées sur / etc / libvirt / et / etc / libvirt / qemu.

Parfois, vous devrez supprimer physiquement les fichiers de disque dur enregistrés à / lib / libvirt / images même après avoir retiré la machine virtuelle de libvirt. Pour automatiser davantage les choses, essayez d'importer des images QCOW2 que la plupart des distributions Linux comme Ubuntu et Centos. Ceux-ci ont le système d'exploitation préinstallé en eux.

Conclusion

La configuration de ceci n'est pas aussi simple que la configuration de VirtualBox et la raison derrière cela est le collecteur. La plupart de la pile est compliquée car elle est conçue pour être modulaire et très évolutive. Il ne fait aucune hypothèse quant à l'endroit où vous exécutez la machine virtuelle. L'environnement peut être un bureau personnel ou un centre de données. Travailler avec une interface graphique peut aider à réduire cette complexité dans une certaine mesure. Cependant, ces systèmes sont conçus pour fonctionner avec une API REST pour se connecter aux systèmes de facturation de votre organisation, aux systèmes de surveillance, etc. Ils ne sont presque jamais touchés par un humain après avoir été déployé.

Cela dit, l'automatisation est le nom du jeu avec libvirt et qemu-kvm. Parcourez la documentation officielle et écrivez votre propre script cool pour faire tourner une flotte de machines virtuelles et faites-nous savoir si vous avez trouvé ce tutoriel utile.