Aller au contenu

Module 2 · k8s par la pratique (via k9s)

Objectifs

  • Consolider les objets k8s en les manipulant, pas en les lisant.
  • Debugger les pannes classiques : CrashLoopBackOff, ImagePullBackOff, Pending.
  • Maîtriser scale, rollout, ConfigMap/Secret depuis k9s.
  • Durée : ~3 h · Pré-requis : Module 1.

1. Le cycle de vie d'un pod

graph LR
    P[Pending] --> R[Running]
    R --> S[Succeeded]
    R --> F[Failed]
    P -.image KO.-> W[ImagePullBackOff]
    R -.process meurt.-> C[CrashLoopBackOff]
État Signification Où regarder
Pending Pas encore planifié (ressources ? volume ?) d describe → events
ContainerCreating En cours de création events
Running OK logs
CrashLoopBackOff Le conteneur démarre puis meurt en boucle logs (--previous)
ImagePullBackOff Image introuvable / accès refusé describe → events

La règle d'or du debug k8s

describe → events → logs. Dans cet ordre. 90 % des pannes se lisent dans les events.

2. ConfigMaps & Secrets

Un ConfigMap stocke de la config non sensible ; un Secret des données sensibles (base64).

bash kubectl create configmap app-config --from-literal=COLOR=blue kubectl create secret generic app-secret --from-literal=API_KEY=s3cr3t

Dans k9s : :cm et :secret. Sur un secret, x peut décoder les valeurs (selon version) ; sinon y montre le base64.

Warning

Un Secret k8s n'est pas chiffré par défaut, juste encodé en base64. La « sécurité » vient du RBAC (qui peut le lire) — on en parle au module 3.

3. Scaling & rollout

bash kubectl scale deploy web --replicas=5 kubectl set image deploy/web nginx=nginx:1.27 # déclenche un rolling update kubectl rollout status deploy/web kubectl rollout undo deploy/web # rollback

Dans k9s, sur un deployment : s pour scaler, r pour restart, l pour suivre les logs pendant le déploiement.

4. Exercices

Exercice 2.1 — CrashLoopBackOff

bash kubectl run crash --image=busybox -- sh -c "echo demarrage; exit 1" 1. Dans k9s, observe le pod passer en CrashLoopBackOff. 2. Lis les logs (l) : que voit-on ? Et avec kubectl logs crash --previous ? 3. Explique pourquoi k8s le redémarre en boucle (restartPolicy).

Exercice 2.2 — ImagePullBackOff

bash kubectl run fantome --image=nexistepas/super-app:9.9.9 1. d describe → trouve l'event exact. 2. Corrige : supprime et relance avec nginx.

Exercice 2.3 — Config injectée

bash kubectl create configmap demo --from-literal=MESSAGE="Salut la sandbox" kubectl run reader --image=busybox --env-from=configmap/demo --restart=Never -- env 1. Dans k9s, ouvre les logs du pod reader. 2. Retrouve la variable MESSAGE dans la sortie.

Exercice 2.4 — Rolling update + rollback

bash kubectl create deployment site --image=nginx:1.25 --replicas=3 kubectl set image deploy/site nginx=nginx:1.27 1. Suis le rollout dans k9s (les pods se remplacent un à un). 2. Casse-le volontairement : kubectl set image deploy/site nginx=nginx:nope. 3. Observe les pods bloqués, puis kubectl rollout undo deploy/site.

5. Ce qu'il faut retenir

  • describe → events → logs : le triptyque du debug.
  • CrashLoopBackOff = problème applicatif (logs --previous).
  • ImagePullBackOff / Pending = problème plateforme (events du describe).
  • Scale / rollout / rollback : Kubernetes gère le remplacement progressif pour toi.

➡️ Suite : Module 3 — Administration cluster