Paillasse/docs/adr/0007-ceph-demo-mono-serveur.md
Adam Belkacemi cdf79d2823 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>
2026-10-14 12:20:48 +02:00

5 KiB

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.