Options de mise à l’échelle des applications dans AKS (Azure Kubernetes Service)Scaling options for applications in Azure Kubernetes Service (AKS)

Lorsque vous exécutez des applications dans Azure Kubernetes Service (AKS), vous pouvez avoir besoin d’augmenter ou de diminuer la quantité de ressources de calcul.As you run applications in Azure Kubernetes Service (AKS), you may need to increase or decrease the amount of compute resources. Tout comme le nombre des instances d’application qui vous est nécessaire change, le nombre de nœuds Kubernetes sous-jacents peut également varier.As the number of application instances you need change, the number of underlying Kubernetes nodes may also need to change. Par ailleurs, vous pouvez avoir besoin d’approvisionner rapidement un grand nombre d’instances d’application supplémentaires.You also might need to quickly provision a large number of additional application instances.

Cet article présente les concepts fondamentaux qui vous aident à mettre à l’échelle vos applications dans AKS :This article introduces the core concepts that help you scale applications in AKS:

Mettre à l’échelle des pods ou des nœuds manuellementManually scale pods or nodes

Vous pouvez mettre à l’échelle des réplicas (pods) et des nœuds manuellement pour tester la façon dont votre application répond à une modification au niveau des ressources disponibles et de l’état.You can manually scale replicas (pods) and nodes to test how your application responds to a change in available resources and state. Adapter manuellement les ressources vous permet également de définir une quantité donnée de ressources à utiliser pour maintenir un coût fixe, par exemple le nombre de nœuds.Manually scaling resources also lets you define a set amount of resources to use to maintain a fixed cost, such as the number of nodes. Pour mettre à l’échelle manuellement, vous définissez le nombre de réplicas ou de nœuds.To manually scale, you define the replica or node count. L’API Kubernetes planifie ensuite la création de pods supplémentaires ou le drainage de nœuds en fonction du nombre de réplicas ou de nœuds.The Kubernetes API then schedules creating additional pods or draining nodes based on that replica or node count.

Lors d’un scale-down des nœuds, l’API Kubernetes appelle l’API de calcul Azure appropriée liée au type de calcul utilisé par votre cluster.When scaling down nodes, the Kubernetes API calls the relevant Azure Compute API tied to the compute type used by your cluster. Par exemple, pour les clusters basés sur VM Scale Sets, la logique de sélection des nœuds à supprimer est déterminée par l’API VM Scale Sets.For example, for clusters built on VM Scale Sets the logic for selecting which nodes to remove is determined by the VM Scale Sets API. Pour en savoir plus sur la façon dont les nœuds sont sélectionnés pour la suppression lors d’un scale-down, consultez les Questions fréquentes (FAQ) sur VMSS.To learn more about how nodes are selected for removal on scale down, see the VMSS FAQ.

Pour vous familiariser avec la mise à l’échelle manuelle des pods et des nœuds, consultez Mettre à l’échelle des applications dans AKS.To get started with manually scaling pods and nodes see Scale applications in AKS.

Autoscaler de pods élastiqueHorizontal pod autoscaler

Kubernetes utilise l’autoscaler de pods élastique pour superviser la demande en ressources et adapter automatiquement le nombre de réplicas.Kubernetes uses the horizontal pod autoscaler (HPA) to monitor the resource demand and automatically scale the number of replicas. Par défaut, l’autoscaler de pods élastique vérifie l’API de métriques toutes les 30 secondes à la recherche d’une modification à apporter au nombre de réplicas.By default, the horizontal pod autoscaler checks the Metrics API every 30 seconds for any required changes in replica count. Lorsque des modifications sont nécessaires, le nombre de réplicas est augmenté ou diminué en conséquence.When changes are required, the number of replicas is increased or decreased accordingly. L’autoscaler de pods élastique fonctionne avec les clusters AKS qui ont déployé le serveur de métriques pour Kubernetes 1.8 +.Horizontal pod autoscaler works with AKS clusters that have deployed the Metrics Server for Kubernetes 1.8+.

