Il est utile de comprendre les outils de dépannage individuels pour Google Kubernetes Engine (GKE), mais les voir utilisés ensemble pour résoudre un problème concret peut vous aider à consolider vos connaissances.
Suivez un exemple guidé qui combine l'utilisation de la Google Cloud console, de l'outil de ligne de commande
kubectl Cloud Logging et Cloud Monitoring ensemble
pour identifier la cause première d'une erreur OutOfMemory (OOMKilled).
Cet exemple est utile pour tous ceux qui souhaitent voir une application pratique des techniques de dépannage décrites dans cette série, en particulier les administrateurs et opérateurs de plate-forme, ainsi que les développeurs d'applications. Pour en savoir plus sur les rôles courants et les exemples de tâches que nous citons dans le Google Cloud contenu, consultez Rôles utilisateur et tâches courantes de GKE.
Scénario
Vous êtes l'ingénieur de permanence pour une application Web nommée product-catalog qui s'exécute dans GKE.
Votre enquête commence lorsque vous recevez une alerte automatisée de Cloud Monitoring :
Alert: High memory utilization for container 'product-catalog' in 'prod' cluster.
Cette alerte vous indique qu'un problème existe et qu'il est lié à la charge de travail product-catalog.
Confirmer le problème dans la Google Cloud console
Vous commencez par une vue d'ensemble de vos charges de travail pour confirmer le problème.
- Dans la Google Cloud console, accédez à la page Workloads (Charges de travail)
et filtrez votre charge de travail
product-catalog. - Examinez la colonne d'état Pods. Au lieu de l'état sain
3/3, vous voyez que la valeur affiche un état non sain :2/3. Cette valeur indique que l'un des pods de votre application n'a pas l'étatReady. - Pour en savoir plus, cliquez sur le nom de la charge de travail
product-catalogpour accéder à sa page d'informations. - Sur la page d'informations, affichez la section Managed Pods (Pods gérés). Vous identifiez immédiatement un problème : la colonne
Restarts(Redémarrages) de votre pod affiche14, un nombre inhabituellement élevé.
Ce nombre élevé de redémarrages confirme que le problème est à l'origine de l'instabilité de l'application et suggère qu'un conteneur échoue à ses vérifications d'état ou plante.
Trouver la raison avec les commandes kubectl
Maintenant que vous savez que votre application redémarre à plusieurs reprises, vous devez en trouver la raison. La commande kubectl describe est un bon outil pour cela.
Vous obtenez le nom exact du pod instable :
kubectl get pods -n prodLe résultat est le suivant :
NAME READY STATUS RESTARTS AGE product-catalog-d84857dcf-g7v2x 0/1 CrashLoopBackOff 14 25m product-catalog-d84857dcf-lq8m4 1/1 Running 0 2h30m product-catalog-d84857dcf-wz9p1 1/1 Running 0 2h30mVous décrivez le pod instable pour obtenir l'historique détaillé des événements :
kubectl describe pod product-catalog-d84857dcf-g7v2x -n prodVous examinez le résultat et trouvez des indices dans les sections
Last State(Dernier état) etEvents(Événements) :Containers: product-catalog-api: ... State: Waiting Reason: CrashLoopBackOff Last State: Terminated Reason: OOMKilled Exit Code: 137 Started: Mon, 23 Jun 2025 10:50:15 -0700 Finished: Mon, 23 Jun 2025 10:54:58 -0700 Ready: False Restart Count: 14 ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 25m default-scheduler Successfully assigned prod/product-catalog-d84857dcf-g7v2x to gke-cs-cluster-default-pool-8b8a777f-224a Normal Pulled 8m (x14 over 25m) kubelet Container image "us-central1-docker.pkg.dev/my-project/product-catalog/api:v1.2" already present on machine Normal Created 8m (x14 over 25m) kubelet Created container product-catalog-api Normal Started 8m (x14 over 25m) kubelet Started container product-catalog-api Warning BackOff 3m (x68 over 22m) kubelet Back-off restarting failed containerLe résultat vous donne deux indices essentiels :
- Tout d'abord, la section
Last State(Dernier état) indique que le conteneur a été arrêté avecReason: OOMKilled, ce qui signifie qu'il a manqué de mémoire. Cette raison est confirmée par leExit Code: 137, qui est le code de sortie Linux standard pour un processus qui a été arrêté en raison d'une consommation excessive de mémoire. - Ensuite, la section
Events(Événements) affiche un événementWarning: BackOffavec le messageBack-off restarting failed container(Échec du redémarrage du conteneur). Ce message confirme que le conteneur est dans une boucle d'échec, qui est la cause directe de l'étatCrashLoopBackOffque vous avez vu précédemment.
- Tout d'abord, la section
Visualiser le comportement avec des métriques
La commande kubectl describe vous a indiqué ce qui s'est passé, mais Cloud Monitoring peut vous montrer le comportement de votre environnement au fil du temps.
- Dans la Google Cloud console, accédez à Metrics Explorer (Explorateur de métriques).
- Sélectionnez la métrique
container/memory/used_bytes. - Filtrez le résultat en fonction de votre cluster, de votre espace de noms et du nom de votre pod.
Le graphique affiche un schéma distinct : l'utilisation de la mémoire augmente de manière constante, puis chute brusquement à zéro lorsque le conteneur est arrêté par OOM et redémarre. Cette preuve visuelle confirme une fuite de mémoire ou une limite de mémoire insuffisante.
Trouver la cause première dans les journaux
Vous savez maintenant que le conteneur manque de mémoire, mais vous ne savez toujours pas exactement pourquoi. Pour découvrir la cause première, utilisez l'explorateur de journaux.
- Dans la Google Cloud console, accédez à Logs Explorer (Explorateur de journaux).
Écrivez une requête pour filtrer les journaux de votre conteneur spécifique juste avant l'heure du dernier plantage (que vous avez vu dans le résultat de la commande
kubectl describe) :resource.type="k8s_container" resource.labels.cluster_name="example-cluster" resource.labels.namespace_name="prod" resource.labels.pod_name="product-catalog-d84857dcf-g7v2x" timestamp >= "2025-06-23T17:50:00Z" timestamp < "2025-06-23T17:55:00Z"Dans les journaux, vous trouverez un schéma de messages répétitif juste avant chaque plantage :
{ "message": "Processing large image file product-image-large.jpg", "severity": "INFO" }, { "message": "WARN: Memory cache size now at 248MB, nearing limit.", "severity": "WARNING" }
Ces entrées de journal indiquent que l'application tente de traiter des fichiers image volumineux en les chargeant entièrement en mémoire, ce qui finit par épuiser la limite de mémoire du conteneur.
Les résultats
En utilisant les outils ensemble, vous obtenez une image complète du problème :
- L'alerte de surveillance vous a informé qu'il y avait un problème.
- La Google Cloud console vous a montré que le problème affectait les utilisateurs (redémarrages).
- Les commandes
kubectlont identifié la raison exacte des redémarrages (OOMKilled). - L'explorateur de métriques a visualisé le schéma de fuite de mémoire au fil du temps.
- L'explorateur de journaux a révélé le comportement spécifique à l'origine du problème de mémoire.
Vous êtes maintenant prêt à implémenter une solution. Vous pouvez optimiser le code de l'application pour gérer les fichiers volumineux plus efficacement ou, à titre de solution à court terme, augmenter la limite de mémoire du conteneur (en particulier la valeur spec.containers.resources.limits.memory) dans le fichier manifeste YAML de la charge de travail.
Étape suivante
Pour obtenir des conseils sur la résolution de problèmes spécifiques, consultez les guides de dépannage de GKE.
Si vous ne trouvez pas de solution à votre problème dans la documentation, consultez Obtenir de l'aide pour bénéficier d'une assistance supplémentaire, y compris des conseils sur les sujets suivants :
- Ouvrir une demande d'assistance en contactant Cloud Customer Care.
- Obtenir de l'aide de la communauté en posant des questions sur Stack Overflow et en utilisant le tag
google-kubernetes-enginepour rechercher des problèmes similaires. Vous pouvez également rejoindre le#kubernetes-enginecanal Slack pour obtenir une assistance supplémentaire de la communauté. - Signaler des problèmes ou demander des fonctionnalités à l'aide de l' outil public de suivi des problèmes.