Bonnes pratiques relatives à la gestion des ressources dans Azure Kubernetes Services (AKS) pour le développeur d’applicationsBest practices for application developers to manage resources in Azure Kubernetes Service (AKS)

Quand vous développez et exécutez des applications dans Azure Kubernetes Service (AKS), vous devez tenir compte de quelques points clés.As you develop and run applications in Azure Kubernetes Service (AKS), there are a few key areas to consider. La façon dont vous gérez vos déploiements d’application peut impacter négativement l’expérience des utilisateurs finaux.How you manage your application deployments can negatively impact the end-user experience of services that you provide. Pour vous aider à réussir, gardez à l’esprit ces quelques bonnes pratiques relatives au développement et à l’exécution d’applications dans AKS.To help you succeed, keep in mind some best practices you can follow as you develop and run applications in AKS.

Cet article traite des bonnes pratiques relatives à l’exécution d’un cluster et de charges de travail du point de vue d’un développeur d’applications.This best practices article focuses on how to run your cluster and workloads from an application developer perspective. Pour accéder aux bonnes pratiques en matière d’administration, consultez les bonnes pratiques de l’opérateur de cluster relatives à l’isolation et à la gestion de ressources dans Azure Kubernetes Service (AKS).For information about administrative best practices, see Cluster operator best practices for isolation and resource management in Azure Kubernetes Service (AKS). Dans cet article, vous apprenez :In this article, you learn:

  • Ce que sont les demandes et limites de ressources de podWhat are pod resource requests and limits
  • Développer et déployer des applications avec Bridge to Kubernetes et Visual Studio CodeWays to develop and deploy applications with Bridge to Kubernetes and Visual Studio Code
  • Comment utiliser l’outil kube-advisor pour rechercher les problèmes liés aux déploiementsHow to use the kube-advisor tool to check for issues with deployments

À définir les demandes et limites de ressources de podDefine pod resource requests and limits

Guide sur les bonnes pratiques : définissez des demandes et limites de pod sur tous les pods dans vos manifestes YAML.Best practice guidance - Set pod requests and limits on all pods in your YAML manifests. Si le cluster AKS utilise des quotas de ressources, votre déploiement peut être rejeté si vous ne définissez pas ces valeurs.If the AKS cluster uses resource quotas, your deployment may be rejected if you don't define these values.

L’un des principaux moyens de gérer les ressources de calcul au sein d’un cluster AKS consiste à utiliser des demandes et des limites de pod.A primary way to manage the compute resources within an AKS cluster is to use pod requests and limits. Ces demandes et limites indiquent au planificateur Kubernetes les ressources de calcul à affecter à un pod.These requests and limits let the Kubernetes scheduler know what compute resources a pod should be assigned.

  • Les demandes d’UC/de mémoire pod définissent une quantité fixe d’UC et de mémoire dont le pod a besoin régulièrement.Pod CPU/Memory requests define a set amount of CPU and memory that the pod needs on a regular basis.
    • Quand le planificateur Kubernetes tente de placer un pod sur un nœud, les demandes de pod permettent de déterminer le nœud ayant suffisamment de ressources disponibles pour la planification.When the Kubernetes scheduler tries to place a pod on a node, the pod requests are used to determine which node has sufficient resources available for scheduling.
    • Si vous ne définissez pas une requête de pod, elle est définie par défaut sur la limite définie.Not setting a pod request will default it to the limit defined.
    • Il est très important de surveiller les performances de votre application pour ajuster ces requêtes.It is very important to monitor the performance of your application to adjust these requests. En cas de demandes de ressource pod insuffisantes, votre application peut subir une dégradation des performances en raison de la surplanification d’un nœud.If insufficient pod resource requests are made, your application may receive degraded performance due to over scheduling a node. Si les requêtes sont surestimées, votre application peut avoir des difficultés à être planifiées.If requests are overestimated, your application may have increased difficulty getting scheduled.
  • Les limites de pod/de mémoire représentent la quantité maximale d’UC et de mémoire qu’un pod peut utiliser.Pod CPU/Memory limits are the maximum amount of CPU and memory that a pod can use. Les limites de mémoire permettent de définir les pods à supprimer en cas d’instabilité de nœud en raison de ressources insuffisantes.Memory limits help define which pods should be killed in the event of node instability due to insufficient resources. Sans les limites appropriées, les pods sont supprimés jusqu’à ce que la pression sur les ressources diminue.Without proper limits set pods will be killed until resource pressure is lifted. Un pod peut être ou non en mesure de dépasser la limite de processeur pendant un certain temps ; il ne sera pas supprimé s’il dépasse cette limite.A pod may or may not be able to exceed the CPU limit for a period of time, but the pod will not be killed for exceeding the CPU limit.
    • Les limites de pod permettent de définir le moment où un pod perd le contrôle de la consommation des ressources.Pod limits help define when a pod has lost control of resource consumption. Lorsqu’une limite est dépassée, le pod est prioritaire pour la mise à jour de l’intégrité du nœud et réduire l’impact sur les pods partageant le nœud.When a limit is exceeded, the pod is prioritized for killing to maintain node health and minimize impact to pods sharing the node.
    • Si vous ne définissez pas de limite de pod, elle est définie par défaut sur la valeur disponible la plus élevée sur un nœud donné.Not setting a pod limit defaults it to the highest available value on a given node.
    • Ne définissez pas une limite de pod trop élevée ne pouvant pas être prise en charge par vos nœuds.Don't set a pod limit higher than your nodes can support. Chaque nœud AKS réserve une quantité fixe d’UC et de mémoire pour les principaux composants de Kubernetes.Each AKS node reserves a set amount of CPU and memory for the core Kubernetes components. Votre application peut tenter de consommer trop de ressources sur le nœud pour que les autres pods s’exécutent correctement.Your application may try to consume too many resources on the node for other pods to successfully run.
    • Là encore, il est essentiel de superviser les performances de votre application à différents moments de la journée ou de la semaine.Again, it is very important to monitor the performance of your application at different times during the day or week. Déterminez les pics de demande et alignez les limites de pod avec les ressources requises pour répondre aux besoins maximum de l’application.Determine when the peak demand is, and align the pod limits to the resources required to meet the application's max needs.

