Formation > Blog > DevOps > Comment corriger les erreurs OOMKilled dans Kubernetes ?

Dans Kubernetes, le terme OOM Killed indique un scénario où un pod dépasse la limite de mémoire allouée. Cela entraine le noyau Linux à mettre fin au processus pour libérer des ressources mémoire. Si le OOM killer est un composant essentiel de la bonne santé de vos clusters Kubernetes, son fonctionnement peut être difficile à appréhender. Dans cet article, nous tâcherons de le démystifier afin d’éviter les erreurs de mémoire.

 

L’équipe Ambient IT

 

Comment fonctionne l’OOMKiller ?

L’OOM Killer (Out-Of-Memory Killer) est une fonction clé de Kubernetes qui aide à maintenir la stabilité du système et à prévenir l’épuisement de la mémoire. Il agit comme la dernière ligne de défense lorsque les ressources mémoire sont très faibles.

Le rôle de l’OOM killer est d’identifier le processus ou le pod responsable de la surcharge de mémoire et y met fin afin de libérer de la mémoire pour le reste du système. En sacrifiant un processus, l’OOM killer évite une panne complète du système, ce qui garantit la stabilité globale de votre infrastructure.

 

Déclenchement du OOMKiller

 

Pour prendre sa décision, l’OOM killer s’appuie sur les métriques de mémoire obtenues à partir de cAdvisor (Container Advisor) et exposées à Kubernetes. La principale métrique utilisée par le tueur d’OOM est container_memory_working_set_bytes. Elle indique la mémoire qui ne peut pas être expulsée en tenant compte des pages de mémoire utilisées par le conteneur.

Si container_memory_usage_bytes peut sembler un choix évident pour surveiller l’utilisation de la mémoire, il inclut des éléments mis en cache, tels que le cache du système de fichiers, qui peuvent être expulsés sous la pression de la mémoire. Il n’est par conséquent pas réellement représentatif de la mémoire observée et utilisée par le OOM Killer. container_memory_working_set_bytes est donc un meilleur indicateur, car il n’englobe que la mémoire surveillée.

Déboguer la consommation de mémoire

  

Si un système manque de mémoire, l’OOM Killer se reveille et a pour mission de sélectionner un processus à tuer. Il base toute ses descisions en en fonction du score OOM de chaque processus présent dans le sysème. L’objectif est de libérer suffisamment de mémoire pour que le système puisse continuer à fonctionner correctement.

Vous pouvez commencer par trouver quel processus a été ciblé par l’OOM Killer. Utilisez la commande dmesg pour consulter le journal.

dmesg | grep -i 'killed process'

Cette commande permet d’obtenir des informations sur les processus tués. La sortie vous indiquera quel processus a été tué et pourquoi.

Si vous souhaitez en plus comprendre pourquoi ce processus a été ciblé spécifiquement, utilisez la commande cat sur le fichier oom score dans le répertoire du processus sous /proc. Elle permet de connaitre l’OOM score d’un processus. Le score OOM est un nombre que le noyau attribue à chaque processus pour déterminer lequel il doit tuer dans une situation de mémoire insuffisante. Un score élevé signifie qu’un processus a plus de chance d’être tué.

echo -500 > /proc/12345/oom_score_adj
 

Enfin, les commandes free et top peuvent vous donner une vue en temps réel de l’utilisation de la mémoire de votre système. free -m affiche la quantité totale de mémoire physique et d’échange libre et utilisés dans le système, ainsi que les tampons et les caches utilisés par le noyau. La commande top vous permet de voir en temps réel les métriques d’un système en cours d’exécution, en affichant des informations récapitulatives sur le système ainsi qu’une liste des tâches actuellement gérées par le noyau.

Comment surveiller la mémoire dans Kubernetes ?

Pour surveiller l’utilisation de la mémoire et du processeur dans vos infrastructures, vous pouvez utiliser la commande kubectl top. Elle vous permet de voir la consommation de ressources pour les nœuds ou les pods. C’est un outil extrêmement utile pour les administrateurs kubernetes. Elle fournit des informations en temps réel sur l’utilisation de la mémoire et du CPU. Cela vous permet d’identifier les goulots d’étranglement potentiels, vous pouvez, par exemple, l’utiliser pour connaître l’utilisation du processeur et de la mémoire de vos nœuds avec la commande suivante.

kubectl top nodes

Il vous suffit de changer la fin par node <node name> à cette commande pour cibler un nœud en particulier. Changez nodes par pods ou pod <pod name> pour réaliser la même opération avec vos pods. Cela marche aussi pour les namespace.

Conclusion

L’OOM Killer de Kubernetes est un composant essentiel dans la bonne santé de vos clusters et applications conteneurisées. Pour éviter des conflits et des bugs liés à cet outil, la commande kubectl top est un outil précieux qui vous permet de surveiller l’utilisation de la mémoire et du CPU des pods et des nœuds dans votre cluster Kubernetes.

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