Aller au contenu
Conteneurs & Orchestration medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

Analyser les événements Kubernetes avec kubectl events

12 min de lecture

logo kubernetes

Les Events sont le journal d’alerte immédiat de votre cluster Kubernetes, pas son historique complet. Chaque création de pod, erreur de scheduling, échec de probe ou éviction génère un événement. Ce guide vous montre comment lire, filtrer et exploiter ces événements avec kubectl events et kubectl get events pour détecter les anomalies avant qu’elles ne deviennent des incidents. Vous apprendrez à reconnaître les patterns d’événements courants et à utiliser les bons filtres pour trouver rapidement l’information pertinente.

  • Comprendre ce qu’est un Event Kubernetes et ses champs essentiels
  • Utiliser kubectl events pour filtrer par type, ressource et namespace
  • Reconnaître les patterns d’événements courants (Normal et Warning)
  • Exploiter les Events dans kubectl describe pour le diagnostic
  • Comprendre la rétention des événements et ses implications
  • Un cluster Kubernetes fonctionnel (v1.28+)
  • kubectl configuré et connecté au cluster
  • Des droits de lecture sur les événements du cluster
  • Avoir suivi le guide Observer la santé du cluster

Un Event est un objet API qui décrit quelque chose qui s’est passé dans le cluster. Les composants Kubernetes (kubelet, scheduler, controller-manager) créent des Events pour signaler les opérations normales et les anomalies.

Chaque Event contient :

ChampCe qu’il indique
typeNormal (opération attendue) ou Warning (anomalie détectée)
reasonCode court identifiant l’événement (Scheduled, BackOff, FailedMount…)
messageDescription lisible de ce qui s’est passé
regardingLa ressource concernée (pod, nœud, deployment…)
reportingControllerLe composant qui a créé l’événement (kubelet, scheduler…)
eventTimeHorodatage principal de l’événement
series.countNombre de répétitions si l’événement est agrégé
series.lastObservedTimeDernière occurrence observée de cette série

Kubernetes ne définit que deux types d’événements :

  • Normal : opérations attendues — un pod a été planifié, une image a été téléchargée, un conteneur a démarré. Ces événements confirment que le cluster fonctionne.
  • Warning : anomalies détectées — un scheduling a échoué, un volume ne peut pas être monté, une probe a échoué. Ces événements signalent un problème à investiguer.

En exploitation, ce sont les Warning qui méritent votre attention. Les Normal vous aident à reconstituer la chronologie quand vous diagnostiquez un incident.

La sous-commande kubectl events offre aujourd’hui un affichage plus lisible et des filtres dédiés que kubectl get events. C’est la commande recommandée pour explorer les événements.

Fenêtre de terminal
kubectl events -A --types=Warning

L’option -A (ou --all-namespaces) couvre tout le cluster. --types=Warning filtre uniquement les anomalies.

L’option --for permet de cibler une ressource précise :

Fenêtre de terminal
# Événements d'un pod
kubectl events -n default --for=pod/mon-pod
# Événements d'un nœud
kubectl events --for=node/ks-worker1
# Événements d'un deployment
kubectl events -n default --for=deployment/mon-deployment

Le flag --watch affiche les nouveaux événements au fur et à mesure :

Fenêtre de terminal
kubectl events -A --types=Warning --watch

Très utile pendant une maintenance ou un déploiement pour voir les anomalies apparaître en direct.

Pour voir tous les champs d’un événement :

Fenêtre de terminal
kubectl events -A -o yaml | head -60

Le format YAML révèle les champs reportingController, series (nombre de répétitions), regarding (référence complète à l’objet) et eventTime (horodatage précis au microseconde).

La commande classique kubectl get events reste utile pour les filtrages par champ via --field-selector :

Fenêtre de terminal
# Événements Warning uniquement
kubectl get events -A --field-selector type=Warning
# Événements d'un objet précis
kubectl get events -n default --field-selector involvedObject.name=mon-pod
# Combiner les filtres
kubectl get events -A --field-selector type=Warning,reason=FailedScheduling

La commande kubectl describe affiche les événements liés à une ressource dans sa section Events en bas de la sortie. C’est souvent la première chose à lire quand on diagnostique un pod :

Fenêtre de terminal
kubectl describe pod mon-pod -n default

La section Events en bas ressemble à :

Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 2m default-scheduler Successfully assigned default/mon-pod to ks-worker1
Normal Pulling 2m kubelet Pulling image "nginx:1.27"
Normal Pulled 118s kubelet Successfully pulled image "nginx:1.27"
Normal Created 118s kubelet Created container nginx
Normal Started 118s kubelet Started container nginx

Cette séquence montre le cycle de vie normal d’un pod : planification → téléchargement de l’image → création du conteneur → démarrage.

kubectl describe node affiche de la même façon les événements liés à un nœud (évictions, problèmes kubelet, pression sur les ressources).

kubectl describe présente une vue condensée des Events liée à la ressource, sans exposer tous les champs du modèle events.k8s.io/v1 (comme reportingController ou series). Pour le détail complet, utilisez kubectl events -o yaml.