Dans les spécifications de votre pod, il est recommandé et essentiel de définir ces requêtes et limites en fonction des informations ci-dessus.In your pod specifications, it's best practice and very important to define these requests and limits based on the above information. Si vous n’incluez pas ces valeurs, le planificateur Kubernetes ne peut pas prendre en compte les ressources dont vos applications ont besoin pour faciliter la planification des décisions.If you don't include these values, the Kubernetes scheduler cannot take into account the resources your applications require to aid in scheduling decisions.

Si le planificateur place un pod sur un nœud dont les ressources sont insuffisantes, cela entraîne la dégradation des performances de l’application.If the scheduler places a pod on a node with insufficient resources, application performance will be degraded. Pour les administrateurs de cluster, il est vivement recommandé de définir des quotas de ressources sur un espace de noms qui vous oblige à définir des demandes et des limites de ressources.It is highly recommended for cluster administrators to set resource quotas on a namespace that requires you to set resource requests and limits. Pour plus d’informations, consultez Quotas de ressources sur des clusters AKS.For more information, see resource quotas on AKS clusters.

Quand vous définissez une demande ou une limite d’UC, la valeur est mesurée en unités d’UC.When you define a CPU request or limit, the value is measured in CPU units.

  • Une UC de 1.0 équivaut à un cœur de processeur virtuel sous-jacent sur le nœud.1.0 CPU equates to one underlying virtual CPU core on the node.
  • La même mesure est utilisée pour les GPU.The same measurement is used for GPUs.
  • Vous pouvez définir des fractions mesurées en millicœurs.You can define fractions measured in millicores. Par exemple, 100 m correspond à 0,1 pour un cœur de processeur virtuel sous-jacent.For example, 100m is 0.1 of an underlying vCPU core.

Dans l’exemple de base suivant pour un pod NGINX, le pod demande 100m de temps UC et 128Mi de mémoire.In the following basic example for a single NGINX pod, the pod requests 100m of CPU time, and 128Mi of memory. Les limites de ressources pour le pod sont définies avec 250m comme UC et 256Mi comme mémoire :The resource limits for the pod are set to 250m CPU and 256Mi memory:

kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 250m
        memory: 256Mi

Pour plus d’informations sur les mesures et affectations de ressources, consultez Gestion des ressources de calcul pour les conteneurs.For more information about resource measurements and assignments, see Managing compute resources for containers.

Développer et déboguer des applications sur un cluster AKSDevelop and debug applications against an AKS cluster

Guide de bonne pratique : les équipes de développement doivent déployer et déboguer leurs applications sur un cluster AKS à l’aide de Bridge to Kubernetes.Best practice guidance - Development teams should deploy and debug against an AKS cluster using Bridge to Kubernetes.

Avec Bridge to Kubernetes, vous pouvez développer, déboguer et tester les applications directement sur un cluster AKS.With Bridge to Kubernetes, you can develop, debug, and test applications directly against an AKS cluster. Les développeurs d’une équipe travaillent ensemble pour générer et tester l’application tout au long de son cycle de vie.Developers within a team work together to build and test throughout the application lifecycle. Vous pouvez continuer à utiliser des outils existants tels que Visual Studio ou Visual Studio Code.You can continue to use existing tools such as Visual Studio or Visual Studio Code. Une extension est installée pour Bridge to Kubernetes et vous permet de développer directement dans un cluster AKS.An extension is installed for Bridge to Kubernetes that allows you to develop directly in an AKS cluster.

