Recherche de site Web

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 virsh et 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 commande sudo
  • $ – 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/cpuinfo

Faites 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_intel

Enfin, 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 libvirtd

Cré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 os

Si 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 --all

La 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-vm

Voici 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-vm

Si 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-vm

Pour désactiver cette option, nous exécutons :

virsh autostart --disable linuxconfig-vm

Clonage 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.

Articles connexes: