GNU/Linux >> Tutoriels Linux >  >> Linux

Gérer les machines virtuelles KVM avec le programme Virsh

Virsh , abréviation de Vir tuelle Sh ell, est une interface utilisateur en ligne de commande pour la gestion des machines virtuelles invitées. Virsh vous permet de créer, répertorier, modifier, démarrer, redémarrer, arrêter, suspendre, reprendre, arrêter et supprimer des machines virtuelles. Il prend actuellement en charge KVM, LXC, Xen, QEMU, OpenVZ, VirtualBox et VMware ESX. Dans ce guide, nous expliquerons comment gérer KVM machines virtuelles avec interface utilisateur de gestion Virsh sous Linux.

Assurez-vous d'avoir installé les utilitaires KVM et Virsh sur votre machine Linux. Les guides suivants expliquent comment installer KVM sur des systèmes basés sur DEB et RPM.

  • Installer et configurer KVM dans le serveur sans tête Ubuntu 20.04
  • Installer et configurer KVM sur le serveur CentOS 8
  • Installer et configurer KVM dans OpenSUSE Tumbleweed

1. Gérer les machines virtuelles KVM avec la commande Virsh

Si vous débutez avec Virsh et KVM, il est préférable de commencer par lire le manuel d'aide. Cela vous donnera une idée de base de l'utilisation de Virsh.

1.1. Obtenir de l'aide

Entrez la commande suivante pour afficher la liste des commandes disponibles avec une brève description :

$ virsh help

Vous verrez une liste complète des commandes virsh disponibles pour gérer les machines virtuelles KVM à partir de la ligne de commande.

Vous n'êtes pas obligé de tout mémoriser. Lisez simplement la description d'une commande que vous souhaitez exécuter et utilisez-la.

Les commandes sont regroupées dans les sections suivantes :

  • Gestion de domaine,
  • Surveillance de domaine,
  • Hébergeur et Hyperviseur,
  • Point de contrôle,
  • Interface,
  • Filtre réseau,
  • Mise en réseau,
  • Périphérique de nœud,
  • Secret,
  • Instantané,
  • Sauvegarde,
  • Groupe de stockage,
  • Volume de stockage,
  • Virsh lui-même.

Chaque section contient les commandes liées à un ensemble particulier de tâches. Vous pouvez afficher la section d'aide d'un groupe, par exemple Réseautage , comme ci-dessous :

$ virsh help Networking

Vous verrez des commandes liées aux tâches de mise en réseau :

 Networking (help keyword 'network'):
    net-autostart                  autostart a network
    net-create                     create a network from an XML file
    net-define                     define an inactive persistent virtual network or modify an existing persistent one from an XML file
    net-destroy                    destroy (stop) a network
    net-dhcp-leases                print lease info for a given network
    net-dumpxml                    network information in XML
    net-edit                       edit XML configuration for a network
    net-event                      Network Events
    net-info                       network information
    net-list                       list networks
    net-name                       convert a network UUID to network name
    net-start                      start a (previously defined) inactive network
    net-undefine                   undefine a persistent network
    net-update                     update parts of an existing network's configuration
    net-uuid                       convert a network name to network UUID
    net-port-list                  list network ports
    net-port-create                create a network port from an XML file
    net-port-dumpxml               network port information in XML
    net-port-delete                delete the specified network port

Vous pouvez également afficher la section d'aide d'une commande spécifique. Par exemple, je vais afficher la section d'aide de "net-name" commande :

$ virsh help net-name
  NAME
    net-name - convert a network UUID to network name

  SYNOPSIS
    net-name <network>

  OPTIONS
    [--network] <string>  network uuid

1.2. Lister les machines virtuelles

Pour afficher la liste des machines virtuelles invitées en mode exécution ou suspension, exécutez la commande suivante :

$ virsh list
Id Name State
--------------------

Comme vous pouvez le voir, il n'y a pas d'invités en mode exécution ou suspension.

Vous pouvez utiliser le --inactif possibilité de lister les invités inactifs.

Pour afficher toutes les machines invitées, exécutez :

$ virsh list --all
 Id   Name            State
--------------------------------
 -    centos8-uefi    shut off
 -    nginx_centos8   shut off

Comme vous le voyez dans la sortie ci-dessus, j'ai deux machines virtuelles, à savoir "centos8-uefi" et "nginx_centos8". Les deux sont éteints.

1.3. Démarrer les machines virtuelles

Pour démarrer une machine virtuelle, par exemple "centos8-uefi", exécutez :

$ virsh start centos8-uefi