ReasonSourceCe que cela signifie
ScheduledschedulerLe pod a été affecté à un nœud
PullingkubeletLe téléchargement de l’image a commencé
PulledkubeletL’image a été téléchargée (ou était déjà en cache)
CreatedkubeletLe conteneur a été créé
StartedkubeletLe conteneur a démarré
ScalingReplicaSetdeployment-controllerUn Deployment a ajusté le nombre de réplicas
SuccessfulCreatereplicaset-controllerUn ReplicaSet a créé un pod
KillingkubeletLe conteneur est en cours d’arrêt (rolling update, suppression)
ReasonSourceCe que cela signifieAction
FailedSchedulingschedulerAucun nœud ne peut accueillir le podVérifier requests, taints, affinité, capacité des nœuds
BackOffkubeletLe conteneur a crashé et Kubernetes attend avant de le relancerVérifier les logs : kubectl logs --previous
FailedMountkubeletUn volume n’a pu être montéVérifier le PVC, le StorageClass, les droits
FailedAttachVolumeattachdetach-controllerLe volume n’a pu être attaché au nœudVérifier le provider de stockage et l’état du volume
UnhealthykubeletUne liveness ou readiness probe a échouéVérifier la config des probes et l’état de l’application
EvictedkubeletLe pod a été évincé (pression mémoire/disque du nœud)Vérifier les conditions du nœud, ajuster les ressources
NodeNotReadynode-controllerUn nœud a perdu le contact avec le plan de contrôleVérifier le kubelet et le réseau du nœud
FailedCreatereplicaset-controllerLe ReplicaSet n’a pas pu créer un podVérifier les quotas, RBAC, ou les erreurs d’admission

Par défaut, l’API server conserve les Events pendant 1 heure via le paramètre --event-ttl=1h0m0s. Au-delà, ils sont supprimés automatiquement. Les Events sont donc utiles pour le diagnostic immédiat, mais pas comme système d’historisation.

Ce que cela implique :

  • Les Events ne sont pas un système de monitoring : ils disparaissent. Pour conserver un historique, exportez-les vers un système de logs (Elasticsearch, Loki, etc.)
  • Si un incident a eu lieu il y a plus d’une heure, les Events ont probablement disparu. Il faudra s’appuyer sur les logs des composants ou sur un outil de centralisation
  • Sur un cluster très actif, le volume d’Events peut être important. Le TTL de 1 heure limite la charge sur etcd

Voici un scénario typique. Un collègue signale qu’une application ne répond plus. Vous commencez par les Events :

  1. Vérifier les Warning récents du namespace :

    Fenêtre de terminal
    kubectl events -n mon-app --types=Warning

    Résultat : plusieurs événements BackOff sur le pod api-server-xyz.

  2. Cibler les événements du pod :

    Fenêtre de terminal
    kubectl events -n mon-app --for=pod/api-server-xyz

    La séquence montre : StartedBackOffStartedBackOff en boucle. Le conteneur crash en boucle.

  3. Compléter avec les logs :

    Fenêtre de terminal
    kubectl logs api-server-xyz -n mon-app --previous --tail=30

    Les logs révèlent une erreur de connexion à la base de données.

  4. Vérifier les Events du Service de base de données :

    Fenêtre de terminal
    kubectl events -n mon-app --for=pod/postgres-0

    Un événement Evicted apparaît : le pod PostgreSQL a été évincé pour pression mémoire sur le nœud.

En 4 commandes, les Events ont permis de remonter la chaîne causale : éviction du pod base de données → erreur de connexion dans l’API → crash en boucle.

SymptômeCause probableSolution
kubectl events retourne error: unknown commandVersion kubectl < 1.26Mettre à jour kubectl, ou utiliser kubectl get events
Aucun événement affichéÉvénements expirés (TTL dépassé)Relancer l’observation, les Events ne persistent que ~1h
Trop d’événements, difficile de trouver l’infoCluster actif sans filtrageUtiliser --types=Warning, --for=<ressource> ou --field-selector
Events visibles dans describe mais pas dans kubectl eventsDifférence de namespace ou de temporalitéVérifier le namespace avec -n, les deux commandes lisent les mêmes objets
Warning FailedScheduling en boucle sans résolutionRessources insuffisantes sur tous les nœudskubectl describe pod pour voir les détails, ajouter un nœud ou ajuster les requests
Events répétés avec count croissantProblème persistant non résoluTraiter la cause racine (le count ne fait qu’indiquer la répétition)
  • Les Events sont le premier réflexe de diagnostic : avant de lire les logs, vérifiez les Events pour comprendre ce que Kubernetes a fait (ou tenté de faire). Ce sont des signaux immédiats, pas un historique complet
  • kubectl events -A --types=Warning est la commande la plus utile au quotidien — elle affiche toutes les anomalies du cluster en un coup d’œil
  • Normal = opération attendue, Warning = anomalie — seuls deux types existent, la classification est simple
  • La répétition compte plus que l’occurrence : un Warning isolé est souvent bénin, un Warning qui se répète signale un problème réel
  • Les Events disparaissent après ~1 heure : ils ne remplacent pas un système de monitoring. Pour un historique, centralisez-les dans un outil de logs
  • kubectl describe affiche les Events d’une ressource en bas de sa sortie — c’est le raccourci le plus rapide pour un diagnostic ciblé

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn