Avant Ceph, il faut des machines et un réseau. Cette étape se déroule entièrement sur l'hôte de virtualisation : un pool de stockage libvirt, un réseau dédié aux échanges internes, dix disques virtuels et quatre machines.

Tout le lab tient dans un répertoire, déclaré comme pool libvirt, avec un réseau supplémentaire réservé au trafic interne du cluster.
Un répertoire, et les droits qui vont avec
Le projet vit dans une arborescence dédiée — un répertoire pour les scripts, un pour les disques :
mkdir -p ~/LabCEPH/{scripts,VM}
Le processus QEMU tournant sous son propre compte, il faut lui donner accès au répertoire des disques. Deux commandes, dont la seconde est celle qu'on oublie :
sudo setfacl -m u:libvirt-qemu:rwx ~/LabCEPH/VM # accès au répertoire existant sudo setfacl -d -m u:libvirt-qemu:rwx ~/LabCEPH/VM # et à tout ce qui y sera créé ensuite
L'option -d pose une ACL par défaut, héritée par les fichiers créés plus tard. Sans elle, tout fonctionne jusqu'au jour où l'on ajoute un disque — qui, lui, sera inaccessible.
Déclarer un pool de stockage libvirt
sudo virsh pool-define-as --name labceph-vm --type dir \
--target /home/guillaume/LabCEPH/VM
sudo virsh pool-start labceph-vm
sudo virsh pool-autostart labceph-vm
Un pool n'est rien d'autre qu'un emplacement connu de libvirt. L'intérêt est pratique : les disques deviennent visibles dans les outils graphiques, l'espace disponible est suivi, et l'on peut créer des volumes sans manipuler de chemins absolus. C'est aussi ce qui évite d'éparpiller des fichiers qcow2 de plusieurs gigaoctets un peu partout.
Le réseau dédié au cluster
Le réseau public existe déjà — celui du lab Kubernetes. Il faut créer le second, réservé aux échanges internes de Ceph :
<network> <name>lan_op_ceph</name> <forward mode="nat"/> <bridge name="virbr50" stp="on" delay="0"/> <ip address="192.168.120.254" netmask="255.255.255.0"/> </network>
sudo virsh net-define ~/LabCEPH/scripts/lan_op_ceph.xml sudo virsh net-start lan_op_ceph sudo virsh net-autostart lan_op_ceph
Deux remarques. D'abord, déclarer le réseau dans un fichier XML versionné plutôt que via une commande interactive : on sait ce qu'on a fait, et on peut le rejouer. Ensuite, l'autostart — un réseau non démarré au boot, ce sont trois machines virtuelles qui ne se voient plus, avec un cluster qui se plaint sans expliquer pourquoi.
Les disques
Dix disques au total : quatre systèmes de 15 Gio, six disques OSD de 10 Gio.
qemu-img create -f qcow2 ~/LabCEPH/VM/VSTOCK01-system.qcow2 15G qemu-img create -f qcow2 ~/LabCEPH/VM/VSTOCK01-osd1.qcow2 10G qemu-img create -f qcow2 ~/LabCEPH/VM/VSTOCK01-osd2.qcow2 10G
Le nommage explicite — machine, rôle, numéro — n'est pas de la coquetterie : au moment de rattacher un disque à une machine, ou d'en supprimer un après un test, c'est ce qui évite l'erreur irréversible.
Le format qcow2 alloue à la demande : ces dix disques déclarés pour 90 Gio n'occupent au départ que quelques mégaoctets. Attention toutefois — Ceph écrit sur ses disques OSD dès leur initialisation, et l'espace réellement consommé grimpe vite. Il faut prévoir la place.
Les machines virtuelles
Chaque nœud de stockage est créé avec ses trois disques et ses deux interfaces réseau :
virt-install --name VSTOCK01 --memory 4096 --vcpus 2 --cpu host \ --disk path=~/LabCEPH/VM/VSTOCK01-system.qcow2,format=qcow2 \ --disk path=~/LabCEPH/VM/VSTOCK01-osd1.qcow2,format=qcow2 \ --disk path=~/LabCEPH/VM/VSTOCK01-osd2.qcow2,format=qcow2 \ --network network=lan_interne_infra,model=virtio \ --network network=lan_op_ceph,model=virtio \ --cdrom ~/ISO/ubuntu-24.04.3-live-server-amd64.iso \ --os-variant ubuntu24.04 --graphics spice --noautoconsole
L'ordre des interfaces compte : la première deviendra enp1s0 — le réseau public —, la seconde enp2s0 — le réseau cluster. C'est cet ordre qui sera repris dans la configuration netplan de chaque machine, avec des adresses fixes.
Le client SRVCLI01, lui, n'a qu'un disque et une seule interface : il ne participe pas au cluster, il le consomme.
Avant de passer à la suite
Trois vérifications qui font gagner du temps : les quatre machines démarrent et sont joignables, chaque nœud de stockage voit bien deux interfaces et trois disques (lsblk), et les disques OSD sont vierges — pas de table de partition résiduelle, sans quoi Ceph refusera de les prendre.
La documentation de référence est sur le wiki
Ces articles ne remplacent pas la documentation : ils en expliquent les choix et les mécanismes. Le pas à pas complet — commandes, sorties intégrales, captures d'écran — est publié sur mon wiki, section Datacenter / Stockage / CEPH :
La série Ceph
Deux fiches pour comprendre, quatre étapes pour construire :
- Comprendre Ceph : RADOS, CRUSH et l'absence de contrôleur central
- Les démons : MON, OSD, MGR, MDS et RGW
- Lab (1) : cadrage et architecture
- Lab (2) : construire l'infrastructure sous KVM — vous y êtes
- Lab (3) : préparer les systèmes
- Lab (4) : cephadm, du bootstrap aux OSD