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.
Vous souhaitez devenir expert en gestion de conteneurs applicatifs ? Notre formation Kubernetes en inter et intraentreprise vous permettra de maitriser toutes les compétences nécessaires au déploiement et à l’automatisation de vos applications en microservice.
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.