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.yamlpour le déploiement
📋 Instructions¶
- Crée un fichier YAML nommé
pod-liveness.yaml - Définis un Pod avec :
- Un conteneur basé sur
busybox - Une commande shell qui crée un fichier
/tmp/healthy, le supprime après 30s, puis dort - Une
livenessProbequi vérifie ce fichier toutes les 5 secondes - Déploie le Pod avec
kubectl apply -f pod-liveness.yaml - 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¶
-
Crée un Pod avec :
-
Un initContainer qui crée un fichier dans
/mnt - Un volume
emptyDirpartagé avec le conteneur principal - 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