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
- Nom du PVC :
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
- Image du pod :
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 aveckubectl 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 unVolumeClaimTemplate
.
Contraintes:- Spécifications du StatefulSet :
name: redis-set``image: redis:latest
,replicas: 2
, labelsapp: redis
- Spécifications du StatefulSet :
- Spécifications du Volume :
name: redis-data
,taille du volume: 100Mi
,accessModes: [ "ReadWriteOnce" ]
- Spécifications du StatefulSet :
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
- selector :
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
- Image du pod :
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.