Aller au contenu principal

TP 4

Déployer Redis avec des StatefulSets et des volumes persistants dans Kubernetes

Ce TP vise à expérimenter l’utilisation des StatefulSets pour garantir la persistance des données dans les bases de données Redis, ainsi qu’à créer et utiliser des PersistentVolumeClaims (PVC) et des services pour exposer les bases de données.


Phase 1 : Création d'un Volume Persistant

  • Action : Créer un PersistentVolumeClaim (PVC) et vérifier son enregistrement.
    Observation : Le PVC doit être créé et associé à un volume disponible.
    Contraintes:
    • Nom du PVC : redis-pvc
    • Taille du PVC : 100Mi
    • AccessMode du PVC : ReadWriteOnce
Indice

Voir la documentation officielle.
Utiliser kubectl apply -f <pvc.yaml> pour créer le PVC et kubectl get pvc pour vérifier sa création.

  • Action : Utiliser le PVC dans un pod redis .
    Observation : Le PVC doit être persisté même quand le pod est détruit et redéployé.
    Contraintes:
    • Image du pod : redis:latest
    • Point de montage du PVC : /data
Indice

Utiliser un volume de type persistentVolumeClaim et montez le avec unvolumeMount. Utilisez redis-cli SET KEY VALUE et redis-cli GET KEY VALUE dans un exec pour vérifier la persistance.

  • Action : Lister les volumes attachés au pod et identifier leurs types.
    Observation : Vous devez voir que le PVC est correctement attaché au volume ainsi que d'autres volumes automatiques.
Indice

Utiliser kubectl describe pour lister les volumes du pod .

Solution

Afficher
  • Créer un PersistentVolumeClaim (PVC) et vérifier son enregistrement : kubectl apply -f <pvc.yaml>, vérifier avec kubectl get pvc.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
  • Utiliser le PVC dans un pod :
apiVersion: v1
kind: Pod
metadata:
name: redis-pod
spec:
containers:
- name: redis
image: redis:latest
volumeMounts:
- name: redis-storage
mountPath: /data
volumes:
- name: redis-storage
persistentVolumeClaim:
claimName: redis-pvc

Phase 2 : Déploiement de Redis avec StatefulSet

  • Action : Créer un StatefulSet pour Redis avec un VolumeClaimTemplate.
    Observation : Chaque Pod du StatefulSet doit avoir un volume persistant unique, basé sur un VolumeClaimTemplate.
    Contraintes:
    • Spécifications du StatefulSet : name: redis-set``image: redis:latest, replicas: 2, labels app: redis
    • Spécifications du StatefulSet :
    • Spécifications du Volume : name: redis-data, taille du volume: 100Mi, accessModes: [ "ReadWriteOnce" ]
Indice

Voir la documentation officielle.
Configurer le VolumeClaimTemplate dans le fichier YAML du StatefulSet. Utiliser kubectl apply -f <statefulset.yaml> et kubectl get pvc pour observer les PVC créés.

  • Action : Observer l'obtention des PVC et des Pods dans le StatefulSet.
    Observation : Vous devez observer que les Pods et les PVC sont nommés avec un index incrémental (par ex., redis-data-0, redis-data-1).

Solution

Afficher
  • Créer un StatefulSet pour Redis avec un VolumeClaimTemplate :
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis-set
spec:
serviceName: "redis"
replicas: 3
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis
volumeMounts:
- name: redis-data
mountPath: /data
volumeClaimTemplates:
- metadata:
name: redis-data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 100Mi

Phase 3 : Exposition des services

  • Action : Créer un service pour Redis et exposer-le au sein du cluster.
    Observation : Le service doit permettre d'accéder à Redis depuis d'autres services du cluster.
    Contraintes:
    • selector : app: redis
Indice

Utiliser kubectl expose statefulset <statefulset_name> --port=<port> pour exposer Redis.

  • Action : Générer le fichier YAML du service exposé.
    Observation : Le fichier YAML doit refléter la configuration actuelle du service exposé.
    Contraintes:
    • Image du pod : redis:latest
Indice

Utiliser kubectl get svc <service_name> -o yaml pour afficher la configuration en YAML.

Solution

Afficher
  • Exposer Redis avec un service :
apiVersion: v1
kind: Service
metadata:
name: redis-service
spec:
selector:
app: redis
ports:
- protocol: TCP
port: 6379
targetPort: 6379
type: ClusterIP

Avancé

  • Surveiller les événements liés aux PVC et aux Pods du StatefulSet. Utiliser kubectl get events --sort-by=.metadata.creationTimestamp.
  • Explorer l’installation de Longhorn sur un cluster K3s pour expérimenter une solution de stockage persistant.
  • Explorer les différents types de services Kubernetes (ClusterIP, NodePort, LoadBalancer) pour exposer Redis de manière différente.