Gestion des Volumes et Stockage Persistant¶
Table des Matières¶
- Les Volumes
- emptyDir
- hostPath
- Persistent Volumes et Persistent Volume Claims
- Stateful vs Stateless Applications
- StatefulSets
- 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: {}
- 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
- 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
- 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
- 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
- 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.