Vous verrez une sortie comme ci-dessous :

Domain centos8-uefi started

Pour vérifier si la VM est en cours d'exécution, utilisez "list" commande :

$ virsh list
 Id   Name           State
------------------------------
 1    centos8-uefi   running

1.4. Enregistrer les machines virtuelles

Pour enregistrer l'état actuel d'une VM en cours d'exécution, exécutez :

$ virsh save centos8-uefi centos8-save

Domain centos8-uefi saved to centos8-save

Cette commande arrête l'invité nommé "centos8-uefi" et enregistre les données dans un fichier appelé "centos8-save". Cela prendra quelques instants en fonction de la quantité de mémoire utilisée par votre machine invitée.

1.5. Restaurer les machines virtuelles

Pour restaurer l'état précédemment enregistré d'une VM, il suffit de spécifier le nom du fichier comme ci-dessous :

$ virsh restore centos8-save 
Domain restored from centos8-save

Vérifiez si la VM est restaurée à l'aide de la commande "list":

$ virsh list
 Id   Name           State
------------------------------
 4    centos8-uefi   running

1.6. Redémarrer les machines virtuelles

Pour redémarrer une VM en cours d'exécution, exécutez :

$ virsh reboot centos8-uefi
Domain centos8-uefi is being rebooted

1.7. Suspendre/Pauser les machines virtuelles

Pour suspendre une VM en cours d'exécution, procédez comme suit :

$ virsh suspend centos8-uefi 
Domain centos8-uefi suspended

Vérifiez-le avec la commande "list":

$ virsh list
 Id   Name           State
-----------------------------
 1    centos8-uefi   paused

1.8. Reprendre les machines virtuelles

Pour reprendre la VM en pause, exécutez :

$ virsh resume centos8-uefi 
Domain centos8-uefi resumed

1.9. Arrêter les machines virtuelles actives

Pour arrêter de force une VM active et la laisser à l'état inactif, exécutez :

$ virsh destroy centos8-uefi
Domain centos8-uefi destroyed

Vous pouvez également arrêter la VM avec élégance au lieu de la forcer comme ci-dessous :

$ virsh destroy centos8-uefi --graceful
Domain centos8-uefi destroyed

1.10. Arrêter les machines virtuelles

Pour éteindre une VM en cours d'exécution, procédez comme suit :

$ virsh shutdown centos8-uefi
Domain centos8-uefi is being shutdown

1.11. Récupérer le vidage XML des machines virtuelles

Pour afficher le fichier de configuration XML d'une VM dans la sortie standard, exécutez :

$ virsh dumpxml centos8-uefi

Cette commande affichera les détails de configuration complets (logiciel et matériel) de la machine virtuelle :

Vous pouvez également exporter le vidage XML vers un fichier au lieu de simplement l'afficher dans la sortie standard comme ci-dessous :

$ virsh dumpxml centos8-uefi > centos8.xml

Cette commande videra le fichier XML "centos8-uefi" dans un fichier nommé "centos8.xml" et l'enregistrera dans le répertoire de travail actuel.

1.12. Créer des machines virtuelles avec un vidage XML

Vous pouvez créer une nouvelle machine virtuelle invitée à l'aide du code XML existant à partir d'invités créés précédemment. Commencez par créer un vidage XML comme indiqué ci-dessus, puis créez une nouvelle machine virtuelle à l'aide du fichier XML comme ci-dessous :

$ virsh create centos8.xml 
Domain centos8-uefi created from centos8.xml

Cette commande créera une nouvelle machine virtuelle et la démarrera immédiatement. Vous pouvez le vérifier en utilisant la commande :

1.13. Modifier le fichier de configuration XML des machines virtuelles

Si vous souhaitez apporter des modifications à une machine invitée, vous pouvez simplement modifier son fichier de configuration et effectuer les modifications comme vous le souhaitez. Les invités peuvent être modifiés pendant leur exécution ou lorsqu'ils sont hors ligne.

$ virsh edit centos8-uefi

Cette commande ouvrira le fichier dans votre éditeur par défaut que vous avez défini avec la variable $EDITOR.

1.14. Activer l'accès à la console pour les machines virtuelles

Après avoir créé des machines invitées KVM, vous pouvez y accéder via SSH, le client VNC, Virt-viewer, Virt-manager et la console Web Cockpit, etc. Cependant, vous ne pouvez pas y accéder à l'aide de la commande "virsh console". La commande console est utilisée pour connecter la console série virtuelle pour l'invité. Pour accéder aux invités KVM à l'aide de la commande "virsh console", vous devez activer l'accès à la console série sur la machine invitée. Reportez-vous au guide suivant pour activer l'accès à la console virsh :

  • Comment activer l'accès à la console Virsh pour les invités KVM

