Formation > Blog > Kubernetes > Comment débuguer ses pods sur Kubernetes ?

Lorsque l’on utilise Kubernetes, il est fréquent que nos pods rencontrent des problèmes. Si c’est plutôt bénin la plupart du temps, il faut parfois mettre la main à la pâte dans certaines situations plus critiques. Dans cet article, apprenez à diagnostiquer et à résoudre les problèmes que vous pourriez rencontrer.

L’équipe Ambient IT

Prérequis

Si vous souhaitez pouvoir débugger efficacement vos pods, vous devez obligatoirement connaitre les commandes Kubectl de base et avoir accès aux outils de débogage adaptés à votre environnement.

Évidemment, vous devez aussi maîtriser les concepts basiques de Kubernetes : pods, conteneurs et namespaces.

Comprendre l’état d’un Pod : inspection initiale

États possibles et leurs significations

Un pod Kubernetes peut se trouver dans différents états : Pending, Running, Succeeded, Failed ou Unknown. Chaque état indique où en est le pod dans son cycle de vie et peut donner des indices sur la nature du problème.

Les pods Kubernetes se trouvent dans différents états lors de leur cycle de vie :

  • Pending : c’est le tout premier état d’un pod, il est prêt à fonctionner, mais il n’a pas encore été affecté à un serveur
  • Running : le pod est affecté à une machine et les images ont bien été téléchargées
  • Succeeded : tous les conteneurs ont été arrêtés et aucun n’a besoin d’être redémarré
  • Failed : tous les conteneurs sont arrêtés et au moins un a rencontré une erreur
  • Unknown : impossible de connaitre l’état du pod

Chaque état est révélateur d’où en est le pod et c’est souvent le premier indicateur à regarder pour déterminer la cause d’un problème.

kubectl describe

C’est la commande utilisée pour obtenir des informations détaillées sur un pod. Elle se présente comme ceci :

kubectl describe pod <pod-name>

Vous pourrez alors connaitre son état, les événements récents et la configuration.

kubectl logs

Cette commande sert à examiner les journaux d’exécution d’un pod. C’est une commande à connaitre pour comprendre ce qu’il se passe exactement à l’intérieur d’un conteneur.

kubectl logs <pod-name>

kubectl get

Ici, le but est de vérifier l’état du pod et d’afficher des informations précises comme l’adresse IP du pod ou le nœud sur lequel il est exécuté.

kubectl get pod <pod-name> -o wide

Comment intéragir avec les pods ?

kubectl exec

Cette commande permet d’exécuter d’autres commandes directement dans un conteneur pour réaliser une inspection directe.

kubectl exec -it <pod-name> -- <command>

kubectl port-forward

Lorsque vous avez besoin de tester l’accès au réseau d’un de vos pods, cette commande peut rediriger le trafic et ainsi grandement faciliter le débogage.

kubectl port-forward pod/<pod-name> <local-port>:<pod-port>

Utilisation des conteneurs éphémères

Debug avec un conteneur personnalisé

Depuis la version 1.18 de Kubernetes, vous pouvez utiliser cette commande pour lancer un conteneur éphémère.

Il partage ainsi l’espace du pod cible, mais sans perturber le conteneur principal.

kubectl debug

Si vous utilisez des images distroless ou de conteneurs qui n’ont pas d’outils de débogage, vous pouvez lancer un conteneur éphémère avec vos outils de références.

Cette technique vous permet d’accéder aux mêmes volumes et espaces de noms réseau/processus que le conteneur cible.

Diagnostic des problèmes d’application

Comment identifier les problèmes ?

Pour déterminer si le problème vient de l’application elle-même ou d’une configuration de pod mal conçue, utiliser des outils comme strace ou debuggers.

Ils vous permettent d’inspecter le fonctionnement interne des processus.

Les livenessProbe et les readinessProbe aident Kubernetes à comprendre quand un conteneur est prêt à servir des requêtes ou s’il a besoin d’être redémarré.

Gestion des configurations

Fichiers de configuration et secrets

Les configMaps et les secrets vous permettent de gérer vos configurations de manière sécurisée. En les montant dans les pods comme des volumes ou via des variables d’environnement, vous pourrez en tirer le maximum.

Vous pouvez utiliser les namespaces pour isoler des ressources afin de simplifier le débuggage. Cela permet de regrouper les ressources liées à une même fonctionnalité ou projet.

Bonnes Pratiques de redémarrage

Redémarrage classique vs Rolling Restart

Il est crucial de comprendre la différence entre le redémarrage simple :

kubectl restart pod

et un démarrage progressif :

kubectl rollout restart deployment

Ce dernier permet de debugger en maintenant un impact minimal sur la disponibilité du service.

Gestion des performances et des ressources

Une bonne gestion des ressources est essentielle pour prévenir les bugs de vos pods.

Avec des commandes comme limits et requests, vous pouvez définir les limites et les demandes de ressources sur tous vos conteneurs.

C’est essentiel pour éviter des problèmes de performance et assurer une distribution équitable et cohérente dans votre cluster.

Minimiser les interruptions

En utilisant des stratégies de déploiement adaptées, vous minimiserez les interruptions de service pendant le débogage ou le déploiement de nouvelles versions.

Conclusion

Debugger ses pods Kubernetes peut être une tâche complexe, mais en gardant bien en tête les outils et techniques disponibles, rien n’est réellement insurmontable.

Évidemment, comme chaque nouvelle version de kubernetes apporte ses nouveautés et ses corrections, nous ne pouvons qu’insister sur le fait de vous maintenir à jour vos compétences.

UNE QUESTION ? UN PROJET ? UN AUDIT DE CODE / D'INFRASTRUCTURE ?

Pour vos besoins d’expertise que vous ne trouvez nulle part ailleurs, n’hésitez pas à nous contacter.

ILS SE SONT FORMÉS CHEZ NOUS

partenaire sncf
partenaire hp
partenaire allianz
partenaire sfr
partenaire engie
partenaire boursorama
partenaire invivo
partenaire orange
partenaire psa
partenaire bnp
partenaire sncf
partenaire hp
partenaire allianz
partenaire sfr
partenaire engie
partenaire boursorama
partenaire invivo
partenaire orange
partenaire psa
partenaire bnp