ajoute une démo Ceph mono-serveur (bloc C, premier chantier)

Cluster cephadm minimal (1 mon, 1 mgr, 1 OSD sur fichier épars),
vérifié par une vraie écriture/lecture d'objet. Pas branché à
OpenStack (Cinder désactivé sur ce déploiement) : démo de
compréhension avant le vrai cluster au 2e serveur. SSH via adam, pas
root, pour ne pas affaiblir le durcissement SSH de la semaine 1.

Découverte en vérifiant l'état réel avant d'agir : le serveur a 31 Go
de RAM et 230 Go RAID 1, pas 64 Go / 2x500 Go comme écrit dans le
CLAUDE.md — noté en dette, démo faite quand même sous surveillance de
la RAM après accord d'Adam.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Adam Belkacemi 2026-10-14 12:20:48 +02:00
parent 6ea7a1cc16
commit cdf79d2823
5 changed files with 212 additions and 0 deletions

82
docs/runbooks/ceph.md Normal file
View file

@ -0,0 +1,82 @@
# Runbook — Ceph (démo mono-serveur)
Démo du bloc C du CLAUDE.md : comprendre et savoir opérer Ceph, avant le
« vrai cluster » prévu au 2ᵉ serveur. **Pas branché à OpenStack** (Cinder est
désactivé sur ce déploiement — `enable_cinder: "no"`), pas de réplication (1
seul OSD), pas de stockage réel de l'application. Voir
[ADR 0007](../adr/0007-ceph-demo-mono-serveur.md) pour le détail des choix et
des contournements de bugs.
## État attendu
| Composant | Attendu |
|---|---|
| mon | 1, `sd-124443` |
| mgr | 1 actif + 1 standby |
| osd | 1, up et in, mode `raw` sur `/dev/loop0` |
| Pools | 0 en temps normal (démo seulement, rien de permanent stocké) |
```
sudo /usr/sbin/cephadm shell -- ceph -s
```
`HEALTH_WARN` est normal et attendu (1 seul OSD < taille de réplication par
défaut) — pas une alerte à traiter.
## Où sont les choses
- Config et clés : `/etc/ceph/ceph.conf`, `/etc/ceph/ceph.client.admin.keyring`.
- Fichier épars de l'OSD (20 Go, alloué à l'usage réel) : `/var/lib/ceph-osd-demo/osd0.img`.
- Service qui réattache ce fichier en `/dev/loop0` au démarrage : `/etc/systemd/system/ceph-osd-demo-loop.service` (copie suivie dans le dépôt : `infra/ceph/ceph-osd-demo-loop.service`, pas encore déployé par Ansible).
- cephadm gère les daemons comme des conteneurs podman (`sudo podman ps`), pas docker (utilisé par Kolla et le portail) — deux runtimes de conteneurs coexistent sur ce serveur, sans conflit.
## Commandes utiles
```
# Santé du cluster
sudo /usr/sbin/cephadm shell -- ceph -s
# Lister les daemons
sudo /usr/sbin/cephadm ls
# RAM : à surveiller avant/après toute action Ceph (colonne "available",
# pas "free" — c'est elle qui compte vraiment)
free -h
```
## Pourquoi RAM et disque sont serrés
Le serveur a réellement **31 Go de RAM** et **230 Go en RAID 1** (pas 64 Go /
2×500 Go comme décrit dans le CLAUDE.md — à corriger si une vraie mise à
jour matérielle est faite). OpenStack (Kolla, MariaDB Galera, Nova/qemu) et
le portail Laravel tournent déjà sur cette même machine. Avant d'ajouter
quoi que ce soit à ce cluster (dashboard, supervision, un 2ᵉ OSD), vérifier
`free -h` : viser au moins 2 Go « disponibles » de marge.
## Nettoyer entièrement la démo (si besoin de récupérer la RAM/le disque)
```
ssh paillasse
sudo /usr/sbin/cephadm ls # récupérer le fsid
sudo /usr/sbin/cephadm rm-cluster --fsid <fsid> --force
sudo losetup -d /dev/loop0
sudo systemctl disable --now ceph-osd-demo-loop.service
sudo rm /etc/systemd/system/ceph-osd-demo-loop.service
sudo rm -rf /var/lib/ceph-osd-demo
sudo rm /etc/apt/sources.list.d/ceph.list /usr/share/keyrings/ceph.gpg
sudo apt-get update
```
## Écueils rencontrés (pour ne pas les redécouvrir)
- **`ceph orch daemon add osd <hôte>:<périphérique>` plante** sur un
périphérique loop (`IndexError`, bug de classification de `ceph-volume`,
reproduit sur Pacific et Reef). Contournement : ajouter `raw` en second
argument séparé : `ceph orch daemon add osd <hôte>:<périphérique> raw`
(la syntaxe `périphérique,method=raw` est refusée par la CLI).
- **cephadm veut du SSH root** même pour gérer l'hôte local — incompatible
avec `PermitRootLogin no`. Toujours bootstrapper avec `--ssh-user adam`.
- **Mélanger une image Ceph et un `cephadm` de version différente échoue**
(`Container release reef != cephadm release pacific`) : installer le
`cephadm` du dépôt officiel de la même version que l'image voulue, pas
forcer avec `--allow-mismatched-release`.