Skip to content

Gestion des Volumes et Stockage Persistant

Table des Matières

  1. Les Volumes
  2. emptyDir
  3. hostPath
  4. Persistent Volumes et Persistent Volume Claims
  5. Stateful vs Stateless Applications
  6. StatefulSets
  7. StorageClass

Les Volumes

Quoi ?

Les fichiers dans un conteneur sont éphémères par défaut, ce qui pose deux problèmes principaux : - Perte de données lors du redémarrage d'un conteneur. - Partage de fichiers nécessaire entre plusieurs conteneurs dans un Pod.

Les volumes Kubernetes résolvent ces problèmes. Deux types courants sont emptyDir et hostPath.


emptyDir

Un volume emptyDir est initialement vide et partagé entre les conteneurs d'un Pod.

Exemple :

apiVersion: v1
kind: Pod
metadata:
  name: production
spec:
  containers:
  - name: container1
    image: image1
    volumeMounts:
    - name: storage
      mountPath: /vol/data
  - name: container2
    image: image2
    volumeMounts:
    - name: storage
      mountPath: /store/data
  volumes:
  - name: storage
    emptyDir: {}
- Description :
- Un volume emptyDir nommé storage est monté dans /vol/data pour container1 et /store/data pour container2.


hostPath

Un volume hostPath monte un fichier/dossier du système hôte dans un Pod.

Options :

  • DirectoryOrCreate : CrĂ©e un dossier si inexistant (permissions : 0755).
  • FileOrCreate : CrĂ©e un fichier si inexistant (permissions : 0644).
  • Autres options : Directory, File, Socket, CharDevice, BlockDevice.

Exemple :

apiVersion: v1
kind: Pod
metadata:
  name: test-webserver
spec:
  containers:
  - name: test-webserver
    image: nginx
    volumeMounts:
    - mountPath: /var/local/aaa
      name: mydir
    - mountPath: /var/local/aaa/1.txt
      name: myfile
  volumes:
  - name: mydir
    hostPath:
      path: /var/local/aaa
      type: DirectoryOrCreate
  - name: myfile
    hostPath:
      path: /var/local/aaa/1.txt
      type: FileOrCreate
- Description :
- Monte un dossier (/var/local/aaa) et un fichier (1.txt) depuis l'hĂ´te.


Persistent Volumes et Persistent Volume Claims

Quoi ?

Les PersistentVolumes (PV) et PersistentVolumeClaims (PVC) permettent d'utiliser un stockage externe au cluster.

  • PV : Ressource de stockage physique/logique (ex : NFS, EBS).
  • PVC : Demande de stockage par un utilisateur (taille, mode d'accès).

Modes d'accès :

  • ReadWriteOnce (RWO) : Montage en lecture/Ă©criture par un seul nĹ“ud.
  • ReadOnlyMany (ROX) : Montage en lecture seule par plusieurs nĹ“uds.
  • ReadWriteMany (RWX) : Montage en lecture/Ă©criture par plusieurs nĹ“uds.

Exemple :

# PersistentVolume
kind: PersistentVolume
apiVersion: v1
metadata:
  name: access-log-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /var/log/syslog
    type: DirectoryOrCreate

# PersistentVolumeClaim
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: access-log-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi

# Pod utilisant le PVC
kind: Pod
apiVersion: v1
metadata:
  name: test
spec:
  volumes:
    - name: access-log-pvc-vol
      persistentVolumeClaim:
        claimName: access-log-pvc
  containers:
    - name: proxy
      image: nginx
      volumeMounts:
        - mountPath: "/nginx/"
          name: access-log-pvc-vol
- Description :
- Un PV de 1 Go est créé, puis un PVC de 500 Mo. Le Pod monte le PVC dans /nginx/.


Stateful vs Stateless Applications

Stateless

  • Pas de persistance : Chaque requĂŞte est indĂ©pendante.
  • Exemples : Services REST, proxies.

Stateful

  • Persistance des donnĂ©es : Bases de donnĂ©es, caches.
  • GĂ©rĂ© via StatefulSets.

StatefulSets

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx"
  replicas: 3
  template:
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: storage
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: storage
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 1Gi
- Description :
- Crée 3 pods avec un PVC par pod (volumeClaimTemplates). - Résolution DNS : web-0.nginx, web-1.nginx, etc.


StorageClass

Quoi ?

Une StorageClass définit des classes de stockage pour un provisionnement dynamique.

Exemple (vSphere) :

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: vsphere-ssd
provisioner: kubernetes.io/vsphere-volume
parameters:
  diskformat: thin
  datastore: "MyDatastore1"
  type: ssd

Exemple (AWS EBS) :

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: aws-ebs
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
  zone: eu-west-3
- Description :
- Définit une classe de stockage SSD sur AWS (gp2) dans la zone eu-west-3.


Résumé

  • Volumes : emptyDir (Ă©phĂ©mère), hostPath (hĂ´te).
  • PV/PVC : Stockage persistant externe.
  • StatefulSets : Pour applications avec Ă©tat.
  • StorageClass : Provisionnement dynamique de stockage.