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>
89 lines
5 KiB
Markdown
89 lines
5 KiB
Markdown
# 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.
|