Introduction
Dans Kubernetes, les StatefulSets sont utilisés pour gérer les applications avec état (stateful applications). Contrairement aux applications traditionnelles sans état (stateless applications), les applications avec état nécessitent des identifiants réseau stables et uniques ainsi qu'un stockage persistant. Dans ce laboratoire (lab), nous apprendrons à modéliser la stabilité avec les StatefulSets dans Kubernetes.
Démarrer le cluster Minikube
Avant de créer des ressources, vous avez besoin d'un cluster Kubernetes en cours d'exécution. Minikube est un environnement Kubernetes léger qui s'exécute sur votre machine locale.
Accédez à votre répertoire de travail :
Ouvrez le terminal et accédez au dossier de projet par défaut :
cd /home/labex/projectDémarrez Minikube :
Démarrez Minikube pour initialiser un cluster Kubernetes :
minikube start- Cette commande configure un cluster Kubernetes mono - noeud sur votre machine locale.
- Minikube peut prendre quelques minutes à démarrer en fonction des performances de votre système.
Vérifiez que Minikube est en cours d'exécution :
Vérifiez l'état du cluster Minikube :
minikube status- Recherchez des composants tels que
kubeletetapiserverlistés commeRunning. - Si le cluster n'est pas en cours d'exécution, relancez la commande
minikube start.
- Recherchez des composants tels que
Si vous rencontrez des problèmes lors du démarrage de Minikube, utilisez minikube delete pour réinitialiser l'environnement si nécessaire.
Créer un Volume Persistant (PV) et une Demande de Volume Persistant (PVC)
La première étape consiste à créer un Pod avec un Volume Persistant (Persistent Volume - PV) et une Demande de Volume Persistant (Persistent Volume Claim - PVC). Les PV et les PVC sont utilisés pour stocker et accéder de manière persistante aux données lors des redémarrages des Pods.
Pour ce faire, vous allez tout d'abord créer un PV.
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
Enregistrez le code ci - dessus dans un fichier nommé pv.yaml et exécutez la commande suivante :
kubectl apply -f pv.yaml
Cette commande créera un PV nommé my - pv avec une capacité de 1Gi et un chemin d'hôte de /mnt/data.
Ensuite, vous allez créer un PVC qui demande 1Gi de stockage au PV.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
Enregistrez le code ci - dessus dans un fichier nommé pvc.yaml et exécutez la commande suivante :
kubectl apply -f pvc.yaml
Cette commande créera un PVC nommé my - pvc qui demande 1Gi de stockage.
Créer un StatefulSet
Créez un fichier nommé statefulset.yaml avec le contenu suivant :
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "web"
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19.7
ports:
- containerPort: 80
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
Dans ce fichier, nous définissons un StatefulSet nommé web qui crée trois replicas d'un pod NGINX. Nous définissons également un service nommé web qui sélectionne les pods NGINX en utilisant l'étiquette (label) app: nginx. Enfin, nous définissons un modèle de demande de volume persistant (persistent volume claim template) pour les données du pod NGINX.
Pour créer le StatefulSet, exécutez la commande suivante :
kubectl apply -f statefulset.yaml
Vous pouvez vérifier l'état du StatefulSet en exécutant la commande suivante :
kubectl get statefulsets
Une fois que le StatefulSet est en cours d'exécution, vous pouvez accéder aux pods NGINX en exécutant les commandes suivantes :
kubectl get pods
kubectl exec -it web-0 -- /bin/bash
Remplacez web-0 par le nom de n'importe quel pod NGINX créé par le StatefulSet.
Félicitations, vous avez créé avec succès un StatefulSet dans Kubernetes!
Mettre à jour un StatefulSet
Dans Kubernetes, vous pouvez mettre à jour les pods d'un StatefulSet en mettant à jour son modèle (template). Mettons à jour le fichier statefulset.yaml pour utiliser la version 1.20.0 de NGINX.
Mettez à jour le fichier statefulset.yaml comme suit :
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "web"
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.20.0
ports:
- containerPort: 80
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
Pour mettre à jour le StatefulSet, exécutez la commande suivante :
kubectl apply -f statefulset.yaml
Vous pouvez vérifier l'état du StatefulSet en exécutant la commande suivante :
kubectl get statefulsets
Félicitations, vous avez réussi à mettre à jour un StatefulSet dans Kubernetes!
Mettre à l'échelle un StatefulSet
Dans Kubernetes, vous pouvez augmenter ou diminuer l'échelle d'un StatefulSet en modifiant son champ replicas. Mettons à l'échelle notre StatefulSet web pour qu'il ait cinq replicas.
Mettez à jour le fichier statefulset.yaml comme suit :
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "web"
replicas: 5
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.20.0
ports:
- containerPort: 80
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
Pour mettre à jour le StatefulSet, exécutez la commande suivante :
kubectl apply -f statefulset.yaml
Vous pouvez vérifier l'état du StatefulSet en exécutant la commande suivante :
kubectl get statefulsets
Félicitations, vous avez réussi à mettre à l'échelle un StatefulSet dans Kubernetes!
Supprimer un StatefulSet
Dans Kubernetes, vous pouvez supprimer un StatefulSet en exécutant la commande suivante :
kubectl delete statefulset web
Cela supprimera le StatefulSet web et tous ses pods.
Félicitations, vous avez terminé le laboratoire sur la modélisation de la stabilité avec les StatefulSets dans Kubernetes!
Résumé
Dans ce laboratoire, nous avons appris à modéliser la stabilité avec les StatefulSets dans Kubernetes. Nous avons créé un StatefulSet, mis à jour un StatefulSet, mis à l'échelle un StatefulSet et supprimé un StatefulSet. Ce sont les opérations de base que vous devrez effectuer lorsque vous travaillerez avec les StatefulSets dans Kubernetes.


