![]()
OpenEBS transforme les disques locaux de vos nœuds Kubernetes en stockage persistant haute performance, répliqué via NVMe-oF (NVMe over Fabrics). Projet CNCF Sandbox, il suit le modèle Container Attached Storage (CAS) : le plan de données tourne dans des pods, au plus près des applications. Ce guide vous accompagne du déploiement d’un cluster 3 nœuds à la création de volumes répliqués, snapshots et LocalPV, avec toutes les commandes testées sur Ubuntu 24.04.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Architecture CAS : moteur io-engine, DiskPools, réplication NVMe-oF
- Deux moteurs de stockage : Replicated PV Mayastor et LocalPV Hostpath
- Lab complet : déployer OpenEBS 4.4 sur 3 VMs KVM avec k3s
- Volumes répliqués : StorageClass, PVC, déploiement PostgreSQL
- Snapshots : sauvegarder et restaurer un volume
- Dépannage et bonnes pratiques : diagnostic, dimensionnement, sécurité
Qu’est-ce qu’OpenEBS ?
Section intitulée « Qu’est-ce qu’OpenEBS ? »OpenEBS est une solution de stockage persistant pour Kubernetes créée en 2017 par MayaData (aujourd’hui DataCore). Contrairement aux solutions de stockage distribué traditionnelles (Ceph, GlusterFS) qui fonctionnent en dehors de Kubernetes, OpenEBS s’exécute entièrement dans le cluster sous forme de pods.
Analogie : imaginez un immeuble de bureaux (votre cluster Kubernetes). Au lieu de stocker vos dossiers dans un entrepôt externe (stockage réseau classique), chaque étage dispose de ses propres armoires sécurisées (les DiskPools). Un système de coursiers ultra-rapides (le protocole NVMe-oF) fait des copies de chaque dossier dans les armoires des autres étages. Si un étage est inondé, les copies restent accessibles depuis les autres étages, sans interruption.
Ce qui distingue OpenEBS
Section intitulée « Ce qui distingue OpenEBS »| Caractéristique | Description |
|---|---|
| Container Attached Storage | Le plan de données tourne dans des pods Kubernetes, pas sur un cluster externe |
| NVMe over Fabrics | Réplication via le protocole NVMe-oF, plus rapide que iSCSI |
| Moteurs multiples | Replicated PV Mayastor (HA), LocalPV Hostpath, LocalPV LVM, LocalPV ZFS |
| Kubernetes-natif | Installation via Helm, configuration via CRD (DiskPool, StorageClass) |
| CNCF Sandbox | Projet hébergé par la Cloud Native Computing Foundation |
| Open source | Licence Apache 2.0, développé par DataCore |
OpenEBS vs alternatives
Section intitulée « OpenEBS vs alternatives »| Critère | OpenEBS (Mayastor) | Longhorn | Rook-Ceph | NFS classique |
|---|---|---|---|---|
| Protocole | NVMe-oF | iSCSI | RADOS (propriétaire) | NFS |
| Performance | Très élevée | Modérée | Élevée | Faible |
| Complexité | Modérée | Faible | Élevée | Très faible |
| CPU par nœud | 2 cœurs dédiés | Faible | Variable | Négligeable |
| Prérequis noyau | HugePages + nvme-tcp | Aucun | Aucun | Aucun |
| Interface web | Non | Oui | Dashboard Ceph | Non |
| Cas d’usage idéal | Bases de données, performance | Petits clusters, simplicité | Cloud privé complet | Partages simples |
Architecture et concepts clés
Section intitulée « Architecture et concepts clés »Le modèle Container Attached Storage
Section intitulée « Le modèle Container Attached Storage »OpenEBS suit le modèle CAS (Container Attached Storage) : chaque volume est géré par son propre contrôleur, tournant dans un pod Kubernetes. Cette approche offre une isolation par workload et permet de configurer le stockage différemment pour chaque application.
Les composants fondamentaux
Section intitulée « Les composants fondamentaux »Le plan de contrôle et le plan de données d’OpenEBS Mayastor s’articulent autour de plusieurs composants :
-
io-engine : le moteur de données Mayastor. Un DaemonSet qui tourne sur chaque nœud labellisé. Il gère les DiskPools, la réplication NVMe-oF et les I/O. Chaque pod io-engine réserve 2 cœurs CPU exclusifs et 2 GiB de HugePages.
-
agent-core : le cerveau du plan de contrôle. Il orchestre la création des volumes, la répartition des réplicas et le basculement en cas de panne.
-
csi-controller / csi-node : les composants CSI (Container Storage Interface) qui font le lien entre Kubernetes (PVC, StorageClass) et Mayastor. Le controller gère le provisionnement, les csi-node montent les volumes dans les pods.
-
DiskPool : un CRD (Custom Resource Definition) qui représente un disque physique géré par Mayastor. Chaque DiskPool est associé à un nœud et un disque dédié. Les volumes répliqués répartissent leurs réplicas sur plusieurs DiskPools.
-
etcd : cluster etcd dédié à Mayastor pour stocker les métadonnées des volumes (indépendant de l’etcd de Kubernetes).
-
NATS : bus de messages pour la communication entre les composants du plan de contrôle.
-
localpv-provisioner : provisionne les volumes LocalPV Hostpath (stockage local sans réplication, pour les workloads tolérants aux pannes).
Deux moteurs de stockage
Section intitulée « Deux moteurs de stockage »| Moteur | Réplication | Performance | Cas d’usage |
|---|---|---|---|
| Replicated PV Mayastor | Oui (1 à 3 réplicas) | Très élevée (NVMe-oF) | Bases de données, workloads critiques |
| LocalPV Hostpath | Non (local uniquement) | Maximale (accès disque direct) | Caches, données régénérables, CI/CD |
| LocalPV LVM | Non | Élevée | Thin provisioning, snapshots locaux |
| LocalPV ZFS | Non | Élevée | Compression, déduplication, snapshots |
Lab : déployer OpenEBS 4.4 sur 3 nœuds
Section intitulée « Lab : déployer OpenEBS 4.4 sur 3 nœuds »Prérequis
Section intitulée « Prérequis »- 3 machines virtuelles Ubuntu 24.04 (KVM, Proxmox ou cloud)
- 4 vCPU et 8 Go de RAM minimum par VM
- 1 disque système (25 Go) + 1 disque dédié aux DiskPools (10 Go minimum) par VM
- Noyau Linux 5.13+ avec le module
nvme-tcp - HugePages 2 MiB configurés (1024 pages = 2 GiB)
Créer les VMs avec KVM
Section intitulée « Créer les VMs avec KVM »Le script suivant crée 3 VMs avec cloud-init, chacune avec 2 disques :
#!/bin/bash# Créer 3 VMs pour le lab OpenEBSIMAGE="/var/lib/libvirt/images/ubuntu-24.04-cloud.img"
for i in 1 2 3; do # Disque système (backing file pour économiser de l'espace) qemu-img create -f qcow2 -b "$IMAGE" -F qcow2 \ /var/lib/libvirt/images/openebs${i}.qcow2 25G
# Disque dédié aux DiskPools (vierge) qemu-img create -f qcow2 \ /var/lib/libvirt/images/openebs${i}-data.qcow2 10G
virt-install --name openebs${i} \ --ram 8192 --vcpus 4 \ --disk /var/lib/libvirt/images/openebs${i}.qcow2 \ --disk /var/lib/libvirt/images/openebs${i}-data.qcow2 \ --os-variant ubuntu24.04 \ --cloud-init user-data=cloud-init.yaml \ --network network=default \ --graphics none --noautoconsoledoneLe fichier cloud-init configure les HugePages, le module nvme-tcp et les
paquets nécessaires :
#cloud-confighostname: openebs1 # Adapter pour chaque nœudusers: - name: bob groups: sudo shell: /bin/bash sudo: ALL=(ALL) NOPASSWD:ALL ssh_authorized_keys: - ssh-ed25519 AAAA... votre-clé-publiquepackages: - open-iscsi - nfs-commonbootcmd: # Configurer les HugePages (1024 × 2 MiB = 2 GiB) - echo "vm.nr_hugepages = 1024" >> /etc/sysctl.d/99-hugepages.conf - sysctl -p /etc/sysctl.d/99-hugepages.confruncmd: # Charger le module noyau NVMe-TCP - apt-get install -y linux-modules-extra-$(uname -r) - modprobe nvme-tcp - echo "nvme-tcp" >> /etc/modules-load.d/nvme-tcp.confInstaller k3s et préparer le cluster
Section intitulée « Installer k3s et préparer le cluster »-
Installer k3s sur le premier nœud (control plane)
k3s est une distribution Kubernetes légère, idéale pour les labs. On désactive Traefik pour alléger le cluster :
Fenêtre de terminal curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable traefik" sh -Vérification :
Fenêtre de terminal sudo kubectl get nodes# NAME STATUS ROLES AGE VERSION# openebs1 Ready control-plane,master 1m v1.34.4+k3s1 -
Récupérer le token d’enregistrement
Fenêtre de terminal sudo cat /var/lib/rancher/k3s/server/node-token -
Joindre les agents (sur openebs2 et openebs3)
Fenêtre de terminal curl -sfL https://get.k3s.io | K3S_URL=https://openebs1:6443 \K3S_TOKEN="<token>" sh -Vérification (depuis openebs1) :
Fenêtre de terminal sudo kubectl get nodes# NAME STATUS ROLES AGE VERSION# openebs1 Ready control-plane,master 5m v1.34.4+k3s1# openebs2 Ready <none> 1m v1.34.4+k3s1# openebs3 Ready <none> 1m v1.34.4+k3s1 -
Vérifier les prérequis sur chaque nœud
Avant d’installer OpenEBS, vérifiez que chaque nœud dispose des HugePages et du module nvme-tcp :
Fenêtre de terminal # HugePages (doit afficher 1024)cat /proc/sys/vm/nr_hugepages# 1024# Module nvme-tcp chargélsmod | grep nvme_tcp# nvme_tcp ...# Disque dédié disponible (vierge, sans partitions)lsblk /dev/vdb# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS# vdb 252:16 0 10G 0 disk -
Labelliser les nœuds pour Mayastor
Le DaemonSet io-engine ne se déploie que sur les nœuds portant le label
openebs.io/engine=mayastor:Fenêtre de terminal kubectl label node openebs1 openebs2 openebs3 \openebs.io/engine=mayastor
Installer OpenEBS avec Helm
Section intitulée « Installer OpenEBS avec Helm »-
Ajouter le dépôt Helm et installer
Fenêtre de terminal helm repo add openebs https://openebs.github.io/openebshelm repo updatehelm install openebs openebs/openebs \--namespace openebs --create-namespace \--version 4.4.0 \--set engines.replicated.mayastor.enabled=true \--set loki.enabled=false \--set alloy.enabled=falseLes options
loki.enabled=falseetalloy.enabled=falsedésactivent la stack de logging intégrée, inutile en lab. -
Vérifier le déploiement
Attendez 2 à 3 minutes que tous les pods démarrent :
Fenêtre de terminal kubectl get pods -n openebsNAME READY STATUS AGEopenebs-agent-core-5b7f8c5b9-x2g7k 2/2 Running 2mopenebs-api-rest-6c8f5d4b7-7q9zv 1/1 Running 2mopenebs-csi-controller-0 6/6 Running 2mopenebs-csi-node-xxxxx 2/2 Running 2m (×3)openebs-etcd-0 1/1 Running 2m (×3)openebs-io-engine-xxxxx 2/2 Running 2m (×3)openebs-localpv-provisioner-xxx 1/1 Running 2mopenebs-nats-0 3/3 Running 2m (×3)openebs-obs-callhome-xxx 2/2 Running 2mopenebs-operator-diskpool-xxx 1/1 Running 2mLes pods io-engine (un par nœud labellisé) sont les plus critiques : ils gèrent les I/O et la réplication.
Si les pods io-engine restent en Pending :
Fenêtre de terminal kubectl describe pod -n openebs -l app=io-engine | grep -A5 EventsCause la plus fréquente :
Insufficient cpu. Le io-engine exige 2 cœurs CPU exclusifs. Vos VMs doivent avoir au moins 4 vCPU.
Créer les DiskPools
Section intitulée « Créer les DiskPools »Un DiskPool associe un disque physique à Mayastor. Chaque nœud héberge un ou plusieurs DiskPools qui servent de réservoirs pour les réplicas de volumes.
apiVersion: openebs.io/v1beta3kind: DiskPoolmetadata: name: pool-openebs1 namespace: openebsspec: node: openebs1 disks: - uring:///dev/disk/by-path/virtio-pci-0000:05:00.0---apiVersion: openebs.io/v1beta3kind: DiskPoolmetadata: name: pool-openebs2 namespace: openebsspec: node: openebs2 disks: - uring:///dev/disk/by-path/virtio-pci-0000:05:00.0---apiVersion: openebs.io/v1beta3kind: DiskPoolmetadata: name: pool-openebs3 namespace: openebsspec: node: openebs3 disks: - uring:///dev/disk/by-path/virtio-pci-0000:05:00.0Vérification :
kubectl get dsp -n openebsNAME NODE STATE POOL-STATUS CAPACITY USED AVAILABLEpool-openebs1 openebs1 Created Online 10 GiB 0 B 10 GiBpool-openebs2 openebs2 Created Online 10 GiB 0 B 10 GiBpool-openebs3 openebs3 Created Online 10 GiB 0 B 10 GiBLes trois pools sont Online avec 10 GiB de capacité chacun. Si un pool reste en état Creating, vérifiez les logs du pod io-engine correspondant :
kubectl logs -n openebs -l app=io-engine --tail=20Volumes répliqués avec Mayastor
Section intitulée « Volumes répliqués avec Mayastor »Créer un StorageClass répliqué
Section intitulée « Créer un StorageClass répliqué »L’installation crée par défaut un StorageClass openebs-single-replica
(1 réplica). Pour la haute disponibilité, créez un StorageClass avec 3
réplicas :
apiVersion: storage.k8s.io/v1kind: StorageClassmetadata: name: openebs-replicatedparameters: protocol: nvmf repl: "3"provisioner: io.openebs.csi-mayastorallowVolumeExpansion: truereclaimPolicy: DeletevolumeBindingMode: ImmediateLe paramètre protocol: nvmf active le transport NVMe over Fabrics pour la
réplication entre les nœuds. Le paramètre repl: "3" crée 3 copies de
chaque volume, une par DiskPool.
Déployer PostgreSQL sur un volume répliqué
Section intitulée « Déployer PostgreSQL sur un volume répliqué »-
Créer la PVC
apiVersion: v1kind: PersistentVolumeClaimmetadata:name: pgdata-replicatedspec:accessModes:- ReadWriteOncestorageClassName: openebs-replicatedresources:requests:storage: 2GiVérification :
Fenêtre de terminal kubectl get pvc pgdata-replicated# NAME STATUS VOLUME CAPACITY STORAGECLASS# pgdata-replicated Bound pvc-044150cf-302d-44f5-8b8b-9b7ef66b2889 2Gi openebs-replicated -
Vérifier la réplication
Chaque DiskPool consomme maintenant 2 GiB (une copie du volume par pool) :
Fenêtre de terminal kubectl get dsp -n openebs# NAME NODE STATE POOL-STATUS CAPACITY USED AVAILABLE# pool-openebs1 openebs1 Created Online 10 GiB 2 GiB 8 GiB# pool-openebs2 openebs2 Created Online 10 GiB 2 GiB 8 GiB# pool-openebs3 openebs3 Created Online 10 GiB 2 GiB 8 GiB -
Déployer PostgreSQL
apiVersion: apps/v1kind: Deploymentmetadata:name: postgresspec:replicas: 1selector:matchLabels:app: postgrestemplate:metadata:labels:app: postgresspec:containers:- name: postgresimage: postgres:16-alpineenv:- name: POSTGRES_PASSWORDvalue: openebs-demo- name: PGDATAvalue: /var/lib/postgresql/data/pgdataports:- containerPort: 5432volumeMounts:- name: pgdatamountPath: /var/lib/postgresql/datavolumes:- name: pgdatapersistentVolumeClaim:claimName: pgdata-replicated -
Tester l’écriture et la lecture
Fenêtre de terminal kubectl exec -it deploy/postgres -- psql -U postgres -c "CREATE TABLE test_openebs (id SERIAL PRIMARY KEY,message TEXT,created_at TIMESTAMP DEFAULT NOW());INSERT INTO test_openebs (message) VALUES ('Hello OpenEBS Mayastor!');INSERT INTO test_openebs (message) VALUES ('Réplication 3x NVMe-oF');SELECT * FROM test_openebs;"id | message | created_at----+-------------------------+----------------------------1 | Hello OpenEBS Mayastor! | 2026-03-01 11:57:25.0273072 | Réplication 3x NVMe-oF | 2026-03-01 11:57:25.027307(2 rows)
LocalPV Hostpath
Section intitulée « LocalPV Hostpath »Pour les workloads qui n’ont pas besoin de réplication (caches, données régénérables, CI/CD), OpenEBS fournit LocalPV Hostpath. Ce moteur crée des répertoires sur le système de fichiers local du nœud, sans surcoût de réplication.
Le StorageClass openebs-hostpath est créé automatiquement par Helm :
apiVersion: v1kind: PersistentVolumeClaimmetadata: name: local-testspec: accessModes: - ReadWriteOnce storageClassName: openebs-hostpath resources: requests: storage: 1Gi---apiVersion: v1kind: Podmetadata: name: busybox-localspec: containers: - name: busybox image: busybox:1.36 command: ["sh", "-c", "echo 'LocalPV Hostpath OK' > /data/test.txt && cat /data/test.txt && sleep 3600"] volumeMounts: - name: data mountPath: /data volumes: - name: data persistentVolumeClaim: claimName: local-testVérification :
kubectl logs busybox-local# LocalPV Hostpath OKSnapshots et restauration
Section intitulée « Snapshots et restauration »Les VolumeSnapshots permettent de sauvegarder l’état d’un volume à un instant donné. Combinés avec la réplication Mayastor, ils offrent une protection complète des données.
-
Créer un VolumeSnapshotClass
apiVersion: snapshot.storage.k8s.io/v1kind: VolumeSnapshotClassmetadata:name: openebs-mayastor-snapshotclassdriver: io.openebs.csi-mayastordeletionPolicy: Delete -
Prendre un snapshot
apiVersion: snapshot.storage.k8s.io/v1kind: VolumeSnapshotmetadata:name: pgdata-snapshotspec:volumeSnapshotClassName: openebs-mayastor-snapshotclasssource:persistentVolumeClaimName: pgdata-replicatedVérification :
Fenêtre de terminal kubectl get volumesnapshot pgdata-snapshot# NAME READYTOUSE SOURCEPVC RESTORESIZE SNAPSHOTCLASS# pgdata-snapshot true pgdata-replicated 2Gi openebs-mayastor-snapshotclass -
Restaurer depuis un snapshot
Créez une nouvelle PVC avec le snapshot comme source de données :
apiVersion: v1kind: PersistentVolumeClaimmetadata:name: pgdata-restoredspec:accessModes:- ReadWriteOncestorageClassName: openebs-replicatedresources:requests:storage: 2GidataSource:name: pgdata-snapshotkind: VolumeSnapshotapiGroup: snapshot.storage.k8s.io -
Vérifier l’intégrité des données
Montez la PVC restaurée dans un nouveau pod et vérifiez que les données sont intactes :
Fenêtre de terminal kubectl exec postgres-restored -- psql -U postgres -c \"SELECT * FROM test_openebs;"id | message | created_at----+-------------------------+----------------------------1 | Hello OpenEBS Mayastor! | 2026-03-01 11:57:25.0273072 | Réplication 3x NVMe-oF | 2026-03-01 11:57:25.027307(2 rows)
Commandes essentielles
Section intitulée « Commandes essentielles »DiskPools et volumes
Section intitulée « DiskPools et volumes »# Lister les DiskPools avec leur capacitékubectl get dsp -n openebs
# Détails d'un DiskPool (événements, erreurs)kubectl describe dsp pool-openebs1 -n openebs
# Lister les StorageClasses OpenEBSkubectl get sc | grep openebs
# Vérifier les PVC et leurs volumeskubectl get pvc
# Inspecter un PV Mayastor (réplicas, protocole)kubectl describe pv <nom-du-pv>
# Lister les snapshotskubectl get volumesnapshotPods et diagnostics
Section intitulée « Pods et diagnostics »# État des pods OpenEBSkubectl get pods -n openebs -o wide
# Logs du plan de contrôlekubectl logs -n openebs deploy/openebs-agent-core -c agent-core
# Logs d'un io-engine spécifiquekubectl logs -n openebs -l app=io-engine \ --field-selector spec.nodeName=openebs1
# Logs de l'API REST Mayastorkubectl logs -n openebs deploy/openebs-api-rest
# Version d'OpenEBS installéehelm list -n openebsNœuds et labels
Section intitulée « Nœuds et labels »# Vérifier les labels Mayastorkubectl get nodes --show-labels | grep openebs
# Ajouter le label io-engine à un nouveau nœudkubectl label node nouveau-noeud openebs.io/engine=mayastor
# Retirer le label (décommissionner un nœud)kubectl label node ancien-noeud openebs.io/engine-Sécurité
Section intitulée « Sécurité »Chiffrement au repos
Section intitulée « Chiffrement au repos »Depuis la version 4.3, Mayastor supporte le chiffrement au repos des DiskPools. Les données sont chiffrées avant d’être écrites sur le disque, protégeant contre le vol physique de disques :
apiVersion: openebs.io/v1beta3kind: DiskPoolmetadata: name: pool-chiffre namespace: openebsspec: node: openebs1 disks: - uring:///dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-data encryption: enabled: trueBonnes pratiques sécurité
Section intitulée « Bonnes pratiques sécurité »| Pratique | Description |
|---|---|
| Namespace dédié | OpenEBS tourne dans le namespace openebs, isolé des workloads applicatifs |
| RBAC Kubernetes | Les ServiceAccounts OpenEBS ont des droits minimaux configurés par le chart Helm |
| Réseau dédié | En production, séparer le réseau de réplication NVMe-oF du réseau applicatif |
| Disques dédiés | Ne jamais partager un disque entre le système et un DiskPool |
| Chiffrement | Activer le chiffrement au repos pour les données sensibles (v4.3+) |
| Mise à jour | Suivre les releases de sécurité via helm upgrade |
Dépannage
Section intitulée « Dépannage »Problèmes courants et solutions
Section intitulée « Problèmes courants et solutions »| Symptôme | Cause probable | Solution |
|---|---|---|
Pod io-engine Pending : Insufficient cpu | VM avec moins de 4 vCPU | Augmenter les vCPU à 4 minimum (io-engine réserve 2 cœurs exclusifs) |
Pod io-engine Init error : /run/udev is not a directory | Conteneur Docker (k3d, Kind) au lieu d’une VM | Utiliser des VMs ou du bare-metal — Mayastor nécessite un accès direct aux périphériques |
DiskPool bloqué en Creating : InvalidDevlink | Chemin /dev/vdb au lieu d’un lien persistant | Utiliser /dev/disk/by-path/... ou /dev/disk/by-id/... |
DiskPool : no matches for kind DiskPool in version v1beta2 | Mauvaise version d’API | Utiliser openebs.io/v1beta3 (vérifier avec kubectl api-resources) |
PVC Pending : no capacity available | Pas assez d’espace dans les DiskPools | Vérifier kubectl get dsp -n openebs et ajouter des disques |
| HugePages insuffisants | nr_hugepages non configuré | echo "vm.nr_hugepages = 1024" > /etc/sysctl.d/99-hugepages.conf && sysctl -p |
Module nvme-tcp absent | Paquet kernel manquant | apt install linux-modules-extra-$(uname -r) && modprobe nvme-tcp |
Commandes de diagnostic
Section intitulée « Commandes de diagnostic »# Vérifier la santé globalekubectl get pods -n openebs -o widekubectl get dsp -n openebs
# Événements récents dans le namespace OpenEBSkubectl get events -n openebs --sort-by='.lastTimestamp' | tail -20
# Logs détaillés du plan de contrôlekubectl logs -n openebs deploy/openebs-agent-core -c agent-core --tail=50
# Vérifier les HugePages sur un nœudssh noeud "cat /proc/meminfo | grep HugePages"
# Vérifier le module nvme-tcpssh noeud "lsmod | grep nvme_tcp"Bonnes pratiques
Section intitulée « Bonnes pratiques »Dimensionnement
Section intitulée « Dimensionnement »| Composant | Minimum (test) | Recommandé (production) |
|---|---|---|
| vCPU par nœud | 4 | 8+ (io-engine réserve 2 cœurs) |
| RAM par nœud | 8 Go | 16 Go+ (HugePages + workloads) |
| HugePages 2 MiB | 1024 (2 GiB) | 1024+ (2 GiB) |
| Disque DiskPool | 10 Go (SSD) | 100 Go+ (NVMe dédié) |
| Réseau | 1 Gbps | 10 Gbps (25 Gbps idéal pour NVMe-oF) |
| Nœuds Mayastor | 3 | 3+ (toujours impair pour le quorum) |
Organisation
Section intitulée « Organisation »- Un disque dédié par DiskPool : ne jamais partager avec le système d’exploitation.
- Utiliser des liens persistants : toujours référencer les disques via
/dev/disk/by-id/ou/dev/disk/by-path/, jamais/dev/sdXou/dev/vdX. - Séparer les StorageClasses par usage : un SC répliqué (3 réplicas) pour les bases de données, un SC single-replica pour les logs, un SC LocalPV pour les caches.
- Labelliser les nœuds : seuls les nœuds portant
openebs.io/engine=mayastorexécutent io-engine. Gérez ce label pour contrôler la topologie de stockage. - Prévoir la capacité : un volume répliqué 3× consomme 3× sa taille dans
les DiskPools. Un volume de 10 GiB avec
repl: "3"utilise 30 GiB au total.
Performance
Section intitulée « Performance »- NVMe dédié : utilisez des disques NVMe pour les DiskPools en production. Mayastor tire parti du protocole NVMe nativement.
- Réseau 10-25 Gbps : la réplication NVMe-oF est limitée par la bande passante réseau. En 1 Gbps, les performances chutent significativement.
- HugePages : les 2 GiB de HugePages sont utilisés comme cache I/O par io-engine, améliorant la latence.
- CPU exclusif : les 2 cœurs réservés par io-engine fonctionnent en polling mode (pas d’interruptions), maximisant le débit I/O.
À retenir
Section intitulée « À retenir »- OpenEBS = stockage Kubernetes-natif : tout tourne dans des pods, pas de cluster de stockage externe à gérer.
- Mayastor réplique les données via NVMe-oF, plus rapide que le iSCSI de Longhorn.
- DiskPool = un disque dédié par nœud, référencé par un lien persistant
(
/dev/disk/by-id/ou/dev/disk/by-path/). - io-engine réserve 2 cœurs CPU exclusifs + 2 GiB de HugePages par nœud : prévoyez au moins 4 vCPU et 8 Go de RAM.
- LocalPV Hostpath pour les données régénérables (zéro overhead), Replicated PV pour la haute disponibilité.
- Les VolumeSnapshots permettent de sauvegarder et restaurer un volume en quelques secondes.
- API
openebs.io/v1beta3pour les DiskPools (v4.4) — vérifiez aveckubectl api-resources. - Mayastor nécessite des VMs ou du bare-metal : les conteneurs Docker (k3d, Kind) ne fournissent pas l’accès aux périphériques requis.
Prochaines étapes
Section intitulée « Prochaines étapes »Ressources
Section intitulée « Ressources »- Site officiel : openebs.io
- Documentation : openebs.io/docs
- GitHub : github.com/openebs/openebs
- Releases : github.com/openebs/openebs/releases
- CNCF Landscape : landscape.cncf.io — OpenEBS