Module 6 – Observabilité, supervision et troubleshooting

Maîtrisez kubectl debug, les logs, les métriques, Prometheus, Grafana et les upgrades pour garder votre cluster Kubernetes en forme.

Savoir déployer ne suffit pas : il faut aussi observer, diagnostiquer et maintenir le cluster. Ce module regroupe les outils indispensables.

Objectifs

  • Diagnostiquer les incidents avec kubectl, events et logs.
  • Mettre en place une stack observabilité (Prometheus, Grafana, Loki).
  • Planifier les opérations : upgrades, backups, tests de reprise.

Plan

  1. kubectl debug et collecte d’informations.
  2. Logs et agrégation (Loki, Elasticsearch).
  3. Métriques et alerting (Prometheus, Alertmanager).
  4. Tracing distribué (OpenTelemetry, Jaeger).
  5. Opérations : upgrade control plane/nœuds, sauvegarde etcd.
  6. Lab complet.

1. kubectl debug

kubectl debug deploy/webapp -it --image=busybox --target=webkubectl describe pod webapp-XXXkubectl get events --sort-by=.lastTimestamp

Utilisez kubectl top nodes et kubectl top pods (metrics-server requis).

2. Logs

  • kubectl logs -f deploy/webapp
  • Stack Loki + Promtail + Grafana (ou EFK) pour centraliser.
  • Structurer les logs (JSON) et ajouter des labels.

3. Prometheus & Grafana

Installez kube-prometheus-stack via Helm :

helm repo add prometheus-community https://prometheus-community.github.io/helm-chartshelm install monitoring prometheus-community/kube-prometheus-stack -n observability --create-namespace

Créez un dashboard Grafana ciblant les métriques container_cpu_usage_seconds_total et kube_deployment_status_replicas_available.

4. Tracing

Déployez Jaeger ou Tempo, instrumentez avec OpenTelemetry SDK. Exportez les traces via OTLP.

5. Opérations

  • Upgrade : suivez la matrice version kubeadm / kubelet / kubectl.
  • Backup etcd : ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-$(date +%F).db.
  • Chaos testing : utilisez kubectl delete pod aléatoirement, ou LitmusChaos.

6. Lab

  1. Déployez kube-prometheus-stack et exposez Grafana en NodePort.
  2. Créez un tableau de bord avec CPU, mémoire et latence (Prometheus + custom metrics).
  3. Utilisez kubectl debug pour analyser un Pod crashLoopBackOff (injectez un bug).
  4. Réalisez un snapshot etcd, restaurez-le dans un cluster de test.

Checklist

  • ✅ Vous savez collecter events, logs et métriques.
  • ✅ Vous pouvez installer une stack Prometheus/Grafana.
  • ✅ Vous connaissez la procédure de backup et d’upgrade.

Ressources

Solution détaillée

  1. kubectl debug
    kubectl debug deploy/webapp -it --image=busybox --target=web ouvre un shell dans un Pod éphémère. Vérifiez que /proc/1/cmdline correspond à votre conteneur cible.
  2. Events & logs
    kubectl get events --sort-by=.lastTimestamp | tail montre les derniers incidents.
    kubectl logs deploy/webapp renvoie les logs applicatifs ; avec -f pour le suivi.
  3. Prometheus / Grafana
    kubectl get pods -n observability doit montrer les composants prometheus, alertmanager, grafana.
    Exposez Grafana : kubectl port-forward svc/monitoring-grafana -n observability 3000:80, connectez-vous (admin/prom-operator par défaut) et créez un dashboard avec container_cpu_usage_seconds_total.
  4. Snapshot etcd
    Depuis le control plane :

    export ETCDCTL_API=3
    sudo ETCDCTL_API=3 etcdctl snapshot save /tmp/etcd-$(date +%F).db   --endpoints=https://127.0.0.1:2379   --cacert=/etc/kubernetes/pki/etcd/ca.crt   --cert=/etc/kubernetes/pki/etcd/server.crt   --key=/etc/kubernetes/pki/etcd/server.key
    

    Puis test de restauration dans un cluster de labo.

  5. Chaos léger
    kubectl delete pod -n staging -l app=webapp --now : le Deployment recrée les Pods. Notez le temps de résilience.

Conservez les captures Grafana et les extraits de logs/snapshots dans votre dépôt de formation pour prouver la mise en place de l’observabilité.