Mise à l’échelle de pods élastique Kubernetes

Lorsque vous configurez l’autoscaler de pods élastique pour un déploiement donné, vous définissez le nombre minimal et maximal de réplicas qui peuvent s’exécuter.When you configure the horizontal pod autoscaler for a given deployment, you define the minimum and maximum number of replicas that can run. Vous précisez également la métrique à surveiller et sur laquelle baser vos décisions de mise à l’échelle, par exemple l’utilisation du processeur.You also define the metric to monitor and base any scaling decisions on, such as CPU usage.

Pour vous familiariser avec l’autoscaler de pods élastique dans AKS, consultez Mettre à l’échelle des pods dans AKS.To get started with the horizontal pod autoscaler in AKS, see Autoscale pods in AKS.

Ralentissement des événements de mise à l’échelleCooldown of scaling events

Étant donné que l’autoscaler de pods élastique vérifie l’API de métriques toutes les 30 secondes, les événements de mise à l’échelle précédents peuvent ne pas être totalement terminés avant la vérification suivante.As the horizontal pod autoscaler checks the Metrics API every 30 seconds, previous scale events may not have successfully completed before another check is made. Ce comportement peut pousser l’autoscaler de pods élastique à modifier le nombre de réplicas avant même que l’événement de mise à l’échelle précédent ait pu recevoir la charge de travail de l’application, et que les demandes en ressources soient ajustées en conséquence.This behavior could cause the horizontal pod autoscaler to change the number of replicas before the previous scale event could receive application workload and the resource demands to adjust accordingly.

Pour réduire le nombre d’événements de concurrence, une valeur de délai est définie.To minimize race events, a delay value is set. Cette valeur précise la durée pendant laquelle l’autoscaler de pods élastique doit attendre, entre la fin d’un événement de mise à l’échelle et le déclenchement d’un autre événement de mise à l’échelle.This value defines how long the horizontal pod autoscaler must wait after a scale event before another scale event can be triggered. Ce comportement permet au nouveau nombre de réplicas d’être pris en compte, et à l’API de métriques de refléter la charge de travail distribuée.This behavior allows the new replica count to take effect and the Metrics API to reflect the distributed workload. Il n’y a aucun délai pour les événements de scale-up à partir de Kubernetes 1.12. Toutefois, le délai des événements de scale-down est de 5 minutes par défaut.There is no delay for scale-up events as of Kubernetes 1.12, however the delay on scale down events is defaulted to 5 minutes.

Actuellement, vous ne pouvez pas paramétrer ces valeurs de ralentissement à partir de la valeur par défaut.Currently, you can't tune these cooldown values from the default.

Autoscaler de clusterCluster autoscaler

Pour répondre aux demandes changeantes de pods, Kubernetes propose un autoscaler de cluster qui ajuste le nombre de nœuds en fonction des ressources de calcul demandées dans le pool de nœuds.To respond to changing pod demands, Kubernetes has a cluster autoscaler, that adjusts the number of nodes based on the requested compute resources in the node pool. Par défaut, l’autoscaler de cluster vérifie le serveur d’API de métriques toutes les 10 secondes à la recherche de toute modification à apporter au nombre de nœuds.By default, the cluster autoscaler checks the Metrics API server every 10 seconds for any required changes in node count. Si l’autoscaler de cluster détermine qu’une modification est nécessaire, le nombre de nœuds de votre cluster AKS est augmenté ou diminué en conséquence.If the cluster autoscale determines that a change is required, the number of nodes in your AKS cluster is increased or decreased accordingly. L’autoscaler de cluster fonctionne avec les clusters AKS avec RBAC Kubernetes qui exécutent Kubernetes versions 1.10.x ou ultérieures.The cluster autoscaler works with Kubernetes RBAC-enabled AKS clusters that run Kubernetes 1.10.x or higher.

Autoscaler de cluster Kubernetes

