Virtualisation
Table des matières
- Concepts de virtualisation
- KVM et QEMU
- Gestion avec libvirt
- virsh - CLI de gestion
- Réseau et stockage
- Exercices pratiques
1 - Concepts de virtualisation
Types de virtualisation
| Type | Exemples | Usage |
|---|---|---|
| Type 1 | VMware ESXi, KVM, Hyper-V | Production |
| Type 2 | VirtualBox, VMware Workstation | Desktop |
KVM vs Conteneurs
| Aspect | KVM (VMs) | Conteneurs |
|---|---|---|
| Isolation | Complète (kernel séparé) | Partage du kernel |
| Overhead | Plus élevé | Minimal |
| Boot | Minutes | Secondes |
| Sécurité | Forte isolation | Isolation plus faible |
| Cas d'usage | OS différents, isolation forte | Microservices, scaling |
Prérequis matériels
# Vérifier le support de virtualisation
grep -E 'vmx|svm' /proc/cpuinfo
# vmx = Intel VT-x
# svm = AMD-V
# Charger les modules
lsmod | grep kvm
# kvm_intel ou kvm_amd
🔝 Retour à la table des matières
2 - KVM et QEMU
Installation
# Debian/Ubuntu
apt install qemu-kvm libvirt-daemon-system \
libvirt-clients bridge-utils virtinst
# RHEL/CentOS
yum install qemu-kvm libvirt virt-install
# Démarrer libvirtd
systemctl enable --now libvirtd
# Ajouter l'utilisateur au groupe
usermod -aG libvirt $USER
Vérification
# Vérifier KVM
kvm-ok
# INFO: /dev/kvm exists
# KVM acceleration can be used
# Vérifier libvirt
virsh list --all
# Vérifier la connexion
virsh uri
# qemu:///system
Créer une VM avec virt-install
# Depuis une ISO
virt-install \
--name ubuntu22 \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/ubuntu22.qcow2,size=20 \
--os-variant ubuntu22.04 \
--network bridge=virbr0 \
--graphics vnc,listen=0.0.0.0 \
--cdrom /var/lib/libvirt/boot/ubuntu-22.04-server.iso
# Depuis une image cloud
virt-install \
--name cloud-vm \
--ram 2048 \
--vcpus 2 \
--import \
--disk /var/lib/libvirt/images/cloud-vm.qcow2 \
--os-variant ubuntu22.04 \
--network bridge=virbr0 \
--noautoconsole
Formats de disque
| Format | Avantages | Inconvénients |
|---|---|---|
| qcow2 | Snapshots, compression, thin provisioning | Légèrement plus lent |
| raw | Performance maximale | Pas de snapshots |
# Convertir
qemu-img convert -O qcow2 disk.raw disk.qcow2
# Infos sur un disque
qemu-img info disk.qcow2
# Redimensionner
qemu-img resize disk.qcow2 +10G
🔝 Retour à la table des matières
3 - Gestion avec libvirt
Architecture libvirt
Fichiers de configuration
# Configuration libvirt
/etc/libvirt/libvirtd.conf
# Définitions des VMs (XML)
/etc/libvirt/qemu/
# Images disque par défaut
/var/lib/libvirt/images/
# Logs
/var/log/libvirt/
Définition XML d'une VM
<!-- /etc/libvirt/qemu/myvm.xml -->
<domain type='kvm'>
<name>myvm</name>
<memory unit='MiB'>2048</memory>
<vcpu>2</vcpu>
<os>
<type arch='x86_64'>hvm</type>
<boot dev='hd'/>
</os>
<devices>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/myvm.qcow2'/>
<target dev='vda' bus='virtio'/>
</disk>
<interface type='network'>
<source network='default'/>
<model type='virtio'/>
</interface>
<graphics type='vnc' port='-1'/>
</devices>
</domain>
virt-manager (GUI)
# Installer
apt install virt-manager
# Lancer
virt-manager
# Connexion distante via SSH
virt-manager -c qemu+ssh://user@host/system
🔝 Retour à la table des matières
4 - virsh - CLI de gestion
Commandes de base
# Lister les VMs
virsh list --all
# Démarrer/arrêter
virsh start myvm
virsh shutdown myvm # Graceful
virsh destroy myvm # Force
# Redémarrer
virsh reboot myvm
# Pause/Resume
virsh suspend myvm
virsh resume myvm
Gestion des VMs
# Infos sur une VM
virsh dominfo myvm
# Console
virsh console myvm
# Afficher la config XML
virsh dumpxml myvm
# Éditer la config
virsh edit myvm
# Définir/Supprimer
virsh define myvm.xml
virsh undefine myvm
virsh undefine myvm --remove-all-storage
Snapshots
# Créer un snapshot
virsh snapshot-create-as myvm snap1 "Description"
# Lister les snapshots
virsh snapshot-list myvm
# Revenir à un snapshot
virsh snapshot-revert myvm snap1
# Supprimer
virsh snapshot-delete myvm snap1
Ressources à chaud
# Ajouter de la RAM (si supporté)
virsh setmem myvm 4G --live
# Ajouter des vCPUs
virsh setvcpus myvm 4 --live
# Ajouter un disque
virsh attach-disk myvm /path/to/disk.qcow2 vdb --live
# Détacher
virsh detach-disk myvm vdb --live
Autostart
# Activer le démarrage automatique
virsh autostart myvm
# Désactiver
virsh autostart --disable myvm
# Lister les VMs en autostart
virsh list --autostart
🔝 Retour à la table des matières
5 - Réseau et stockage
Réseaux virtuels
# Lister les réseaux
virsh net-list --all
# Infos sur default
virsh net-info default
virsh net-dumpxml default
# Créer un réseau bridge
cat > br-network.xml << 'EOF'
<network>
<name>br-internal</name>
<forward mode='bridge'/>
<bridge name='br0'/>
</network>
EOF
virsh net-define br-network.xml
virsh net-start br-internal
virsh net-autostart br-internal
Créer un bridge sur l'hôte
# /etc/network/interfaces (Debian)
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
# Ou avec netplan (Ubuntu)
# /etc/netplan/01-bridge.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
bridges:
br0:
interfaces: [eth0]
dhcp4: yes
Pools de stockage
# Lister les pools
virsh pool-list --all
# Créer un pool de répertoire
virsh pool-define-as mypool dir --target /data/vms
virsh pool-build mypool
virsh pool-start mypool
virsh pool-autostart mypool
# Créer un volume dans le pool
virsh vol-create-as mypool disk1.qcow2 20G --format qcow2
# Lister les volumes
virsh vol-list mypool
Migration de VMs
# Migration live (nécessite stockage partagé)
virsh migrate --live myvm qemu+ssh://dest-host/system
# Migration avec copie du disque
virsh migrate --live --copy-storage-all myvm qemu+ssh://dest-host/system
# Offline migration
virsh migrate --offline myvm qemu+ssh://dest-host/system
🔝 Retour à la table des matières
6 - Exercices pratiques
Exercice 1 : Créer une VM
Créez une VM avec 2 vCPUs, 2GB RAM et un disque de 10GB :
Solution
# Créer le disque
qemu-img create -f qcow2 /var/lib/libvirt/images/test-vm.qcow2 10G
# Créer la VM
virt-install \
--name test-vm \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/test-vm.qcow2 \
--os-variant generic \
--network network=default \
--graphics vnc \
--cdrom /path/to/iso
Exercice 2 : Snapshot et restauration
Créez un snapshot, modifiez la VM, puis restaurez :
Solution
# Créer le snapshot
virsh snapshot-create-as test-vm clean-state "État initial"
# Modifier la VM (ex: supprimer des fichiers)
# Restaurer
virsh snapshot-revert test-vm clean-state
# Vérifier
virsh snapshot-list test-vm
Quiz
Q1. Quelle commande affiche la configuration XML d'une VM ?
Réponse
virsh dumpxml nom-vm
Q2. Quel format de disque supporte les snapshots ?
Réponse
qcow2
🔝 Retour à la table des matières
Points clés à retenir
- KVM = hyperviseur Linux intégré au kernel
- libvirt = API unifiée de gestion
- virsh = CLI pour gérer les VMs
- qcow2 = format avec snapshots et thin provisioning
virsh list --allpour voir toutes les VMs- Utiliser les bridges pour le réseau des VMs
- Les snapshots permettent de sauvegarder l'état