Utiliser le contrôleur StatefulSet

KubernetesBeginner
Pratiquer maintenant

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.

  1. Accédez à votre répertoire de travail :

    Ouvrez le terminal et accédez au dossier de projet par défaut :

    cd /home/labex/project
    
  2. Dé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.
  3. Vérifiez que Minikube est en cours d'exécution :

    Vérifiez l'état du cluster Minikube :

    minikube status
    
    • Recherchez des composants tels que kubelet et apiserver listés comme Running.
    • Si le cluster n'est pas en cours d'exécution, relancez la commande minikube start.

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.