Aller au contenu

Stockage persistant

Par défaut, les données stockées dans un conteneur sont éphémères : elles disparaissent lorsque le conteneur est supprimé ou redémarré. Pour conserver vos données de façon permanente, vous devez utiliser un stockage persistant.


🗄️ Qu’est-ce que le stockage persistant ?

Le stockage persistant permet de conserver vos données indépendamment du cycle de vie de vos conteneurs. Contrairement au stockage éphémère intégré aux conteneurs, le stockage persistant :

  • Survit aux redémarrages de conteneurs
  • Peut être partagé entre plusieurs conteneurs
  • Est sauvegardé automatiquement
  • Persiste même si le Pod est supprimé

Cas d’usage typiques

Type d’applicationType de stockageRaison
Base de donnéesPersistantConservation des données critiques
Site web statiqueÉphémèreContenu régénérable
Stockage de fichiersPersistantPartage entre utilisateurs
Cache temporaireÉphémèreDonnées reconstructibles

🔧 Modes d’accès : RWO vs RWX

Kontainers propose deux modes d’accès au stockage persistant :

ReadWriteOnce (RWO)

Utilisation : Un seul Pod peut écrire sur le volume à la fois

Caractéristiques :

  • Accès exclusif en écriture
  • Performance optimale
  • Idéal pour bases de données
  • Plus sécurisé

Exemples : MySQL, PostgreSQL, Redis, MongoDB

ReadWriteMany (RWX)

Utilisation : Plusieurs Pods peuvent écrire simultanément sur le volume

Caractéristiques :

  • Accès partagé en écriture
  • Système de fichiers distribué
  • Idéal pour applications collaboratives
  • Permet la scalabilité horizontale

Exemples : WordPress, applications de partage de fichiers, CMS


📦 Classes de stockage disponibles

Kontainers met à votre disposition deux classes de stockage optimisées :

ceph-block-rwo

PropriétéValeur
TypeStockage bloc Ceph
Mode d’accèsReadWriteOnce (RWO)
PerformanceHaute performance
Cas d’usageBases de données, applications critiques
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: database-storage
spec:
accessModes:
- ReadWriteOnce
storageClassName: ceph-block-rwo
resources:
requests:
storage: 20Gi

ceph-filesystem-rwx

PropriétéValeur
TypeSystème de fichiers Ceph
Mode d’accèsReadWriteMany (RWX)
PerformancePerformance normale
Cas d’usageApplications web, partage de fichiers
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: shared-files
spec:
accessModes:
- ReadWriteMany
storageClassName: ceph-filesystem-rwx
resources:
requests:
storage: 50Gi

📖 Exemples d’applications

MySQL avec stockage RWO

Pourquoi RWO ? MySQL nécessite un accès exclusif à ses fichiers de données pour garantir la cohérence.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-data
spec:
accessModes:
- ReadWriteOnce
storageClassName: ceph-block-rwo
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:8.0
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
volumeMounts:
- name: mysql-storage
mountPath: /var/lib/mysql
ports:
- containerPort: 3306
volumes:
- name: mysql-storage
persistentVolumeClaim:
claimName: mysql-data

WordPress avec stockage RWX

Pourquoi RWX ? WordPress peut avoir plusieurs replicas qui partagent les fichiers uploadés et les thèmes.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wordpress-files
spec:
accessModes:
- ReadWriteMany
storageClassName: ceph-filesystem-rwx
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
spec:
replicas: 3
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress:latest
env:
- name: WORDPRESS_DB_HOST
value: mysql:3306
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: wordpress-secret
key: db-password
volumeMounts:
- name: wordpress-storage
mountPath: /var/www/html
ports:
- containerPort: 80
volumes:
- name: wordpress-storage
persistentVolumeClaim:
claimName: wordpress-files

📈 Gestion de l’espace de stockage

Augmenter la taille d’un PVC

Vous pouvez augmenter la taille de vos PersistentVolumeClaims de deux façons :

  1. Accédez à Storage

    Dans votre namespace : Storage › PersistentVolumeClaims

  2. Sélectionnez votre PVC

    Cliquez sur le menu ”⋯” du PVC à modifier

  3. Nouvelle taille

    Saisissez la nouvelle taille (ex: 50Gi)

  4. Redémarrez les Pods

    Redéployez vos Pods pour qu’ils détectent le nouvel espace


💾 Sauvegardes automatiques

Système de sauvegarde

Kontainers assure la protection de vos données avec un système de sauvegarde robuste :

AspectDétail
FréquenceAutomatique chaque nuit
Redondance géographiqueStockage à +400km du site principal
Provider différentInfrastructure indépendante

Sécurité et disponibilité

  • Chiffrement : Toutes les sauvegardes sont chiffrées
  • Tests réguliers : Vérification de l’intégrité des sauvegardes
  • Monitoring : Surveillance continue du processus

Demander une restauration

Pour restaurer des données depuis une sauvegarde :

  1. Contactez le support

    Créez un ticket sur blackswift.link/ticket

  2. Précisez les informations

    • Nom du PVC concerné
    • Date de sauvegarde souhaitée
    • Namespace et organisation
    • Raison de la restauration
  3. Validation

    Notre équipe valide la demande et programme la restauration

  4. Notification

    Vous êtes informé une fois la restauration terminée


🛡️ Bonnes pratiques

Choix du mode d’accès

  • Utilisez RWO pour :

    • Bases de données (MySQL, PostgreSQL, MongoDB)
    • Applications nécessitant un accès exclusif
    • Optimisation des performances
  • Utilisez RWX pour :

    • Applications web avec plusieurs replicas
    • Partage de fichiers entre conteneurs
    • CMS et applications collaboratives

Dimensionnement

  • Surveillez l’utilisation : Monitorer l’espace disque
  • Anticipez la croissance : Prévoir l’évolution des besoins
  • Évitez le sur-dimensionnement : Optimiser les coûts

🆘 Dépannage

PVC reste en “Pending”

Causes possibles :

  • Quota de stockage dépassé
  • Classe de stockage incorrecte

Solutions :

  • Vérifier les événements :

    Fenêtre de terminal
    kubectl describe pvc mon-pvc -n mon-namespace
  • Vérifier les quotas sur votre espace Monitoring

Erreur “No space left on device”

Cause : Volume plein Solutions :

  1. Augmenter la taille du PVC
  2. Nettoyer les fichiers inutiles
  3. Optimiser l’application

Pod ne peut pas accéder au stockage

Causes possibles :

  • Permissions incorrectes
  • PVC non créé
  • Mode d’accès inadapté (RWO/RWX)

Solution :

Fenêtre de terminal
# Vérifier les montages
kubectl describe pod mon-pod -n mon-namespace