Kubernetes : observabilité, logs et métriques

Kubernetes : observabilité, logs et métriques

Déployer une appli, c'est bien. Savoir ce qui se passe quand elle tourne en prod, c'est vital.

Dans un cluster Kubernetes, tu dois pouvoir répondre rapidement à des questions comme :

  • Pourquoi ce pod crash‑loop ?
  • Est‑ce qu'on manque de CPU/RAM ?
  • Quels sont les pods à l'origine d'un pic de latence ?

Logs applicatifs

Premier réflexe :

kubectl logs mon-pod
kubectl logs mon-pod -c nom-du-container
kubectl logs -f mon-pod

Pour plusieurs réplicas derrière un Deployment :

kubectl get pods -l app=mon-api
kubectl logs mon-api-xxxxx

En prod, tu voudras rapidement envoyer ces logs vers une stack centralisée :

  • EFK (Elasticsearch + Fluentd + Kibana),
  • Loki + Promtail + Grafana,
  • Stack cloud (CloudWatch, GCP Logging, etc.).

Mais même sans ça, kubectl logs reste ton couteau suisse pour du debug rapide.


Events Kubernetes

Les events te racontent ce que le cluster fait :

kubectl get events --sort-by=.metadata.creationTimestamp

Tu peux les filtrer par namespace ou par ressource :

kubectl describe pod mon-api-xxxxx

Les events typiques :

  • pod qui ne trouve pas son image,
  • problème de scheduling (pas assez de ressources),
  • erreur de readiness/liveness probe.

Probes de santé (liveness / readiness / startup)

Tes deployments devraient définir des probes pour que Kubernetes sache :

  • si le conteneur est vivant (liveness),
  • s'il est prêt à recevoir du trafic (readiness),
  • si l'initialisation est terminée (startup).

Exemple :

livenessProbe:
  httpGet:
    path: /health
    port: 3000
  initialDelaySeconds: 10
  periodSeconds: 15

readinessProbe:
  httpGet:
    path: /ready
    port: 3000
  initialDelaySeconds: 5
  periodSeconds: 10

Avec ça :

  • Kubernetes ne route du trafic vers ton pod que s'il est Ready.
  • Si le pod bloque ou ne répond plus, la liveness probe peut déclencher un redémarrage.

Métriques (CPU, RAM, HPA)

Tu peux installer un metrics-server pour avoir des métriques de base :

kubectl top nodes
kubectl top pods

Ensuite, tu peux configurer un HorizontalPodAutoscaler (HPA) :

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: mon-api-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: mon-api
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70

Kubernetes ajuste alors le nombre de pods en fonction de la charge CPU.


Stack d'observabilité complète

À plus long terme, vise quelque chose comme :

  • Logs : Loki ou Elasticsearch,
  • Métriques : Prometheus + Grafana,
  • Traces : OpenTelemetry,
  • Dashboards : Grafana (santé du cluster, services clés, latence).

L'idée n'est pas de tout mettre en place dès le jour 1, mais de prévoir des hooks (export de métriques, endpoints /metrics, etc.) dès la conception de tes services.

Dans le dernier article de la série Kubernetes, on parlera CI/CD et déploiement continu : comment brancher ton cluster à ton pipeline pour que les déploiements soient reproductibles et fiables.

Articles recommandés