Aller au contenu principal

Virtualisation


Table des matières

  1. Concepts de virtualisation
  2. KVM et QEMU
  3. Gestion avec libvirt
  4. virsh - CLI de gestion
  5. Réseau et stockage
  6. Exercices pratiques


1 - Concepts de virtualisation

Types de virtualisation

TypeExemplesUsage
Type 1VMware ESXi, KVM, Hyper-VProduction
Type 2VirtualBox, VMware WorkstationDesktop

KVM vs Conteneurs

AspectKVM (VMs)Conteneurs
IsolationComplète (kernel séparé)Partage du kernel
OverheadPlus élevéMinimal
BootMinutesSecondes
SécuritéForte isolationIsolation plus faible
Cas d'usageOS différents, isolation forteMicroservices, 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

FormatAvantagesInconvénients
qcow2Snapshots, compression, thin provisioningLégèrement plus lent
rawPerformance maximalePas 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 --all pour voir toutes les VMs
  • Utiliser les bridges pour le réseau des VMs
  • Les snapshots permettent de sauvegarder l'état

🔝 Retour à la table des matières


← Chapitre précédent | Chapitre suivant : Conteneurs LXC →