ContainerProbe dans Kubernetes

KubernetesKubernetesIntermediate
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans Kubernetes, une sonde (probe) est un outil de diagnostic utilisé pour déterminer si un conteneur est en vie et prêt à accepter le trafic. Il existe deux types de sondes : les sondes de vivacité (liveness probes) et les sondes de préparation (readiness probes). Dans ce laboratoire (lab), nous nous concentrerons sur ContainerProbe, qui est un outil utilisé pour détecter quand un conteneur est prêt à accepter le trafic.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/logs("Logs") subgraph Lab Skills kubernetes/initialization -.-> lab-12263{{"ContainerProbe dans Kubernetes"}} kubernetes/get -.-> lab-12263{{"ContainerProbe dans Kubernetes"}} kubernetes/create -.-> lab-12263{{"ContainerProbe dans Kubernetes"}} kubernetes/apply -.-> lab-12263{{"ContainerProbe dans Kubernetes"}} kubernetes/describe -.-> lab-12263{{"ContainerProbe dans Kubernetes"}} kubernetes/exec -.-> lab-12263{{"ContainerProbe dans Kubernetes"}} kubernetes/logs -.-> lab-12263{{"ContainerProbe dans Kubernetes"}} end

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 - nœud 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 déploiement (Deployment)

La première étape consiste à créer un déploiement dans Kubernetes. Nous utiliserons ce déploiement pour tester le ContainerProbe.

  1. Créez un nouveau fichier nommé deployment.yaml dans le répertoire /home/labex/project.
  2. Copiez et collez le code suivant dans le fichier :
apiVersion: apps/v1
kind: Deployment
metadata:
  name: containerprobe-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: containerprobe
  template:
    metadata:
      labels:
        app: containerprobe
    spec:
      containers:
        - name: containerprobe
          image: nginx
          ports:
            - containerPort: 80

Ce code crée un déploiement avec une seule réplique, un sélecteur (selector) avec l'étiquette (label) app: containerprobe et un conteneur exécutant l'image nginx.

  1. Appliquez le déploiement à votre cluster :
kubectl apply -f deployment.yaml

Ajouter une sonde de vivacité (Liveness Probe)

L'étape suivante consiste à ajouter une sonde de vivacité au conteneur nginx. Une sonde de vivacité est utilisée pour déterminer si le conteneur est en vie. Si la sonde échoue, Kubernetes redémarrera le conteneur.

  1. Mettez à jour le fichier deployment.yaml dans le répertoire /home/labex/project avec le contenu suivant :
apiVersion: apps/v1
kind: Deployment
metadata:
  name: containerprobe-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: containerprobe
  template:
    metadata:
      labels:
        app: containerprobe
    spec:
      containers:
        - name: containerprobe
          image: nginx
          ports:
            - containerPort: 80
          livenessProbe:
            httpGet:
              path: /
              port: 80

Ce code spécifie que la sonde de vivacité doit envoyer une requête HTTP GET au chemin racine sur le port 80.

  1. Mettez à jour le déploiement :
kubectl apply -f deployment.yaml

Tester la sonde de vivacité (Liveness Probe)

Maintenant que nous avons ajouté une sonde de vivacité, nous pouvons la tester pour voir si elle fonctionne correctement.

  1. Obtenez le nom du pod :
kubectl get pods -l app=containerprobe -o jsonpath='{.items[0].metadata.name}'

Cette commande obtient le nom du pod créé par le déploiement.

  1. Obtenez l'état de la sonde de vivacité :
kubectl describe pod <pod-name>

Remplacez <pod-name> par le nom du pod obtenu à l'étape précédente.

Vous devriez voir une sortie qui inclut ce qui suit :

Liveness: http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=3

Cela indique que la sonde de vivacité est correctement configurée.

Ajouter une sonde de préparation (Readiness Probe)

L'étape suivante consiste à ajouter une sonde de préparation au conteneur nginx. Une sonde de préparation est utilisée pour déterminer si le conteneur est prêt à accepter le trafic. Si la sonde échoue, Kubernetes n'enverra pas de trafic au conteneur.

  1. Ajoutez le code suivant à la définition du conteneur dans le fichier deployment.yaml :
apiVersion: apps/v1
kind: Deployment
metadata:
  name: containerprobe-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: containerprobe
  template:
    metadata:
      labels:
        app: containerprobe
    spec:
      containers:
        - name: containerprobe
          image: nginx
          ports:
            - containerPort: 80
          livenessProbe:
            httpGet:
              path: /
              port: 80
          readinessProbe:
            httpGet:
              path: /
              port: 80

Ce code spécifie que la sonde de préparation doit envoyer une requête HTTP GET au chemin racine sur le port 80.

  1. Mettez à jour le déploiement :
kubectl apply -f deployment.yaml

Tester la sonde de préparation (Readiness Probe)

Maintenant que nous avons ajouté une sonde de préparation, nous pouvons la tester pour voir si elle fonctionne correctement.

  1. Obtenez le nom du pod :
kubectl get pods -l app=containerprobe -o jsonpath='{.items[0].metadata.name}'

Cette commande obtient le nom du pod créé par le déploiement.

  1. Obtenez l'état de la sonde de préparation :
kubectl describe pod <pod-name>

Remplacez <pod-name> par le nom du pod obtenu à l'étape précédente.

Vous devriez voir une sortie qui inclut ce qui suit :

Readiness: http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=3

Cela indique que la sonde de préparation est correctement configurée.

Résumé

Dans ce laboratoire, nous avons appris à utiliser le ContainerProbe dans Kubernetes. Nous avons créé un déploiement (deployment), ajouté une sonde de vivacité (liveness probe), testé la sonde de vivacité, ajouté une sonde de préparation (readiness probe) et testé la sonde de préparation. En utilisant le ContainerProbe, nous pouvons nous assurer que nos conteneurs sont prêts à accepter le trafic et fonctionnent correctement.