Skip to content

Exercices Kubernetes - TP1

Exercice 1 : Créer un Pod avec une sonde de vie (livenessProbe)

🎯 Objectif

Créer un Pod qui simule une application simple avec un fichier de "santé" (/tmp/healthy), surveillé par une sonde de vie (livenessProbe).
Cette sonde vérifiera si le fichier existe ; s’il est supprimé, Kubernetes redémarrera automatiquement le conteneur.

🔧 Contexte

  • Utiliser l’image busybox
  • Lancer le Pod dans un cluster Kubernetes déjà opérationnel (Minikube ou cluster distant)
  • Utiliser kubectl apply -f pod-liveness.yaml pour le déploiement

📋 Instructions

  1. Crée un fichier YAML nommé pod-liveness.yaml
  2. Définis un Pod avec :
  3. Un conteneur basé sur busybox
  4. Une commande shell qui crée un fichier /tmp/healthy, le supprime après 30s, puis dort
  5. Une livenessProbe qui vérifie ce fichier toutes les 5 secondes
  6. Déploie le Pod avec kubectl apply -f pod-liveness.yaml
  7. Observe le redémarrage automatique du Pod avec :
kubectl describe pod <nom>
kubectl get pod <nom> -w

🛠 Commandes utiles

  • Pour voir les événements et vérifier la sonde :
kubectl describe pod pod-tp1-ex1
  • Pour surveiller l’état du Pod en temps réel :
kubectl get pod pod-tp1-ex1 -w

Voir la correction
apiVersion: v1
kind: Pod
metadata:
  name: pod-tp1-ex1
  labels:
    app: pod-tp1-ex1
spec:
  restartPolicy: OnFailure
  containers:
  - name: container-tp1-ex1
    image: busybox
    args:
    - /bin/sh
    - -c
    - |
      touch /tmp/healthy
      sleep 30
      rm -rf /tmp/healthy
      sleep 600
    resources:
      requests:
        memory: "32Mi"
        cpu: "128m"
      limits:
        memory: "64Mi"
        cpu: "256m"
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5

Exercice 2 : Init Container +

Volume partagé

🎯 Objectif

Comprendre le fonctionnement des initContainers et le partage de volume entre initContainer et conteneur principal.

🔧 Contexte

  • Init container : prépare les données (copie de fichiers) dans un volume partagé emptyDir
  • Conteneur principal : utilise ces fichiers pour démarrer l’application

📋 Instructions

  1. Crée un Pod avec :

  2. Un initContainer qui crée un fichier dans /mnt

  3. Un volume emptyDir partagé avec le conteneur principal
  4. Déploie et vérifie que le conteneur principal peut lire ce fichier

🛠 Commandes utiles

  • Pour voir les logs de l’init container :
kubectl logs <nom-pod> -c <nom-init-container>
  • Pour décrire le pod et vérifier les volumes montés :
kubectl describe pod <nom-pod>

Voir la correction
apiVersion: v1
kind: Pod
metadata:
  name: pod-tp1-ex2
spec:
  volumes:
  - name: shared-data
    emptyDir: {}
  initContainers:
  - name: init-container
    image: busybox
    command:
    - /bin/sh
    - -c
    - echo "Hello from init container" > /mnt/message.txt
    volumeMounts:
    - name: shared-data
      mountPath: /mnt
  containers:
  - name: main-container
    image: busybox
    command:
    - /bin/sh
    - -c
    - cat /mnt/message.txt && sleep 3600
    volumeMounts:
    - name: shared-data
      mountPath: /mnt