TD KVM
TD KVM
TD KVM
Jeremy Briffaut
16 septembre 2022
1 Preparation
Les images, ISO, ... sont sur le nfs :
/mnt/nfs
1
Par défaut, libvirt ne se lance pas automatiquement. Pour ce faire, il suffit d’édi-
ter le fichier /etc/default/libvirtd et de modifier la variable suivante :
start_libvirtd="yes"
Vérifier que votre démon est correctement lancé avec la commande suivante :
virsh −c qemu:///system list
2
Reduction de la taille d’une image qcow2 :
$ qemu−img convert vdisk.qcow2 −O qcow2 vdisk−clean.qcow2
3 Gestion du reseau
3.1 Bridge
Pour pouvoir bridger les machines virtuelles sur l’interface réseau réelle de la
machine hôte, il faut modifier la configuration réseau de ce dernier. La première
étape est d’ajouter une interface de type bridge qui pour être utilisée par les inter-
faces TUN/TAP associées a chaque VM.
Par exemple, pour créer un bridge sur l’interface réelle eth0, modifier /etc/net-
work/interfaces comme indique ci-dessous :
(remplacer eth0 par le nom de votre interface)
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 172.10.3.XXX
network 172.10.3.0
netmask 255.255.255.0
broadcast 172.10.3.255
gateway 172.10.3.254
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
3
ip a
ping free.fr
4
5 LibVirt
5.1 Mise en place
La documentation de libVirt est disponible à cette URL :
— http://libvirt.org/devguide.html
Copiez le répertoire contenant les exemples est /mnt/nfs/EXO/exo-libvirt Pour
compiler vos exemples, vous devez installer :
apt−get install gcc libvirt−dev
5.2 Exemples
Voici la liste des exemples fournis et ce qu’ils font (les noms en gras sont a
étudier et tester particulièrement) :
— ex1.c : Utilisation de vitConnectOpen pour ouvrir une connexion vers un
hyperviseur
— ex2.c : Utilisation de vitConnectOpenReadOnly pour ouvrir une connexion
en RO vers un hyperviseur
— ex3.c : Utilisation de vitConnectOpenAuth pour ouvrir une connexion vers
un hyperviseur avec authentification (les modification à apporter sont dans
l’entête du fichier C)
— ex4.c : Utilisation de vitConnectOpenAuth pour ouvrir une connexion vers
un hyperviseur avec authentification avec gestion des paramètres d’authen-
tification via le mécanisme de callback.
— ex5.c : Fermeture de connexion avec utilisation de virConnectRef pour gé-
rer l’ouverture multiple (application multi-threader)
— ex8.c : Utilisation de virConnectGetCapabilities pour obtenir les capacités
d’un hôte
— ex9.c : Utilisation de virCOnnectHostname pour obtenir le nom de votre
hôte
— ex10.c : Utilisation de virConnectGetMaxVcpus pour afficher le nombre
maximum de VCPU
— ex11.c : Utilisation de virNodeGetFreeMemory pour afficher la mémoire
libre disponible
— ex12.c : Utilisation de virNodeGetInfo pour afficher les informations hard-
ware de l’hôte
— ex13.c : Affichage de la mémoire disponible par zone NUMA (pas possible
ici)
— ex14.c : Affichage du type d’hyperviseur utilisé
— ex15.c : Affichage de la version de l’hyperviseur
5
— ex16.c : Affichage de la version de la libVirt
— ex17.c : Affichage de l’URI utilisé
— ex18.c : Vérification que la connexion est crypté
— ex19.c : Vérification que la connexion est sécurisé
— ex20.c : Affichage du modèle de sécurité utilisé
— ex21.c : Utilisation de virSetErrorFunc pour définir une nouvelle fonction
de gestion des erreurs
— ex28.c : Exemple complet avec toutes les fonctions précédentes
5.3 Exercices
Exercice 1 : créer un programme permettant d’ouvrir un hyperviseur distant
(qemu+ssh)
Exercice 2 : Ajouter l’affichage du hostname sur lequel vous êtes connecté, le
nombre de CPU disponible et la mémoire disponible sur l’hôte
Exercice 3 : Afficher la liste des VMs actives et inactives et les informations
sur chaque VM
Connection successful :)
Hostname:debian.ensi−bourges.fr.
Connection is encrypted: 0
Maximum support virtual CPUs: 16
Memory size: 8187536kb
Active domain IDs:
id : 5, nom : vm10
state : 1
maxMem : 524288
memory : 524288
nrVirtCpu : 2
cpuTime : 9362460000000
Inactive domain names:
6
>>> Arret de vm10
Active domain IDs:
Inactive domain names:
vm10
>>> Demarage de vm10
Active domain IDs:
ID : 8 NOM : vm10
state : 1
maxMem : 524288
memory : 524288
nrVirtCpu : 2
cpuTime : 30000000
Inactive domain names:
7
ID : 23 NOM : vm10
state : 1
maxMem : 524288
memory : 524288
nrVirtCpu : 2
cpuTime : 350000000
Inactive domain names:
Exercice 7 : Ajouter une fonction pour migrer une machine de votre domaine
vers le domaine du voisin