====== Utilisation de KVM pour la virtualisation ====== ''KVM'' (pour "Kernel-based Virtual Machine"), est une technologie de virtualisation Open Source integrée au noyau Linux. Cela permet de transformer une distribution Linux en hyperviseur de type 1 (système nu), offrant de meilleures performances et une compatibilité matérielle plus large que les hyperviseurs de type 2 (Virtualbox, Hyper-V...). Le logiciel QEMU, complémentaire à KVM, permet d'émuler différentes architectures processeur et ajoute des fonctions analogues à KVM. On nomme ce duo ''QEMU/KVM''. ===== Configuration des pré-requis ===== Lors de l'utilisation de KVM, il est fortement recommandé d'avoir une interface graphique sur sa machine, ou d'avoir des connaissances en affichage avec X11 (Server X Window). __Les bibliothèques à installer pour utiliser QEMU/KVM sont :__ * ''qemu-system'', ''libvirt-clients'', et ''libvirt-daemon-system'' pour la partie "système" * ''virt-manager'' pour l'interface d'administration des VM * ''virt-viewer'' pour l'affichage des VM Installer tout d'un coup avec cette commande : apt-get install qemu-system libvirt-clients libvirt-daemon-system virt-manager virt-viewer Et ajouter les futurs utilisateurs de KVM au groupe ''libvirt'' (remplacer //admlnx// par un utilisateur à ajouter au groupe) : adduser admlnx libvirt ===== Prise en main de KVM ===== KVM s'administre avec l'utilitaire ''virsh''. C'est lui qui permettra la gestion des machines virtuelles. On peut aussi se servir de ''virt-manager'' comme interface graphique mais elle n'est pas aussi complète. Les machines virtuelles dans KVM sont appelées "Domaines". Tout d'abord, on peut vérifier la configuration matérielle de l'hyperviseur (processeur & mémoire), avec : virsh nodeinfo Ensuite voici la commande qui permet de lister tous les domaines : virsh list --all {{ ::2020-09-28_18_04_11-debian_kvm_-_vmware_workstation.png?400 |Lister les VM}} Ici, c'est tout simplement vide car il n'y a encore aucune machine virtuelle de créée ! Pour n'afficher que les VM actives, il suffit de retirer l'argument ''--all''. __Les commandes de base pour gérer les domaines sont :__ * ''virsh start //domaine//'' : démarrer une machine virtuelle existante (remplacer //domaine// par le nom de la machine virtuelle à démarrer) * ''virsh shutdown //domaine//'' : arrêter une machine virtuelle proprement (envoi du signal d'extinction) * ''virsh destroy //domaine//'' : éteindre une machine virtuelle brutalement (comme si on coupait l'alimentation) * ''virsh undefine //domaine//'' : supprimer une machine virtuelle (ne supprime pas le disque dur virtuel, il faut le supprimer manuellement dans ''/var/lib/libvirt/images'') * ''virsh dominfo //domaine//'' : afficher des informations sur une machine virtuelle existante La commande ''virsh help'' permet de lister les commandes utilisables dans virsh. ===== Création d'une machine virtuelle ===== Lorsque l'on souhaite créer un nouveau domaine dans KVM, on utilise le script ''virt-install''. Pour cela, il faut générer un fichier de configuration décrivant la machine virtuelle à générer avec différents paramètres (hardware, disque de boot...). Par exemple, la commande suivante permet de générer un domaine qui sera nommé "Win10" de type Windows 10, avec un disque dur virtuel de 40Gb, 4096Mb de mémoire, 1 CPU virtuel, ainsi qu'avec le fichier ''/home/admlnx/ISO/Win10.iso'' en tant que CD-ROM. virt-install --virt-type kvm --name Win10 \ --description "VM de Test" \ --cdrom "/home/admlnx/ISO/Win10.iso" \ --os-variant win10 \ --disk size=40 --memory 4096 --vcpu 1 A la place de ''- -cdrom'', on peut demander à KVM de télécharger directement le disque sur lequel le système devra démarrer depuis Internet : --location http://deb.debian.org/debian/dists/buster/main/installer-amd64/ \ On peut aussi désactiver l'interface graphique d'un domaine en précisant une console texte qui lui sera associée (pratique si on a aucune interface graphique sur l'hyperviseur ou pour les VM Linux). Il faudra obligatoirement utiliser l'option ''- - location'' à la place de ''- -cdrom'' et préciser la console série virtuelle à utiliser : virt-install --virt-type kvm --name Debian10 \ --location "/home/admlnx/ISO/deb10.iso" \ --os-variant debian10 \ --disk size=10 --memory 1024 \ --graphics none \ --extra-args console=ttyS0 Ci-dessus, on demande à KVM de lier la VM au terminal série ''ttyS0'' sur la machine physique. Au premier lancement de la VM la console devrait s'ouvrir, pour la fermer faîtes ''CTRL+]'' (//^]//). Pour se reconnecter à la console de la VM, on utilise la commande ''virsh console //X//'' où //X// correspond à un numéro de console, par défaut 1 pour la première. :!: Via SSH il est possible que le combo de touches ''CTRL+]'' ne fonctionne pas. Il faut donc fermer la connexion puis la réouvrir pour revenir au shell de l'hyperviseur. virsh console 1 Ce qui permet d'afficher la console de ma VM debian, pour effectuer l'installation du système : {{ ::2020-09-28_23_22_59-debian_kvm_-_vmware_workstation.png?700 |Installation de debian}} ===== Configuration du réseau pour les VM ===== Tout d'abord, il faut commencer par activer les fonctions réseau par défaut pour les domaines KVM : virsh net-start default Pour que cela démarre tout seul au lancement de KVM, il suffit de faire ceci : virsh net-autostart default Par défaut le réseau des VM est natté, c'est à dire qu'une adresse IP hors réseau local est attribuée par KVM aux domaines et qu'une translation d'adresse opère sur l'hyperviseur pour connecter les VM à Internet. Mais le mieux est d'utiliser la méthode d'accès par pont, qui permet de connecter directement les domaines au réseau local de l'hyperviseur. Pour passer un domaine en "Accès par pont", il faut d'abord créer un pont avec la carte réseau physique de l'hyperviseur. Ensuite on modifiera la configuration de la VM afin de lui indiquer la méthode d'accès au réseau à utiliser. On aura besoin pour cette manipulation du paquet ''bridge-utils''. Déja, créer le pont et y ajouter l'interface physique que l'on souhaite utiliser : brctl addbr br0 brctl addif br0 ens33 Ci-dessus, //br0// est le nom du pont créé et //ens33// celui de la carte réseau physique de l'hyperviseur. Une fois le pont créé, il faut aller dans la configuration réseau de l'hyperviseur et le paramétrer comme une carte réseau normale (avec une IP dynamique ou non) : {{ ::2020-09-29_10_51_45-debian_kvm_-_vmware_workstation.png?300 |Configuration réseau du pont}} Puis on relance le service réseau de la machine hôte : service networking restart Et on modifie alors la configuration du domaine que l'on souhaite "ponter" comme ceci : virsh edit debian10 :!: La commande ci-dessus permet de modifier le fichier de configuration d'une VM, où //debian10// est à remplacer par le nom de la VM à configurer. Au premier lancement de la commande, il se peut qu'il soit nécessaire de sélectionner un éditeur de texte, dans le cas où plusieurs seraient installés sur l'hôte. :!: S'assurer que le domaine en cours de réglage est arrêté, avant de modifier son fichier de configuration, c'est mieux ! Dans le fichier de configuration, trouver la partie "réseau" qui doit commencer par //// par défaut. Remplacer ''type='network' '' par ''type='bridge' '' et '''' par '''' comme ceci : {{ ::2020-09-25_18_37_36-debian_kvm_-_vmware_workstation.png?600 |Configuration du domaine pour l'accès au réseau local par le pont br0}} Enfin enregistrer et démarrer le domaine concerné afin de vérifier si cela fonctionne avec ''ip a'' : {{ ::2020-09-29_11_05_36-debian_kvm_-_vmware_workstation.png?750 |Accès par pont fonctionnel}} On constate sur l'exemple au dessus que la VM a pris l'adresse IP //192.168.1.64// sur le même réseau que l'hyperviseur (//192.168.1.60//) à la place de l'adresse //192.168.122.X// attribuée par l'hyperviseur lui-même. C'est fonctionnel ! ===== Ajout d'un disque virtuel à un domaine =====