L’autoscaler de cluster est généralement utilisé parallèlement à l’autoscaler de pods élastique.Cluster autoscaler is typically used alongside the horizontal pod autoscaler. Lorsqu’ils sont combinés, l’autoscaler de pods élastique augmente ou diminue le nombre de pods en fonction de l’exigence des applications, tandis que l’autoscaler de cluster ajuste à proportion le nombre de nœuds nécessaires pour exécuter ces pods supplémentaires.When combined, the horizontal pod autoscaler increases or decreases the number of pods based on application demand, and the cluster autoscaler adjusts the number of nodes as needed to run those additional pods accordingly.

Pour vous familiariser avec l’autoscaler de cluster dans AKS, consultez Autoscaler de cluster sur AKS.To get started with the cluster autoscaler in AKS, see Cluster Autoscaler on AKS.

Événements de scale-outScale out events

Si les ressources de calcul d’un nœud sont insuffisantes pour l’exécution d’un pod demandé, ce pod ne peut pas avancer dans le processus de planification.If a node doesn't have sufficient compute resources to run a requested pod, that pod can't progress through the scheduling process. Le pod ne peut pas démarrer, sauf si des ressources de calcul supplémentaires sont disponibles dans le pool de nœuds.The pod can't start unless additional compute resources are available within the node pool.

Lorsque l’autoscaler de cluster remarque que des pods ne sont pas panifiables en raison de contraintes liées aux ressources du pool de nœuds, le nombre de nœuds à l’intérieur de ce pool est augmenté pour fournir les ressources de calcul supplémentaires.When the cluster autoscaler notices pods that can't be scheduled because of node pool resource constraints, the number of nodes within the node pool is increased to provide the additional compute resources. Lorsque ces nœuds supplémentaires sont correctement déployés et utilisables au sein du pool de nœuds, les pods sont alors planifiés pour s’exécuter sur eux.When those additional nodes are successfully deployed and available for use within the node pool, the pods are then scheduled to run on them.

Si votre application doit rapidement se mettre à l'échelle, il est possible que certains pods restent en état d’attente de planification, jusqu’à ce que les nœuds supplémentaires déployés par l’autoscaler de cluster puissent accepter les pods planifiés.If your application needs to scale rapidly, some pods may remain in a state waiting to be scheduled until the additional nodes deployed by the cluster autoscaler can accept the scheduled pods. Pour les applications qui présentent des demandes de croissance extrêmement forte et rapide, vous pouvez mettre à l’échelle au moyen de nœuds virtuels et d’Azure Container Instances.For applications that have high burst demands, you can scale with virtual nodes and Azure Container Instances.

Événements de scale-inScale in events

L’autoscaler de cluster surveille également le statut de planification des pods pour les nœuds qui n’ont pas reçu récemment de nouvelles demandes de planification.The cluster autoscaler also monitors the pod scheduling status for nodes that haven't recently received new scheduling requests. Ce scénario indique que le pool de nœuds détient plus de ressources de calcul que nécessaire, et que le nombre de nœuds peut être réduit.This scenario indicates the node pool has more compute resources than are required, and the number of nodes can be decreased.

Un nœud, qui transmet un seuil indiquant pendant 10 minutes (par défaut) qu’il n’est plus nécessaire, est planifié pour la suppression.A node that passes a threshold for no longer being needed for 10 minutes by default is scheduled for deletion. Lorsque cette situation se produit, les pods sont planifiés pour s’exécuter sur d’autres nœuds au sein du pool de nœuds tandis que l’autoscaler de cluster réduit le nombre de nœuds.When this situation occurs, pods are scheduled to run on other nodes within the node pool, and the cluster autoscaler decreases the number of nodes.

Vos applications peuvent rencontrer quelques perturbations au moment où les pods sont planifiés sur des nœuds différents et que l’autoscaler de cluster diminue le nombre de nœuds.Your applications may experience some disruption as pods are scheduled on different nodes when the cluster autoscaler decreases the number of nodes. Pour limiter ces perturbations, évitez les applications qui utilisent une seule instance de pod.To minimize disruption, avoid applications that use a single pod instance.

Intégration à Azure Container InstancesBurst to Azure Container Instances

