Partager via


Dépannage de la saturation de la mémoire dans les clusters AKS

Cet article décrit les méthodes de résolution des problèmes de saturation de la mémoire. La saturation de la mémoire se produit si au moins une application ou un processus a besoin de plus de mémoire qu’un hôte de conteneur peut fournir, ou si l’hôte épuise sa mémoire disponible.

Prerequisites

Symptômes

Le tableau suivant présente les symptômes courants de la saturation de la mémoire.

Symptôme Description
Pods non planifiés Les pods supplémentaires ne peuvent pas être planifiés si le nœud est proche de sa limite de mémoire définie.
Éviction de pod Si un nœud manque de mémoire, le kubelet peut supprimer des pods. Bien que le plan de contrôle tente de replanifier les pods supprimés sur d’autres nœuds qui ont des ressources, il n’existe aucune garantie que d’autres nœuds ont suffisamment de mémoire pour exécuter ces pods.
Nœud non prêt La saturation de la mémoire peut entraîner kubelet et containerd devenir insensible, ce qui entraîne éventuellement des problèmes de préparation des nœuds.
Mort hors mémoire (OOM) Un problème OOM se produit si l’éviction du pod ne peut pas empêcher un problème de nœud.

Liste de contrôle pour la résolution des problèmes

Pour réduire la saturation de la mémoire, utilisez des outils de surveillance efficaces et appliquez les meilleures pratiques.

Étape 1 : Identifier les nœuds qui ont une saturation de la mémoire

Utilisez l’une des méthodes suivantes pour identifier les nœuds qui ont une saturation de la mémoire :

  • Dans un navigateur web, utilisez la fonctionnalité Container Insights d’AKS dans le Portail Azure.

  • Dans une console, utilisez l’outil en ligne de commande Kubernetes (kubectl).

Container Insights est une fonctionnalité dans AKS qui surveille les performances de la charge de travail de conteneur. Pour plus d’informations, consultez Activer Container Insights pour le cluster Azure Kubernetes Service (AKS).

  1. Dans le Portail Azure, recherchez et sélectionnez services Kubernetes.

  2. Dans la liste des services Kubernetes, sélectionnez le nom de votre cluster.

  3. Dans le volet de navigation de votre cluster, recherchez le titre Surveillance , puis sélectionnez Insights.

  4. Définissez la valeur d’intervalle de temps appropriée.

  5. Sélectionnez l’onglet Nœuds .

  6. Dans la liste des métriques, sélectionnez Jeu de travail mémoire (calculé à partir d’Allocatable).

  7. Dans le sélecteur de centiles, définissez l’exemple sur Max, puis sélectionnez l’étiquette de colonne % maximal deux fois. Cette action trie les nœuds de table en fonction du pourcentage maximal de mémoire utilisée, du plus élevé au plus bas.

    Portail Azure capture d’écran de la vue Nœuds dans Container Insights au sein d’un cluster Azure Kubernetes Service (AKS).

  8. Étant donné que le premier nœud a la plus grande utilisation de la mémoire, sélectionnez ce nœud pour examiner l’utilisation de la mémoire des pods qui s’exécutent sur le nœud.

    Portail Azure capture d’écran des conteneurs d’un nœud sous la vue Nœuds dans Container Insights au sein d’un cluster Azure Kubernetes Service (AKS).

    Note

    Le pourcentage d’utilisation du processeur ou de la mémoire pour les pods est basé sur la demande d’UC spécifiée pour le conteneur. Il ne représente pas le pourcentage d’utilisation du processeur ou de la mémoire pour le nœud. Par conséquent, examinez l’utilisation réelle du processeur ou de la mémoire plutôt que le pourcentage d’utilisation du processeur ou de la mémoire pour les pods.

Maintenant que vous avez identifié les pods qui utilisent une mémoire élevée, vous pouvez identifier les applications qui s’exécutent sur le pod.

Étape 2 : Passer en revue les meilleures pratiques pour éviter la saturation de la mémoire

Passez en revue le tableau suivant pour savoir comment implémenter les meilleures pratiques pour éviter la saturation de la mémoire.

Bonne pratique Description
Utiliser des requêtes et des limites de mémoire Kubernetes fournit des options pour spécifier la taille minimale de mémoire (requête) et la taille maximale de mémoire (limite) d’un conteneur. En configurant des limites sur les pods, vous pouvez éviter la pression de la mémoire sur le nœud. Assurez-vous que les limites d’agrégation pour tous les pods en cours d’exécution ne dépassent pas la mémoire disponible du nœud. Cette situation est appelée surcommitting. Le planificateur Kubernetes alloue des ressources en fonction de demandes et de limites définies par le biais de la qualité de service (QoS). Sans les limites appropriées, le planificateur peut planifier un trop grand nombre de pods sur un seul nœud. Cela peut éventuellement faire tomber le nœud. En outre, tandis que le kubelet supprime les pods, il hiérarchise les pods dans lesquels l’utilisation de la mémoire dépasse leurs demandes définies. Nous vous recommandons de définir la demande de mémoire à proximité de l’utilisation réelle.
Activer la mise à l’échelle automatique des pods horizontaux En mettant à l’échelle le cluster, vous pouvez équilibrer les demandes sur de nombreux pods pour éviter la saturation de la mémoire. Cette technique peut réduire l’empreinte mémoire sur le nœud spécifique.
Utiliser des balises anti-affinité Pour les scénarios dans lesquels la mémoire n’est pas délimitée par conception, vous pouvez utiliser des sélecteurs de nœuds et des balises d’affinité ou anti-affinité, qui peuvent isoler la charge de travail à des nœuds spécifiques. En utilisant des balises anti-affinité, vous pouvez empêcher d’autres charges de travail de planifier des pods sur ces nœuds. Cela réduit le problème de saturation de la mémoire.
Choisir des machines virtuelles de référence SKU supérieures Les machines virtuelles qui ont plus de mémoire (RAM) à accès aléatoire sont mieux adaptées pour gérer une utilisation élevée de la mémoire. Pour utiliser cette option, vous devez créer un pool de nœuds, boucler les nœuds (les rendre non planifiés) et vider le pool de nœuds existant.
Isoler les charges de travail système et utilisateur Nous vous recommandons d’exécuter vos applications sur un pool de nœuds utilisateur. Cette configuration vous permet d’isoler les pods spécifiques à Kubernetes dans le pool de nœuds système et de maintenir les performances du cluster.

Plus d’informations

Exclusion de responsabilité de tiers

Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces produits.

Exclusion de responsabilité sur les coordonnées externes

Microsoft fournit des informations de contacts externes afin de vous aider à obtenir un support technique sur ce sujet. Ces informations de contact peuvent changer sans préavis. Microsoft ne garantit pas l’exactitude des informations concernant les sociétés externes.

Contactez-nous pour obtenir de l’aide

Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.