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

View file

@ -0,0 +1,89 @@
# ADR 0007 — Ceph : démo mono-serveur avec cephadm, image Reef, OSD en mode raw
- **Date** : 2026-10-14
- **Statut** : accepté
## Contexte
Bloc C du CLAUDE.md : « Ceph comme stockage d'OpenStack (Glance, Cinder) :
démo mono-serveur d'abord, vrai cluster au 2ᵉ serveur. » Avant de commencer,
vérification de l'état réel du serveur (`free -h`, `lsblk`) : **31 Go de RAM
réels, pas 64 Go** comme décrit dans le CLAUDE.md, dont 400-800 Mo
« libres » mais ~6-7 Go « disponibles » (`available`, ce qui compte vraiment :
mémoire + cache récupérable) au moment du chantier. Décision d'Adam
(2026-10-14, après avoir vu ces chiffres) : démo quand même, a minima (1 mon,
1 mgr, 1 OSD, sans pile de supervision intégrée), sous surveillance de la RAM
à chaque étape.
`enable_cinder: "no"` dans `/etc/kolla/globals.yml` : Cinder n'est pas
activé sur ce déploiement, donc cette démo Ceph n'a aucune interaction avec
OpenStack pour l'instant — elle est entièrement isolée.
## Décisions et pourquoi
**`cephadm`, pas une installation manuelle des paquets `ceph-mon`/`ceph-osd`.**
C'est l'outil de déploiement officiel et le plus proche de ce qu'opère une
équipe SRE en production (conteneurs gérés, upgrade orchestré). Installé
depuis les dépôts Debian (paquet `cephadm`), pas par `curl | bash` (même
leçon que NodeSource, voir `docs/dette.md`).
**`--ssh-user adam`, pas root.** cephadm gère même l'hôte local par SSH (son
modèle d'orchestrateur), avec `root` par défaut. Notre durcissement SSH de la
semaine 1 interdit `PermitRootLogin` (`/etc/ssh/sshd_config.d/99-durcissement.conf`).
Plutôt que d'affaiblir cette règle pour un chantier de démo, cephadm utilise
le compte `adam` (déjà en sudo sans mot de passe, déjà seul compte autorisé
en SSH) : aucune modification de la configuration SSH.
**Image `quay.io/ceph/ceph:v18` (Reef), pas la `v16` (Pacific) par défaut
du paquet Debian 12.** `ceph-volume lvm batch` (le code qui prépare un
disque pour un OSD) plante avec une erreur interne (`IndexError:
list index out of range`, bug de classification des périphériques loop)
sur Pacific **et** sur Reef — le changement de version n'a donc pas corrigé
ce bug précis, mais Reef reste la version utilisée (plus récente, mieux
suivie) pour tout le reste. Il a fallu ajouter le dépôt APT officiel Ceph
Reef (clé GPG vérifiée, `download.ceph.com/debian-reef`) car `cephadm`
refuse de piloter une image d'une version différente de la sienne
(`Container release reef != cephadm release pacific`).
**OSD en mode `raw`, pas `lvm` (défaut).** La vraie cause du plantage :
`ceph-volume` classe à tort un périphérique loop comme « déjà LVM » puis
plante en cherchant un volume logique qui n'existe pas. Contournement
trouvé : `ceph orch daemon add osd <hôte>:<périphérique> raw` (syntaxe à
deux arguments séparés, pas `device,method=raw` qui est refusé). Le mode
`raw` ne construit pas de volume logique par-dessus le périphérique — il
évite entièrement le code de classification fautif.
**Périphérique loop sur un fichier épars (20 Go), pas un disque dédié.**
Les deux disques du serveur sont entièrement pris par le RAID 1 `/` — aucun
disque ni partition libre pour un vrai OSD. `/var/lib/ceph-osd-demo/osd0.img`
(`fallocate`, 20 Go, espace alloué à l'usage réel seulement) monté en
`/dev/loop0`. Rendu permanent par un service systemd dédié
(`infra/ceph/ceph-osd-demo-loop.service`, réattache le fichier au démarrage,
avant que Ceph ne cherche son disque). Pas destiné à durer : le « vrai
cluster » du CLAUDE.md, avec de vrais disques, arrivera au 2ᵉ serveur.
**`osd_pool_default_size`/`min_size` à 1.** Avec un seul OSD, aucune
réplication n'est possible. Valeur acceptée uniquement parce que c'est une
démo sans donnée réelle — jamais à reproduire pour un usage réel.
**Pile de supervision Ceph (Prometheus/Grafana/Alertmanager intégrés à
cephadm) désactivée (`--skip-monitoring-stack`), pas de tableau de bord
(`--skip-dashboard`).** Pour limiter l'empreinte mémoire ; Paillasse a déjà
son propre Prometheus/Grafana (CX23, hors de ce serveur) — un exporter Ceph
pourrait y être ajouté plus tard si le besoin de supervision réel se
confirme.
## Conséquences
- Cluster à 1 mon, 1 mgr (+ 1 mgr standby), 1 OSD, fonctionnel, vérifié par
une vraie écriture/lecture d'objet (`rados put`/`rados get`, contenu
identique). Aucune intégration avec Glance/Cinder (Cinder est désactivé).
- RAM disponible restée stable (~6-7 Go) pendant tout le chantier — pas
d'incident, mais marge réelle plus faible que ce que suppose le CLAUDE.md.
Voir `docs/dette.md`.
- Pas de rejouabilité Ansible pour l'instant (bootstrap fait à la main, comme
celui de Kolla à l'étape 2) : à écrire si cette démo doit durer au-delà de
l'évaluation du bloc C.
- Risque pour la suite : ajouter des daemons Ceph supplémentaires (plus
d'OSD, dashboard, supervision) sur ce même serveur réduira encore la marge
mémoire déjà tendue. Le « vrai cluster » attendra le 2ᵉ serveur.