Ce processus de développement et de test intégré à Bridge to Kubernetes évite de recourir à des environnements de test locaux tels que minikube.This integrated development and test process with Bridge to Kubernetes reduces the need for local test environments, such as minikube. Au lieu de cela, vous développez et testez votre application sur un cluster AKS.Instead, you develop and test against an AKS cluster. Ce cluster peut être sécurisé et isolé, comme indiqué dans la section précédente sur l’utilisation d’espaces de noms pour isoler logiquement un cluster.This cluster can be secured and isolated as noted in previous section on the use of namespaces to logically isolate a cluster.

Bridge to Kubernetes est destiné à être utilisé avec les applications qui s’exécutent sur les nœuds et pods Linux.Bridge to Kubernetes is intended for use with applications that run on Linux pods and nodes.

Utiliser l’extension Visual Studio Code pour KubernetesUse the Visual Studio Code extension for Kubernetes

Guide sur les bonnes pratiques : installez et utilisez l’extension VS Code pour Kubernetes quand vous écrivez des manifestes YAML.Best practice guidance - Install and use the VS Code extension for Kubernetes when you write YAML manifests. Vous pouvez également utiliser l’extension en tant que solution de déploiement intégrée, ce qui peut être utile pour les propriétaires d’applications qui interagissent rarement avec le cluster AKS.You can also use the extension for integrated deployment solution, which may help application owners that infrequently interact with the AKS cluster.

L’extension Visual Studio Code pour Kubernetes vous permet de développer et déployer des applications sur AKS.The Visual Studio Code extension for Kubernetes helps you develop and deploy applications to AKS. L’extension fournit les informations IntelliSense pour les ressources Kubernetes ainsi que les graphiques et modèles Helm.The extension provides intellisense for Kubernetes resources, and Helm charts and templates. Vous pouvez également parcourir, déployer et modifier des ressources Kubernetes à partir de VS Code.You can also browse, deploy, and edit Kubernetes resources from within VS Code. L’extension fournit une vérification IntelliSense pour les demandes ou limites de ressources définies dans les spécifications de pod :The extension also provides an intellisense check for resource requests or limits being set in the pod specifications:

Avertissement de l’extension VS Code pour Kubernetes concernant des limites de mémoire manquantes

Rechercher régulièrement les problèmes liés à l’application avec kube-advisorRegularly check for application issues with kube-advisor

Meilleure pratique : exécutez régulièrement la dernière version de l’outil open source kube-advisor pour détecter les problèmes dans votre cluster.Best practice guidance - Regularly run the latest version of kube-advisor open source tool to detect issues in your cluster. Si vous appliquez des quotas de ressources sur un cluster AKS existant, exécutez d’abord kube-advisor pour rechercher les pods dont les demandes et limites de ressources ne sont pas définies.If you apply resource quotas on an existing AKS cluster, run kube-advisor first to find pods that don't have resource requests and limits defined.

L’outil kube-advisor est un projet open source AKS associé qui analyse un cluster Kubernetes et signale les problèmes trouvés.The kube-advisor tool is an associated AKS open source project that scans a Kubernetes cluster and reports on issues that it finds. Une vérification utile consiste à identifier les pods dépourvus de demandes et de limites de ressources.One useful check is to identify pods that don't have resource requests and limits in place.

L’outil kube-advisor peut rendre compte des limites et demandes de ressources manquantes dans PodSpecs pour les applications Windows et Linux, mais l’outil kube-advisor proprement dit doit être planifié sur un pod Linux.The kube-advisor tool can report on resource request and limits missing in PodSpecs for Windows applications as well as Linux applications, but the kube-advisor tool itself must be scheduled on a Linux pod. Vous pouvez planifier un pod pour qu’il s’exécute sur un pool de nœuds avec un système d’exploitation spécifique à l’aide d’un sélecteur de nœud dans la configuration du pod.You can schedule a pod to run on a node pool with a specific OS using a node selector in the pod's configuration.

Dans un cluster AKS qui héberge plusieurs applications et équipes de développement, il peut être difficile de suivre les pods sans ces demandes et limites de ressources.In an AKS cluster that hosts many development teams and applications, it can be hard to track pods without these resource requests and limits set. Une bonne pratique consiste à exécuter régulièrement kube-advisor sur vos clusters AKS.As a best practice, regularly run kube-advisor on your AKS clusters.

Étapes suivantesNext steps

Dans cet article, nous avons traité des bonnes pratiques relatives à l’exécution d’un cluster et de charges de travail du point de vue d’un opérateur de cluster.This best practices article focused on how to run your cluster and workloads from a cluster operator perspective. Pour accéder aux bonnes pratiques en matière d’administration, consultez les bonnes pratiques de l’opérateur de cluster relatives à l’isolation et à la gestion de ressources dans Azure Kubernetes Service (AKS).For information about administrative best practices, see Cluster operator best practices for isolation and resource management in Azure Kubernetes Service (AKS).

Pour implémenter quelques-unes de ces bonnes pratiques, consultez les articles suivants :To implement some of these best practices, see the following articles: