Comment créer et gérer des machines virtuelles KVM à partir de l’interface de ligne de commande
Objectif
Découvrez comment créer et gérer des machines virtuelles KVM à partir de la ligne de commande
Système d’exploitation et versions logicielles
- Système d’exploitation : – Toutes les distributions Linux
Exigences
- Accès root
Paquets:
- qemu-kvm – Le paquet principal
- libvirt – Inclut le serveur libvirtd qui exporte la prise en charge de la virtualisation
- libvirt-client – Ce paquet contient
virshet d’autres utilitaires côté client - virt-install – Utilitaire pour installer des machines virtuelles
- virt-viewer – Utilitaire pour afficher la console graphique d’une machine virtuelle
Difficulté
DOULEUR MOYENNE
Conventions
- # – nécessite que les commandes Linux données soient exécutées avec les privilèges root, soit
directement en tant qu’utilisateur root, soit en utilisant la commandesudo - $ – nécessite que des commandes Linux données soient exécutées en tant qu’utilisateur régulier non privilégié
Introduction
Savoir comment créer et gérer des machines virtuelles KVM à partir de la ligne de commande peut être très utile dans certains cas de figure : lorsque l’on travaille sur des serveurs headless, par exemple. Néanmoins, la possibilité de scripter des interactions avec des machines virtuelles peut grandement améliorer notre productivité. Dans ce tutoriel, vous apprendrez à créer, supprimer, cloner et gérer des machines KVM à l’aide de quelques utilitaires.
Quelques termes
Avant de commencer à travailler, il serait utile de définir ce que sont KVM et Qemu et comment ils interagissent. KVM est l’abréviation de Kernel Virtual Machine, et c’est un module du noyau Linux qui permet à un programme d’accéder et d’utiliser les capacités de virtualisation des processeurs modernes, en exposant l’interface /dev/kvm. Qemu est, à la place, le logiciel qui effectue réellement l’émulation du système d’exploitation. Il s’agit d’un émulateur de machine open source et d’un virtualiseur qui peut utiliser la fonction d’accélération fournie par KVM lors de l’exécution d’une machine émulée avec la même architecture que l’hôte.
Configuration préliminaire
La première chose que nous devons faire est de vérifier que le processeur que nous utilisons prend en charge la virtualisation. À moins que vous ne couriez sur une machine très ancienne, ce sera sûrement le cas, mais pour le vérifier, nous exécutons simplement :
cat /proc/cpuinfoFaites défiler la sortie de la commande ci-dessus jusqu’à ce que vous voyiez la liste des 'drapeaux' du processeur : parmi eux, vous devriez voir svm si vous utilisez un processeur Amd, ou vmx si le fournisseur du processeur est Intel.
La deuxième chose que nous devons faire, c’est de nous assurer que les modules du noyau nécessaires ont été chargés, pour vérifier cela, nous exécutons :
lsmod | grep kvm
kvm_intel 200704 0
kvm 598016 1 kvm_intel
irqbypass 16384 1 kvm
Je fonctionne sur un processeur Intel, donc, en plus du module kvm, le kvm_intel a également été chargé. Si vous utilisez un processeur Amd, le module kvm_amd sera chargé à la place. Si les modules ne sont pas chargés automatiquement, vous pouvez essayer de les charger manuellement à l’aide de la commande modprobe :
modprobe kvm_intelEnfin, nous devons démarrer le démon libvirtd : la commande suivante l’active à la fois au démarrage et le démarre immédiatement :
systemctl enable --now libvirtdCréer la machine virtuelle
Maintenant que nous avons installé et démarré le service libvirtd, nous pouvons utiliser la commande virt-install pour configurer notre machine virtuelle. La syntaxe du programme est vraiment simple. La commande linux suivante doit être exécutée en tant qu’utilisateur root ou, si vous souhaitez la lancer en tant qu’utilisateur normal, en tant que membre du groupe kvm. La syntaxe du programme est la suivante :
virt-install --name=linuxconfig-vm \
--vcpus=1 \
--memory=1024 \
--cdrom=/tmp/debian-9.0.0-amd64-netinst.iso \
--disk size=5 \
--os-variant=debian8
Analysons la commande ci-dessus :
Tout d’abord, nous avons utilisé l’option --name : elle est obligatoire et sert à attribuer un nom à la nouvelle machine virtuelle.
L’option suivante est l’option --vcpus. Nous l’utilisons pour spécifier le nombre de processeurs virtuels à configurer pour l’invité.
L’option --memory permet de sélectionner la quantité de mémoire réservée à la machine invitée en MiB et l’option --cdrom permet de spécifier le chemin d’accès à un fichier ou à un périphérique à utiliser comme CD-ROM virtuel : il peut s’agir d’une image ISO, d’un périphérique de CD-ROM ou d’une URL à partir de laquelle accéder à une image ISO de démarrage.
L’indicateur --disk est utilisé pour configurer le stockage multimédia de l’invité. Diverses options séparées par des virgules peuvent être spécifiées, par exemple : size qui est utilisé pour spécifier la taille du disque virtuel en Go et path qui est utilisé pour spécifier un chemin à utiliser pour le disque (il sera créé s’il n’existe pas déjà). Si cette option est spécifiée, vous devez vous assurer que le chemin cible est accessible et qu’il dispose du bon contexte SELinux (pour en savoir plus sur SELinux, vous pouvez lire cet article).
Si l’option path n’est pas spécifiée, le disque sera créé dans $HOME/.local/share/libvirt/images si la commande est exécutée en tant qu’utilisateur normal (membre du groupe kvm) ou dans /var/lib/libvirt/images si elle est exécutée en tant que root.
Ensuite, nous avons passé l’option --os-variant. Bien que cela ne soit pas obligatoire, il est fortement recommandé de l’utiliser, car il peut améliorer les performances de la machine virtuelle. L’option essaiera d’affiner l’invité en fonction de la version spécifique du système d’exploitation. Si l’option n’est pas transmise, le programme tente de détecter automatiquement la valeur correcte à partir du support d’installation. Pour obtenir la liste de tous les systèmes pris en charge, vous pouvez exécuter :
osinfo-query osSi tout s’est bien passé et que le paquet virt-viewer est installé, une fenêtre apparaîtra montrant le programme d’installation du système d’exploitation invité.
L’utilitaire virsh
L’utilitaire virsh peut être utilisé pour interagir avec des machines virtuelles. Par exemple, supposons que vous souhaitiez lister tous les invités configurés, en utilisant virsh, vous pouvez simplement exécuter :
virsh list --allLa sortie affichera l’id, le nom et l’état de tous les invités configurés, qu’ils soient en cours d’exécution ou non.
Mais que se passe-t-il si vous souhaitez modifier certains paramètres de la machine invitée ? Vous pouvez utiliser virsh pour accomplir cette tâche, par exemple :
virsh edit linuxconfig-vmVoici une capture d’écran de la sortie de la commande :
Comme vous pouvez le voir, la sortie est une représentation xml des propriétés de la machine virtuelle ou, en utilisant la terminologie virsh, un domaine. Si vous souhaitez modifier, par exemple, le nombre de vcpu, il vous suffit de trouver la balise appropriée et de modifier la valeur. Dans ce cas, nous avons :
<vcpu placement='static'>1</vcpu>Nous voulons ajouter 1 vcpu, nous allons donc le changer en :
<vcpu placement='static'>2</vcpu>Il ne nous reste plus qu’à redémarrer la machine virtuelle pour que les paramètres soient appliqués :
virsh reboot linuxconfig-vmSi nous exécutons maintenant lscpu dans la console invitée, nous devrions voir l’augmentation du nombre de processeurs :
La commande virsh peut également être utilisée pour effectuer d’autres opérations courantes : par exemple, virsh shutdown peut être utilisé pour arrêter l’invité, virsh destroy est l’équivalent d’un arrêt par force brute (donc il peut être dangereux) et virsh undefine peut être utilisé pour supprimer une machine invitée (pour annuler la définition d’un domaine).
Démarrage automatique d’une machine virtuelle au démarrage
Vous pouvez également profiter de la commande virsh si vous souhaitez que certains invités soient démarrés automatiquement au démarrage du système hôte : la syntaxe est, encore une fois, très intuitive :
virsh autostart linuxconfig-vmPour désactiver cette option, nous exécutons :
virsh autostart --disable linuxconfig-vmClonage d’un invité
Un autre utilitaire, virt-clone, peut être utilisé pour créer une nouvelle machine virtuelle en clonant une machine existante. Pour continuer, il faut d’abord s’assurer que l’invité à cloner est en panne, puis on exécute :
virt-clone \
--original=linuxconfig-vm \
--name=linuxconfig-vm-clone \
--file=/var/lib/libvirt/images/linuxconfig-vm.qcow2
Ce que nous avons ici est très simple à comprendre : nous avons spécifié l’invité à cloner à l’aide de l’option --original et le nom du nouvel invité à l’aide de --name comme si nous l’installions à partir de zéro. Avec l’option --file, nous référenceons tous les disques durs virtuels associés à l’invité d’origine que nous voulons cloner. Le programme fera son travail et, en cas de succès, créera un nouveau domaine nommé linuxconfig-vm-clone. Nous savons déjà comment le vérifier :
virsh list --all
Id Name State
----------------------------------------------------
- linuxconfig-vm shut off
- linuxconfig-vm-clone shut off
Réflexions finales
Dans ce tutoriel, nous avons configuré une nouvelle machine virtuelle et nous avons vu comment interagir avec celle-ci. Les options que nous avons spécifiées au moment de la création ne sont que le minimum nécessaire pour une configuration fonctionnelle. Beaucoup d’autres options peuvent être utilisées pour ajuster plusieurs aspects de la machine invitée et elles sont vraiment bien décrites dans la page de manuel virt-install. Comme toujours, le meilleur conseil possible est de lire le manuel.


