# 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 : 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.