Stockage
Vue d’ensemble

Stockage distribué (dans le contexte de nos serveurs)
Qu'est-ce que le stockage distribué?
Le stockage distribué consiste à répartir les données sur plusieurs serveurs physiques de manière transparente. Au lieu d'avoir un seul serveur dédié au stockage, tous les disques de tous les serveurs participent à un pool commun, géré comme s'il s'agissait d'une seule ressource.
Ceph
Ceph est une plateforme de stockage distribué open-source qui unifie tous les disques de nos différents serveurs physiques en un seul système de stockage cohérent.
Ceph vs RAID — Quelle différence?
Pour comprendre l'intérêt de Ceph, il faut d'abord comprendre le RAID traditionnel :
RAID (Redundant Array of Independent Disks) est une technologie qui regroupe plusieurs disques dans un même serveur pour obtenir redondance et/ou performance. Les types courants :
RAID 0 — Striping pur. Les données sont réparties en blocs sur tous les disques. Performance maximale, zéro redondance. Un seul disque en panne = perte totale.
RAID 1 — Mirroring. Chaque donnée est écrite deux fois (sur deux disques). Redondance totale, mais 50% de l'espace est "perdu" en copie.
RAID 5 — Striping avec parité distribuée. 3 disques minimum. Tolère la panne d'un seul disque. Bon compromis performance/espace/redondance.
RAID 6 — Comme RAID 5, mais avec deux blocs de parité. Tolère la panne de deux disques simultanément.
RAID 10 — Combinaison de RAID 1 + RAID 0. Mirroring ET striping. Redondant et performant, mais coûteux en espace.
La limite fondamentale du RAID : il est local à un serveur. Si le serveur lui-même tombe en panne (alimentation, carte mère, incendie), toutes les données sont inaccessibles, peu importe la configuration RAID.
Ceph résout ce problème en distribuant les données entre plusieurs serveurs :
Critère | RAID | Ceph |
|---|---|---|
Périmètre | Un seul serveur | Cluster multi-serveurs |
Redondance | Disques du même serveur | Serveurs différents |
Mise à l'échelle | Limitée aux slots du serveur | Horizontale (ajouter des serveurs) |
Point de défaillance unique | Le serveur lui-même | Aucun (si bien configuré) |
Gestion | Simple, firmware/OS | Complexe, logicielle |
Avec Ceph, chaque objet de données est répliqué (par défaut 3 copies) sur des serveurs distincts. Si un serveur entier disparaît, les données restent accessibles via les autres nœuds, et Ceph se répare automatiquement en re-répliquant les données manquantes.
Architecture Ceph en bref
Ceph repose sur quelques composants clés :
OSD (Object Storage Daemon) — Un processus par disque physique. Il stocke les données, gère la réplication, et communique avec les autres OSDs.
MON (Monitor) — Maintient la "carte" du cluster (le cluster map). Minimum 3 monitors pour la haute disponibilité.
MGR (Manager) — Collecte les métriques, expose les dashboards, gère les modules de monitoring.
CRUSH Algorithm — L'algorithme qui décide où placer les données dans le cluster. Il garantit une distribution uniforme et permet de définir des règles de placement (ex : « ne jamais mettre deux copies sur le même rack »).
Les trois interfaces de Ceph
Ceph expose le même cluster de stockage via trois interfaces distinctes selon les besoins.
Ceph Block Device (RBD)
Le Ceph Block Device (RBD — RADOS Block Device) présente le stockage Ceph comme un disque virtuel, identique à un disque dur classique du point de vue du système d'exploitation.
Comment ça fonctionne : RBD découpe un "volume" en petits objets (généralement 4MB) distribués dans le cluster. L'OS ou l'hyperviseur voit simplement un périphérique bloc /dev/rbd0.
Cas d'usage typiques :
Disques de machines virtuelles (KVM, Proxmox, OpenStack)
Volumes persistants dans Kubernetes via le driver CSI de Ceph
Base de données nécessitant un stockage bloc rapide
Avantages : snapshots, redimensionnement à chaud, réplication intégrée.
Ceph File System (CephFS)
Le Ceph File System est un système de fichiers POSIX complet distribué — c'est-à-dire qu'il se monte comme un dossier classique (mount -t ceph) et supporte toutes les opérations de fichiers standard.
C'est ce que nous utilisons dans nos clusters Kubernetes.
Rook
Rook est l'opérateur Kubernetes qui gère notre cluster Ceph. Au lieu de configurer Ceph manuellement, Rook permet de déclarer l'état souhaité du stockage en YAML, comme n'importe quelle autre ressource Kubernetes.
Rook s'occupe de :
Déployer et configurer les MONs, MGRs, et OSDs en tant que pods
Gérer les mises à jour et la récupération après panne
Exposer CephFS via des
StorageClassKubernetesGérer le driver CSI pour provisionner des
PersistentVolumeClaims
Flux typique dans nos clusters :
Un pod Kubernetes demande un
PersistentVolumeClaimavec notreStorageClassCephFSLe CSI driver de Rook/Ceph crée un sous-répertoire ou un volume CephFS
Le volume est monté dans le pod — le pod voit un dossier normal
Les données sont distribuées et répliquées automatiquement dans le cluster Ceph sous-jacent
Pourquoi CephFS plutôt que RBD pour Kubernetes? CephFS supporte le mode ReadWriteMany (RWX) — plusieurs pods sur plusieurs nœuds peuvent monter le même volume en lecture/écriture simultanément. RBD est limité à ReadWriteOnce (un seul nœud à la fois).
Ceph Object Storage (S3 / RADOS Gateway)
Le RADOS Gateway (RGW) expose le stockage Ceph via une API compatible S3 (et Swift). C'est l'équivalent d'un AWS S3 auto-hébergé.
Interface : HTTP/HTTPS avec les mêmes appels API que S3 (PUT, GET, DELETE sur des buckets/objets).
Cas d'usage typiques :
Backups applicatifs
Stockage de fichiers statiques, assets
Archivage de logs
Tout ce qu'on mettrait normalement dans un bucket S3
Vue dans proxmox

