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