1.15. Renommer les machines virtuelles

Si vous avez déjà voulu renommer une machine virtuelle, consultez le guide suivant.

  • Comment renommer la machine virtuelle invitée KVM

1.16. Afficher l'ID de domaine des machines virtuelles

Pour trouver l'ID de domaine d'une machine virtuelle invitée en cours d'exécution, exécutez :

$ virsh domid centos8-uefi
2

Veuillez noter que l'invité doit être en cours d'exécution pour obtenir son identifiant de domaine.

1.17. Afficher le nom de domaine des machines virtuelles

Pour obtenir le nom de domaine d'une VM en cours d'exécution, exécutez :

$ virsh domname <domain-id or domain-uuid>

Exemple :

$ virsh domname 2
centos8-uefi

Ici, 2 est l'identifiant du domaine.

1.18. Afficher l'UUID des machines virtuelles

Pour trouver l'UUID de la machine invitée, exécutez :

$ virsh domuuid <domain-name or domain-id>

Exemple :

$ virsh domuuid centos8-uefi

Ou,

$  virsh domuuid 2

Exemple de résultat :

de4100c4-632e-4c09-8dcf-bbde29170268

1.19. Afficher les détails des machines virtuelles

Pour afficher les informations d'une machine invitée, utilisez le nom de domaine, l'identifiant de domaine ou l'uuid de domaine comme ci-dessous :

$ virsh dominfo centos8-uefi

Ou,

$ virsh dominfo 2

Ou,

$ virsh dominfo de4100c4-632e-4c09-8dcf-bbde29170268

Exemple de résultat :

Id:             -
Name:           centos8-uefi
UUID:           de4100c4-632e-4c09-8dcf-bbde29170268
OS Type:        hvm
State:          shut off
CPU(s):         2
Max memory:     2097152 KiB
Used memory:    2097152 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: apparmor
Security DOI:   0

1.20. Afficher les informations sur l'hôte KVM

Pour obtenir les informations de votre système hôte, exécutez :

$ virsh nodeinfo

Exemple de résultat :

CPU model:           x86_64
CPU(s):              4
CPU frequency:       1167 MHz
CPU socket(s):       1
Core(s) per socket:  2
Thread(s) per core:  2
NUMA cell(s):        1
Memory size:         8058840 KiB

1.21. Afficher les informations du CPU virtuel

Pour afficher les informations du CPU virtuel, exécutez :

$ virsh vcpuinfo <domain-id or domain-name or domain-uuid>

Exemple :

$ virsh vcpuinfo centos8-uefi
VCPU: 0
CPU: 3
State: running
CPU time: 5.6s
CPU Affinity: yyyy

VCPU: 1
CPU: 1
State: running
CPU time: 0.0s
CPU Affinity: yyyy

1.22. Trouver l'adresse IP des machines virtuelles

Trouver l'adresse IP d'une machine virtuelle n'est pas un gros problème. Si vous avez un accès console à la machine virtuelle, vous pouvez facilement trouver son adresse IP à l'aide de la commande "ip". Cependant, il est également possible d'identifier l'adresse IP d'une VM KVM sans avoir à accéder à sa console. Le guide suivant explique comment trouver l'adresse IP d'une machine virtuelle KVM.

  • Comment trouver l'adresse IP d'une machine virtuelle KVM

1.23. Supprimer les machines virtuelles

Si vous ne voulez plus de VM, supprimez-la simplement comme ci-dessous :

$ virsh destroy centos8-uefi
$ virsh undefine centos8-uefi

La première commande arrêtera de force la machine virtuelle si elle est déjà en cours d'exécution. Et la deuxième commande l'annulera et le supprimera complètement.

Vous pouvez également utiliser les options suivantes pour supprimer les volumes de stockage et les instantanés.

--managed-save remove domain managed state file
--storage remove associated storage volumes (comma separated list of targets or source paths) (see domblklist)
--remove-all-storage remove all associated storage volumes (use with caution)
--delete-storage-volume-snapshots delete snapshots associated with volume(s)
--wipe-storage wipe data on the removed volumes
--snapshots-metadata remove all domain snapshot metadata (vm must be inactive)

2. Gérer les réseaux virtuels

J'espère que vous avez appris à gérer les machines virtuelles KVM avec la commande Virsh sous Linux. Cette section répertorie les commandes importantes pour gérer les réseaux virtuels KVM sous Linux à l'aide de l'utilitaire de ligne de commande virsh.

