PerfectScale

Kubernetes Events : les consulter, les filtrer et les dépanner

Cette page est également disponible en English, Deutsch, Español, Italiano, 日本語 et Português.

Josh Palmer
By Josh Palmer
Jun 11, 202613 min read

Qu'est-ce qu'un Kubernetes Event ?

En bref : les Kubernetes Events sont des ressources API éphémères, générées en temps réel dès qu'un changement d'état, une erreur ou une activité notable survient dans votre cluster. Ils sont précieux pour déboguer les incidents et auditer la santé du cluster. Chaque event consigne ce qui s'est passé, l'objet concerné, l'heure de survenue et une brève description lisible.

Caractéristiques clés :

  • Types : généralement classés en Normal (changements standards, sans incident) ou Warning (signalant des défaillances telles que des boucles de back-off ou des problèmes d'ordonnancement).
  • Rétention : les events sont éphémères. Ils ne sont conservés dans etcd que pendant une heure par défaut avant d'être supprimés par le garbage collector.
  • Attributs principaux : chaque event comprend Last Seen, Type, Reason, Object (ex. Pod/web-server) et un Message détaillant la transition d'état.

Comment consulter les events :

Utilisez la commande intégrée kubectl events pour inspecter et surveiller les events directement depuis votre terminal :

  • Voir tous les events récents dans le namespace par défaut : kubectl events
  • Voir les events de tous les namespaces : kubectl events --all-namespaces
  • Suivre en temps réel les events d'une ressource précise : kubectl events --for pod/<pod-name> --watch
  • Voir les events récents au format YAML : kubectl events -o yaml

Cet article fait partie d'une série consacrée au dépannage de Kubernetes.

Au sommaire :


Caractéristiques clés des Kubernetes Events

1. Types

Les Kubernetes Events se répartissent principalement en deux catégories : normal et warning.

  • Les events normaux signalent des opérations réussies ou attendues, comme la création d'un pod ou son ordonnancement par le control plane. Purement informatifs, ils permettent de suivre le fonctionnement courant des ressources.
  • Les events warning signalent des conditions inattendues ou problématiques : échecs d'ordonnancement, erreurs de pull d'image, etc. Ces alertes sont essentielles pour identifier et traiter rapidement les incidents avant qu'ils ne dégénèrent en pannes ou en interruptions de service.

Les deux types remplissent des fonctions distinctes, mais comptent autant l'un que l'autre pour l'observabilité du cluster. Les events normaux confirment aux opérateurs que les ressources se comportent comme prévu, tandis que les events warning font office de système d'alerte précoce en cas d'erreur ou de mauvaise configuration.

2. Rétention

Les Kubernetes Events sont stockés dans le datastore etcd du cluster, mais ne sont pas conservés indéfiniment. Par défaut, la durée de rétention est d'une heure, même si ce paramètre peut être ajusté dans la configuration de l'API server.

Cette fenêtre courte vise à limiter l'impact sur les performances du cluster et à éviter que etcd ne soit saturé par des données d'events transitoires ou répétitives. Revers de la médaille : les opérateurs doivent agir vite s'ils souhaitent analyser ou exporter des events pour des investigations approfondies.

La rétention étant limitée, il est déconseillé de se reposer uniquement sur le stockage interne du cluster pour de l'audit long terme ou des analyses post-mortem. Dans les environnements qui requièrent un historique plus étendu, la bonne pratique consiste à exporter les events vers un système externe de logging ou de monitoring.

3. Attributs principaux

Chaque Kubernetes Event contient plusieurs attributs essentiels qui apportent du contexte sur ce qui s'est passé et où. Les principaux sont :

  • L'objet concerné (par exemple un Pod ou un Node)
  • Le type d'event (Normal ou Warning)
  • Un code de motif (reason) qui résume la cause
  • Un message lisible
  • Les horodatages de la première et de la dernière occurrence

Ces attributs structurés facilitent le filtrage, la recherche et la corrélation avec d'autres données d'observabilité. Bien les comprendre est essentiel pour un dépannage efficace. Les champs reason et message livrent souvent des indices immédiats sur les causes sous-jacentes, tandis que les horodatages permettent de reconstituer la chronologie des events liés. La référence à l'objet concerné, elle, permet d'approfondir l'analyse au niveau de la ressource affectée.


Kubernetes Events, logs et métriques : quelles différences ?

Kubernetes Events, logs et métriques jouent chacun un rôle distinct dans l'observabilité d'un cluster :

  • Les events capturent les changements d'état de haut niveau et les actions significatives sur les ressources Kubernetes, comme l'ordonnancement ou les échecs d'un Pod.
  • Les logs fournissent des enregistrements détaillés et horodatés de l'activité applicative ou système, et offrent une visibilité fine sur ce qui se passe dans les conteneurs ou dans les composants Kubernetes eux-mêmes.
  • Les métriques sont des mesures numériques collectées dans le temps (utilisation CPU, consommation mémoire, etc.) qui servent à suivre les tendances et à déclencher des alertes.

Les events sont précieux pour retracer le cycle de vie des ressources et identifier la cause de changements soudains, tandis que les logs sont mieux adaptés au débogage applicatif et au diagnostic d'incidents complexes. Les métriques, quant à elles, permettent de surveiller la santé et les performances des ressources à grande échelle, et alimentent le capacity planning et l'autoscaling.


Comment consulter les Kubernetes Events

Kubernetes propose plusieurs moyens de consulter les events directement en ligne de commande avec kubectl. La méthode la plus courante est la commande kubectl get events, qui retourne la liste des events du namespace courant. La sortie inclut notamment le type d'event, le motif, l'objet concerné et le message.

Pour consulter les events de tous les namespaces, ajoutez l'option --all-namespaces.

Terminal window
kubectl get events
kubectl get events --all-namespaces

Les events étant sensibles au temps, les trier par horodatage est souvent utile lors d'un dépannage. Kubernetes permet de trier par date de création via l'option --sort-by. Vous reconstituez ainsi la séquence d'actions ayant précédé un échec ou un problème de déploiement.

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

Vous pouvez également inspecter les events liés à une ressource précise avec kubectl describe. Décrire un Pod, par exemple, affiche les détails de la ressource ainsi qu'une section Events dédiée en bas. C'est l'un des moyens les plus rapides de repérer des problèmes d'ordonnancement, des crashs de conteneurs ou des erreurs de pull d'image.

Terminal window
kubectl describe pod my-pod

En production, les events sont souvent intégrés à des plateformes centralisées d'observabilité telles qu'Elasticsearch, Loki ou des outils de monitoring cloud-native. Cela permet une rétention plus longue, des recherches avancées et une corrélation avec les logs et les métriques, pour un dépannage plus efficace à grande échelle.


Comment filtrer les Kubernetes Events

Filtrer les Kubernetes Events permet de se concentrer sur l'information la plus pertinente lors d'un dépannage. Comme les clusters peuvent générer un volume important d'events, filtrer par namespace, objet, type ou motif facilite l'identification rapide des problèmes.

1. L'approche la plus simple consiste à limiter les résultats à un namespace donné.

Terminal window
kubectl get events -n production

2. Les field selectors offrent des capacités de filtrage plus avancées. Vous pouvez filtrer les events par nom ou type d'objet concerné, par motif ou par type d'event. Par exemple, la commande suivante n'affiche que les events de type Warning, généralement associés à des défaillances ou à des conditions anormales.

Terminal window
kubectl get events --field-selector type=Warning

3. Pour voir les events liés à un pod spécifique, filtrez par nom d'objet.

Terminal window
kubectl get events --field-selector involvedObject.name=my-pod

Filtrer par motif est également utile pour diagnostiquer des problèmes récurrents. Vous pouvez par exemple rechercher tous les échecs d'ordonnancement à travers le cluster.

Terminal window
kubectl get events --field-selector reason=FailedScheduling

4. Les Kubernetes Events peuvent aussi être diffusés en temps réel via l'option --watch. Pratique lors de déploiements ou de la gestion d'incidents : les nouveaux events s'affichent au fil de leur survenue.

Terminal window
kubectl get events --watch

Pour des workflows plus poussés, les events sont fréquemment exportés vers des plateformes de monitoring et de logging permettant d'appliquer des requêtes complexes, des dashboards et des alertes. Les équipes peuvent ainsi automatiser la détection d'incidents et corréler events, logs et métriques pour une analyse de cause racine accélérée.


Types d'events et motifs les plus courants

Events normaux

Les events normaux correspondent à des opérations attendues ou réussies au sein du cluster Kubernetes : création d'un pod, succès d'un pull d'image, ajout de nodes au cluster, etc. Ils confirment que le control plane et les ressources fonctionnent comme prévu. En les passant en revue, les opérateurs peuvent vérifier que les workflows — déploiements, autoscaling, etc. — progressent sans erreur et que le cluster tourne sans accroc.

Pourquoi ils comptent : Même s'ils sont purement informatifs, les events normaux restent utiles au dépannage et à l'audit. Lors d'une investigation, vérifier la présence ou l'absence de certains events normaux aide à repérer le moment où un processus a dévié de la trajectoire attendue. Par exemple, l'absence d'un event Scheduled lors de la création d'un pod peut révéler un problème d'ordonnancement, même sans aucun warning.

Events warning

Les events warning signalent des problèmes ou des conditions inattendues dans le cluster Kubernetes. Ils alertent sur des échecs d'ordonnancement, des erreurs de pull d'image ou des dépassements de contraintes de ressources. Ils apparaissent lorsque le control plane ou les composants sous-jacents rencontrent des situations qui méritent attention sans nécessairement entraîner une défaillance immédiate d'une ressource.

Pourquoi ils comptent : La surveillance des events warning est essentielle à une gestion proactive du cluster. Parce qu'ils mettent en évidence des écarts par rapport au fonctionnement nominal, ils constituent souvent le premier signal d'une mauvaise configuration, d'une pénurie de ressources ou d'un problème d'infrastructure.


Dépanner avec les Kubernetes Events

1. Pod bloqué en Pending

Un pod qui reste en état Pending indique généralement que Kubernetes ne parvient pas à le placer sur un node, ou à finaliser l'une des étapes d'initialisation requises avant le démarrage. Les events sont souvent le moyen le plus rapide d'identifier la cause racine : ils restituent directement les retours du scheduler et du kubelet. Les motifs courants : manque de CPU ou de mémoire, PersistentVolumeClaims absents, taints sur les nodes ou règles d'affinité non satisfaites.

Vous pouvez inspecter les events liés au pod avec la commande suivante :

Terminal window
kubectl describe pod my-pod

Dans la section Events, Kubernetes peut afficher des messages comme FailedScheduling détaillant pourquoi aucun Node adapté n'a été trouvé. Un event peut par exemple indiquer que les nodes manquent de ressources disponibles ou que des taints empêchent l'ordonnancement. Ces messages permettent de cibler rapidement les pistes de dépannage, sans avoir à plonger dans les logs du scheduler.

Autre approche utile : filtrer les events d'ordonnancement à l'échelle du cluster :

Terminal window
kubectl get events --field-selector reason=FailedScheduling

En examinant ces events, vous déterminerez si le problème est isolé à un seul workload ou s'il touche plusieurs pods dans le cluster. Résoudre des Pods en Pending implique souvent de redimensionner les ressources du cluster, d'ajuster les resource requests, de corriger les dépendances de stockage ou de revoir les contraintes d'ordonnancement.

2. ImagePullBackOff ou ErrImagePull

Les events ImagePullBackOff et ErrImagePull surviennent lorsque Kubernetes ne peut pas télécharger une image de conteneur depuis un registre. En cause, généralement : des noms d'image incorrects, des tags manquants, des erreurs d'authentification ou des soucis de connectivité réseau. Les events fournissent des messages détaillés expliquant pourquoi le pull a échoué, ce qui les rend indispensables pour diagnostiquer les problèmes de déploiement.

Le moyen le plus rapide d'enquêter est de décrire le Pod concerné :

Terminal window
kubectl describe pod my-pod

La section Events affiche fréquemment des messages tels que Failed to pull image ou Back-off pulling image. Ces messages peuvent révéler des références d'image invalides, un accès au registre refusé ou des credentials manquants. Si le registre nécessite une authentification, Kubernetes peut aussi indiquer que l'image pull secret configuré est invalide ou indisponible.

Vérifiez le nom et le tag de l'image dans la spécification du pod, assurez-vous que le registre est accessible et que les secrets nécessaires existent dans le bon namespace. Une fois le problème corrigé, Kubernetes retente automatiquement le pull et démarre le conteneur avec succès.

3. CrashLoopBackOff

Un event CrashLoopBackOff signale qu'un conteneur démarre correctement mais crashe à plusieurs reprises peu après. Kubernetes tente continuellement de le redémarrer, en allongeant le délai entre chaque tentative. Cette situation est généralement causée par des erreurs applicatives, une configuration invalide, des dépendances manquantes ou des health checks en échec.

Les events permettent d'identifier le schéma de redémarrage et les défaillances associées :

Terminal window
kubectl describe pod my-pod

La sortie peut afficher des events comme Back-off restarting failed container. Si les events révèlent le comportement de redémarrage, ce sont les logs du conteneur qui livrent la cause précise du crash.

On combine souvent l'analyse des events avec l'inspection des logs :

Terminal window
kubectl logs my-pod

Des events de redémarrage fréquents peuvent aussi indiquer des échecs de liveness probes ou des problèmes d'épuisement de ressources, comme des out-of-memory kills. Dans ces cas, il est important de revoir la configuration des probes et les limites de ressources du conteneur.

4. FailedScheduling

Les events FailedScheduling surviennent lorsque le scheduler Kubernetes ne parvient pas à assigner un pod à un node disponible. Ils figurent parmi les events warning les plus courants en production et révèlent généralement une pénurie de ressources ou des règles d'ordonnancement trop restrictives. Le scheduler génère des messages détaillés expliquant pourquoi le placement a échoué.

Vous pouvez consulter les events liés à l'ordonnancement avec :

Terminal window
kubectl get events --field-selector reason=FailedScheduling

Les messages typiques mentionnent un manque de CPU ou de mémoire, des incompatibilités d'affinité de node, des conflits de taints ou des restrictions de topologie de volume. Un event peut par exemple signaler qu'aucun node ne satisfait les resource requests du pod, ou que tous les nodes portent des taints que le pod ne peut pas tolérer.

Comprendre le message de l'event est crucial : FailedScheduling est un symptôme, pas la cause racine. La résolution peut impliquer d'ajouter de la capacité au cluster, de modifier les resource requests, de mettre à jour les règles d'affinité ou de configurer correctement les tolérations. Comme les problèmes d'ordonnancement peuvent toucher simultanément de nombreux workloads, surveiller ces events aide à détecter tôt des soucis de capacité ou de configuration à l'échelle du cluster.


Bonnes pratiques d'utilisation des Kubernetes Events

Voici quelques pratiques utiles à garder en tête lorsqu'on travaille avec les events sous Kubernetes.

1. Consulter les events tôt dans le dépannage

Les Kubernetes Events doivent figurer parmi les premiers points à examiner pour diagnostiquer un problème de cluster ou d'application. Ils renseignent sur les changements d'état récents, les défaillances et les actions du control plane.

Des commandes comme kubectl describe ou kubectl get events --sort-by=.metadata.creationTimestamp mettent en lumière des échecs d'ordonnancement, des redémarrages de conteneurs ou des soucis de pull d'image. Examiner les events tôt permet de déterminer si le problème provient de l'infrastructure Kubernetes, de la configuration du workload ou de l'application elle-même.

Comme les events sont chronologiques, ils aident à reconstituer la séquence d'actions menant à un incident. C'est particulièrement utile lors des déploiements, des rollouts ou de la gestion d'incidents.

2. Croiser les events avec les logs et les métriques

Les events apportent du contexte, mais leur valeur est maximale lorsqu'ils sont combinés aux logs et aux métriques. Les events expliquent ce qui s'est passé au niveau des ressources Kubernetes, les logs détaillent le comportement applicatif ou des composants, et les métriques apportent des données de performance et d'utilisation des ressources dans le temps.

Par exemple, un event CrashLoopBackOff peut signaler des redémarrages répétés de conteneur, mais ce sont les logs applicatifs qui livrent généralement la cause du crash. Les métriques, elles, peuvent révéler une saturation mémoire ou un throttling CPU qui a contribué à l'échec. Corréler ces signaux permet de passer de la détection des symptômes à l'analyse de la cause racine.

Les plateformes d'observabilité agrègent souvent events, logs et métriques dans un dashboard unifié. Les équipes peuvent ainsi suivre un incident à travers les différentes couches de la stack.

3. Exporter les events pour les conserver

Les Kubernetes Events sont temporaires par conception et ne sont en général conservés que peu de temps dans etcd. Avec cette rétention limitée, des informations de diagnostic peuvent disparaître rapidement après un incident. Exporter les events vers un système externe garantit que l'historique reste disponible pour l'analyse et l'audit.

De nombreuses organisations transfèrent ainsi leurs events vers des plateformes d'observabilité centralisées telles qu'Elasticsearch, Loki, Splunk ou des services de monitoring cloud-native. Ces systèmes offrent une rétention prolongée, des requêtes avancées, des dashboards et une corrélation avec les logs et les métriques.

Conserver l'historique des events est précieux pour les investigations post-mortem et pour repérer les schémas opérationnels récurrents.

4. Alerter uniquement sur les events à fort signal

Tous les Kubernetes Events ne justifient pas une alerte. Les grands clusters génèrent un volume élevé d'events informatifs, et alerter sur chacun d'eux crée du bruit et conduit à la fatigue d'alerte. Concentrez plutôt les alertes sur les events warning à fort signal, révélateurs de problèmes opérationnels ou de risques pour le service.

C'est notamment le cas de FailedScheduling, CrashLoopBackOff, ImagePullBackOff ou des events Warning liés aux nodes lorsqu'ils se répètent. Filtrer les alertes selon le type, le motif, la fréquence ou les ressources concernées réduit les notifications inutiles.

Un dispositif d'alerting efficace doit privilégier les signaux actionnables au volume brut d'events.

5. Ne pas dépendre du texte exact des messages d'event

Les messages des Kubernetes Events sont conçus pour la lisibilité humaine et peuvent évoluer d'une version ou d'une implémentation à l'autre. S'appuyer sur le texte exact dans des scripts, de l'automatisation ou des règles de monitoring crée des workflows fragiles, susceptibles de casser après une montée de version ou un changement de plateforme.

Plutôt que de matcher des messages complets, appuyez-vous sur des champs structurés : motif (reason), type, objet concerné ou labels. Ces champs sont plus stables et pensés pour le filtrage et l'automatisation. Filtrer sur le motif FailedScheduling est par exemple nettement plus fiable que de chercher une chaîne d'erreur du scheduler.


Au-delà des events : détecter et résoudre les problèmes Kubernetes avec PerfectScale

Les Kubernetes Events vous disent ce qui a mal tourné, mais agir dessus dans un environnement à grande échelle impose toujours un triage manuel permanent. PerfectScale by DoiT comble cet écart en détectant et en remédiant de manière autonome aux problèmes de résilience et de performance que les events révèlent — OOM kills, throttling CPU, evictions, redémarrages de pods répétés — tout en effectuant un right-sizing continu des workloads, pour stabiliser les clusters et atteindre jusqu'à 99,99 % de disponibilité.

Principales capacités de PerfectScale :

  • Remédiation automatique des incidents : identifie et corrige instantanément les risques de résilience tels que les out-of-memory kills, le throttling CPU, les evictions et les redémarrages de pods, pour maximiser l'uptime et éliminer la latence.
  • Prévention des erreurs de configuration : détecte les mauvaises configurations comme l'absence de CPU et memory requests ou limits, les fuites mémoire suspectées et les workloads atteignant leur nombre maximum de replicas, avant qu'elles ne déclenchent des incidents.
  • Renforcement de l'infrastructure : offre une visibilité globale sur vos nodes pour repérer de manière proactive des problèmes tels que la sur-allocation de nodes ou des affinités et taints inadaptés, sources d'evictions et d'échecs d'ordonnancement.
  • Priorisation par impact : classe les problèmes en temps réel et aligne l'alerting sur vos SLA et SLO, pour que les équipes se concentrent sur ce qui affecte le plus la régularité du service.
  • Alerting et ticketing intégrés : envoie des notifications instantanées via Slack, MS Teams ou Datadog, et permet de transformer n'importe quel incident en ticket en un seul clic.

Découvrez comment PerfectScale renforce de manière autonome la résilience et la performance de votre Kubernetes.