Object Storage (principalement pour les backups)
Object Storage (principalement pour les backups)
Nous utilisons deux solutions de stockage objet, suivant la règle 3-2-1 : une copie primaire on-premise et une copie distante hors site. pour plus d’info → Backups
Garage HQ — Serveur object storage open-source auto-hébergé, compatible API S3. C'est notre destination primaire pour les backups.
Backblaze B2 — Service cloud compatible S3. Sert de copie distante (offsite) pour protéger contre une perte physique au HQ.
Bases de données (pour des déploiements)
Nous hébergeons plusieurs bases de données pour différents déploiements.
SQL
Nous préférons offrir des bases de données CNPG (CloudNativePG) pour les déploiements qui nécessitent une base relationnelle. CNPG est un opérateur Kubernetes qui gère le cycle de vie complet d'un cluster PostgreSQL (failover, backups, réplicas).
Nous devons parfois déployer MySQL ou MariaDB lorsqu'une application l'exige et qu'elle ne supporte pas PostgreSQL.
NoSQL
Pareillement, certaines applications nécessitent du NoSQL — nous hébergeons des bases de données MongoDB dans ces cas.
Cache
Pour la mise en cache, nous déployons Redis/Valkey
Amélioration Continue
Points Positifs
Stockage distribué avec Ceph élimine les points de défaillance unique au niveau serveur
Utilisations de S3 pour backups (Garage HQ + Backblaze offsite)
CephFS via Rook permet le mode ReadWriteMany pour les workloads Kubernetes qui en ont besoin
PostgreSQL (CNPG) comme standard pour les bases relationnelles — opérateur mature avec failover et backups intégrés
Infrastructure majoritairement gérée en YAML/Kubernetes (Rook, CNPG), ce qui la rend reproductible et versionnable
Usage exact de Ceph RBD dans Proxmox pour les VMs
…
Points à améliorer
Utilisations de Ceph S3 pour les volumes, possible amélioration
MySQL/MariaDB et MongoDB déployés via Helm charts ou docker image sans opérateur dédié — moins de HA et de gestion automatisée comparé à CNPG
Redis/Valkey déployé mais pourrait être analyser leur performance et même CNPG permet de faire de la cache
Meilleur utilisation de S3 pour des déploiements si ceux-ci le supporte (avoir les données sur garage HQ par S3 au lieu de ceph pour certaines choses comme des fichiers binaires…)
Faire des analyses de vitesses et de débit d’écriture et lecture et quels outils nous permettrait de le faire
Pour possiblement améliorer la rapidité des bases de données, avoir leur storage directement sur un SSD par serveur au lieu de passer par Ceph FS.