2.1. Lister les réseaux virtuels

Pour lister les réseaux virtuels disponibles, exécutez :

$ virsh net-list 
 Name      State    Autostart   Persistent
--------------------------------------------
 default   active   yes         yes

Comme vous pouvez le voir, je n'ai qu'un seul réseau virtuel qui est celui par défaut.

2.2. Afficher les détails du réseau virtuel

Pour afficher les détails d'un réseau virtuel, exécutez :

$ virsh net-dumpxml default

Remplacez "default" par le nom de votre réseau dans la commande ci-dessus.

Exemple de résultat :

<network connections='1'>
  <name>default</name>
  <uuid>ce25d978-e455-47a6-b545-51d01bcb9e6f</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:ee:35:49'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

2.3. Démarrer des réseaux virtuels

Pour démarrer un réseau inactif, exécutez :

$ virsh net-start <Name-Of-Inactive-Network>

Pour démarrer automatiquement un réseau :

$ virsh net-autostart <network-name>

2.4. Créer un vidage XML de réseaux virtuels

Pour créer le fichier de configuration XML d'un réseau virtuel existant, exécutez :

$ virsh net-dumpxml default > default.xml

La commande ci-dessus créera la configuration XML du réseau "par défaut" et l'enregistrera dans un fichier nommé "default.xml" dans le répertoire courant.

Vous pouvez afficher le fichier XML à l'aide de la commande cat :

$ cat default.xml 
<network connections='1'>
  <name>default</name>
  <uuid>ce25d978-e455-47a6-b545-51d01bcb9e6f</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:ee:35:49'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

2.5. Créer de nouveaux réseaux virtuels à partir d'un fichier XML

Pour créer un nouveau réseau virtuel à l'aide d'un fichier XML existant et le démarrer immédiatement, exécutez :

$ virsh net-create <Name-of-XMLfile>

Si vous souhaitez créer un réseau à partir d'un fichier XML mais que vous ne souhaitez pas le démarrer automatiquement, exécutez :

$ virsh net-define <Name-of-XMLfile>

2.6. Désactiver les réseaux virtuels

Pour désactiver un réseau actif, exécutez :

$ virsh net-destroy <network-name>

2.7. Supprimer les réseaux virtuels

Pour supprimer un réseau virtuel, désactivez-le d'abord comme indiqué ci-dessus, puis exécutez :

$ virsh net-undefine <Name-Of-Inactive-Network>

Virsh a beaucoup de commandes et d'options. Apprendre à utiliser l'outil de ligne de commande Virsh à fond est juste suffisant pour configurer un environnement virtuel complet sous Linux. Vous n'avez besoin d'aucune application graphique.

Pour plus de détails, reportez-vous aux pages de manuel de virsh.

$ man virsh

3. Gérez graphiquement les invités KVM

Se souvenir de toutes les commandes virsh est presque impossible et également inutile. Si vous avez du mal à effectuer toutes les tâches de gestion KVM à partir de la ligne de commande, vous pouvez essayer des outils de gestion KVM graphiques tels que Virt-manager et Cockpit.

  • Gérer les machines virtuelles KVM à l'aide de la console Web Cockpit
  • Comment gérer les machines virtuelles KVM avec Virt-Manager

Conclusion

Si vous savez comment gérer des machines virtuelles KVM avec l'interface utilisateur de gestion Virsh sous Linux, vous êtes à mi-chemin pour gérer un environnement de virtualisation de niveau entreprise. La configuration de KVM et la gestion des machines virtuelles KVM à l'aide de la commande virsh sont très importantes pour tous les administrateurs Linux.

Image sélectionnée par Elias Sch. de Pixabay.


Linux
  1. Comment créer un instantané de machine virtuelle KVM avec la commande Virsh

  2. Gérer KVM (QEMU) avec Kimchi (interface web)

  3. Machines virtuelles hebdomadaires, avec scripts de construction

  4. Comment renommer la machine virtuelle KVM avec virsh

  5. Comment gérer le réseau d'entreprise de machines Linux ?

Comment renommer la machine virtuelle invitée KVM

Comment exporter et importer des machines virtuelles KVM sous Linux

Comment installer KVM et gérer des machines virtuelles dans Ubuntu 20.04

Comment gérer les machines virtuelles dans KVM à l'aide de Virt-Manager

Gestion des machines virtuelles KVM avec Cockpit Web Console sous Linux

Comment créer et gérer des machines virtuelles dans KVM