Pour faire évoluer rapidement votre cluster AKS, vous pouvez intégrer Azure Container Instances (ACI).To rapidly scale your AKS cluster, you can integrate with Azure Container Instances (ACI). Kubernetes dispose de composants intégrés pour mettre à l’échelle le nombre de réplicas et de nœuds.Kubernetes has built-in components to scale the replica and node count. Toutefois, si votre application doit rapidement s’adapter, l’autoscaler de pods élastique peut planifier plus de pods que la quantité pouvant être fournie par les ressources de calcul existantes dans le pool de nœuds.However, if your application needs to rapidly scale, the horizontal pod autoscaler may schedule more pods than can be provided by the existing compute resources in the node pool. S’il est configuré, ce scénario oblige par déclenchement l’autoscaler de cluster à déployer des nœuds supplémentaires dans le pool de nœuds, mais quelques minutes peuvent être nécessaires pour que ces nœuds soient correctement provisionnés et permettent au planificateur Kubernetes d’exécuter des pods dessus.If configured, this scenario would then trigger the cluster autoscaler to deploy additional nodes in the node pool, but it may take a few minutes for those nodes to successfully provision and allow the Kubernetes scheduler to run pods on them.

Mise à l'échelle rapide de Kubernetes sur ACI

ACI vous permet de déployer rapidement des instances de conteneur sans la surcharge d’une infrastructure supplémentaire.ACI lets you quickly deploy container instances without additional infrastructure overhead. Lorsque vous vous connectez à AKS, ACI devient une extension logique et sécurisée de votre cluster AKS.When you connect with AKS, ACI becomes a secured, logical extension of your AKS cluster. Le composant nœuds virtuels, qui est basé sur Virtual Kubelet, est installé dans votre cluster AKS qui présente ACI comme un nœud Kubernetes virtuel.The virtual nodes component, which is based on Virtual Kubelet, is installed in your AKS cluster that presents ACI as a virtual Kubernetes node. Kubernetes peut alors planifier les pods s’exécutant en tant qu’instances ACI via des nœuds virtuels, et non en tant que pods sur des nœuds de machine virtuelle, directement dans votre cluster AKS.Kubernetes can then schedule pods that run as ACI instances through virtual nodes, not as pods on VM nodes directly in your AKS cluster.

Votre application n’a besoin d’aucune modification pour utiliser les nœuds virtuels.Your application requires no modification to use virtual nodes. Les déploiements peuvent mettre à l’échelle dans AKS et ACI, et sans aucun délai car l’autoscaler de cluster déploie les nouveaux nœuds dans votre cluster AKS.Deployments can scale across AKS and ACI and with no delay as cluster autoscaler deploys new nodes in your AKS cluster.

Les nœuds virtuels sont déployés sur un sous-réseau supplémentaire, dans le même réseau virtuel que votre cluster AKS.Virtual nodes are deployed to an additional subnet in the same virtual network as your AKS cluster. Cette configuration de réseau virtuel permet au trafic entre ACI et AKS d’être sécurisé.This virtual network configuration allows the traffic between ACI and AKS to be secured. À l’instar d’un cluster AKS, une instance ACI est une ressource de calcul logique, sécurisée, qui est isolée des autres utilisateurs.Like an AKS cluster, an ACI instance is a secure, logical compute resource that is isolated from other users.

Étapes suivantesNext steps

Pour vous familiariser avec la mise à l’échelle des applications, suivez tout d’abord le Guide de démarrage rapide pour créer un cluster AKS avec l’interface CLI.To get started with scaling applications, first follow the quickstart to create an AKS cluster with the Azure CLI. Vous pouvez ensuite commencer à mettre à l’échelle les applications manuellement ou automatiquement dans votre cluster AKS :You can then start to manually or automatically scale applications in your AKS cluster:

Pour plus d’informations sur les concepts fondamentaux de Kubernetes et d’AKS, consultez les articles suivants :For more information on core Kubernetes and AKS concepts, see the following articles: