Paillasse/docs/adr/0007-ceph-demo-mono-serveur.md

90 lines
5 KiB
Markdown
Raw Normal View History

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