Configurer plusieurs nœuds et activer la mise à l’échelle de zéro à l’aide d’AKS

Effectué

Le service Azure Kubernetes vous permet de créer des pools de nœuds différents pour faire correspondre des charges de travail spécifiques aux nœuds en cours d’exécution dans chaque pool de nœuds. Le processus de mise en correspondance des charges de travail avec des nœuds vous permet de planifier un calcul de consommation et d’optimiser les coûts.

La solution de suivi de drones de votre entreprise est déployée sur Azure Kubernetes Service (AKS) comme le sont de nombreux services et applications conteneurisés. Votre équipe a développé un nouveau service de modélisation prédictive qui traite les informations de trajectoire de vol dans des conditions météorologiques extrêmes et crée des trajectoires de vol optimales. Ce service requiert la prise en charge de machines virtuelles basées sur GPU et ne s’exécute que certains jours de la semaine.

Vous souhaitez configurer un pool de nœuds de cluster dédié au traitement des informations de trajectoire de vol. Le traitement ne s’exécute que quelques heures par jour et vous souhaitez utiliser un pool de nœuds basés sur un GPU. Cela étant, vous ne souhaitez payer pour les nœuds que lorsque vous les utilisez.

Voyons comment les pools de nœuds et les nœuds sont utilisés par AKS, puis comment mettre à l’échelle le nombre de nœuds dans un pool de nœuds.

Qu’est-ce qu’un pool de nœuds ?

Un pool de nœuds décrit un groupe de nœuds présentant la même configuration dans un cluster AKS. Ces nœuds contiennent les machines virtuelles sous-jacentes qui exécutent vos applications. Vous pouvez créer deux types de pools de nœuds sur un cluster Kubernetes managé par AKS :

  • Pools de nœuds système

  • Pools de nœuds utilisateur

Pools de nœuds système

Les pools de nœuds système hébergent des pods système critiques qui constituent le plan de contrôle de votre cluster. Un pool de nœuds système autorise uniquement l’utilisation de Linux en tant que système d’exploitation de nœud et n’exécute que des charges de travail basées sur Linux. Les nœuds d’un pool de nœuds système sont réservés aux charges de travail système et ne sont normalement pas utilisés pour exécuter des charges de travail personnalisées. Chaque cluster AKS doit contenir au moins un pool de nœuds système avec un nœud minimum, et vous devez définir les tailles de machine virtuelle sous-jacente pour les nœuds.

Pools de nœuds utilisateur

Les pools de nœuds utilisateur prennent en charge vos charges de travail et vous permettent de spécifier Windows ou Linux comme système d’exploitation de nœud. Vous pouvez également définir les tailles de machine virtuelle sous-jacente pour les nœuds et exécuter des charges de travail spécifiques. Par exemple, votre solution de suivi de drones dispose d’un service de traitement par lots que vous déployez sur un pool de nœuds avec une configuration pour des machines virtuelles à usage général. Le nouveau service de modélisation prédictive requiert des machines virtuelles basées sur GPU de plus grande capacité. Vous décidez de configurer un pool de nœuds distinct et de le configurer pour utiliser des nœuds compatibles GPU.

Nombre de nœuds dans un pool de nœuds

Vous pouvez configurer jusqu’à 100 nœuds dans un pool de nœuds. Toutefois, le nombre de nœuds que vous choisissez de configurer dépend du nombre de pods qui s’exécutent par nœud.

Par exemple, dans un pool de nœuds système, il est essentiel de définir sur 30 le nombre maximal de pods qui s’exécutent sur un nœud unique. Cette valeur garantit qu’un espace suffisant est disponible pour exécuter les blocs système critiques pour l’intégrité du cluster. Lorsque le nombre de pods dépasse cette valeur minimale, de nouveaux nœuds sont requis dans le pool pour planifier des charges de travail supplémentaires. Dès lors, le pool de nœuds système doit comprendre au moins un nœud. Pour les environnements de production, le nombre de nœuds recommandé pour un pool de nœuds système est de trois minimum.

Les pools de nœuds utilisateur sont conçus pour exécuter des charges de travail personnalisées et ne sont pas soumis à l’exigence de 30 pods. Les pools de nœuds utilisateur vous permettent de définir le nombre de nœuds pour un pool sur zéro.

Gérer la demande d’application dans un cluster AKS

Dans AKS, lorsque vous augmentez ou diminuez la quantité de ressources de calcul dans un cluster Kubernetes, vous effectuez une mise à l’échelle. Vous mettez à l’échelle le nombre d’instances de charge de travail qui doivent s’exécuter ou le nombre de nœuds sur lesquels s’exécutent ces charges de travail. Vous pouvez mettre à l’échelle les charges de travail sur un cluster managé par AKS de l’une des deux façons. La première option consiste à mettre à l’échelle les pods ou les nœuds manuellement en fonction des besoins. La deuxième option consiste à utiliser l’automatisation, où vous pouvez utiliser l’autoscaler de pod horizontal pour mettre à l’échelle les pods, et l’autoscaler de cluster pour mettre à l’échelle les nœuds.

Mettre à l’échelle un pool de nœuds manuellement

Si vous avez des charges de travail qui s’exécutent pendant une durée spécifique à intervalles spécifiques connus, la mise à l’échelle manuelle de la taille du pool de nœuds permet de contrôler les coûts des nœuds.

Supposons que le service de modélisation prédictive nécessite un pool de nœuds basé sur un GPU et s’exécute pendant une heure tous les jours à midi. Vous pouvez configurer le pool de nœuds avec des nœuds basés sur GPU spécifiques et mettre à l’échelle de zéro le pool de nœuds lorsque vous n’utilisez pas le cluster.

Voici un exemple de commande az aks node pool add que vous pouvez utiliser pour créer le pool de nœuds. Notez l’utilisation du paramètre --node-vm-size, qui spécifie la taille de machine virtuelle basée sur GPU Standard_NC6 pour les nœuds du pool.

az aks nodepool add \
    --resource-group resourceGroup \
    --cluster-name aksCluster \
    --name gpunodepool \
    --node-count 1 \
    --node-vm-size Standard_NC6 \
    --no-wait

Une fois le pool prêt, vous pouvez utiliser la commande az aks nodepool scale pour mettre à l’échelle de zéro le pool de nœuds. Notez que le paramètre --node-count est défini sur zéro. Voici un exemple de la commande :

az aks nodepool scale \
    --resource-group resourceGroup \
    --cluster-name aksCluster \
    --name gpunodepool \
    --node-count 0

Mettre à l’échelle un cluster automatiquement

Diagram that shows how the cluster autoscaler adds nodes and how the horizontal pod autoscaler adds pods.

AKS utilise l’autoscaler de cluster Kubernetes pour mettre à l’échelle automatiquement les charges de travail. Le cluster peut être mis à l’échelle à l’aide des deux options suivantes :

  • autoscaler de pod horizontal ;

  • autoscaler de cluster.

Examinons chaque option, en commençant par l’autoscaler de pod horizontal.

Autoscaler de pod horizontal

Utilisez l’autoscaler de pod horizontal Kubernetes pour surveiller la demande de ressources sur un cluster et mettre automatiquement à l’échelle le nombre de réplicas de charge de travail.

Le serveur de métriques Kubernetes collecte les métriques de mémoire et de processeur à partir de contrôleurs, de nœuds et de conteneurs actifs sur le cluster AKS. L’une des façons d’accéder à ces informations consiste à utiliser l’API de métriques. L’autoscaler de pod horizontal vérifie l’API de métriques toutes les 30 secondes afin de décider si votre application a besoin d’instances supplémentaires pour répondre à la demande.

Supposons que votre société dispose également d’un service de traitement par lots qui planifie les trajectoires de vol de drones. Vous remarquez que le service est submergé de demandes et génère une file d’attente de remises qui occasionne des retards et une frustration des clients. L’augmentation du nombre de réplicas du service de traitement par lots pourrait permettre le traitement rapide des commandes.

Pour résoudre le problème, vous configurez l’autoscaler de pod horizontal pour augmenter le nombre de réplicas de service, si nécessaire. Lorsque le nombre de requêtes par lots diminue, il diminue le nombre de réplicas du service.

Toutefois, l’autoscaler de pod horizontal met uniquement à l’échelle les pods sur les nœuds disponibles dans les pools de nœuds configurés du cluster.

Autoscaler de cluster

Une contrainte de ressource est déclenchée lorsque l’autoscaler de pod horizontal ne peut pas planifier de pods supplémentaires sur les nœuds existants d’un pool de nœuds. Vous devez utilisez l’autoscaler de cluster pour mettre à l’échelle le nombre de nœuds dans les pools de nœuds d’un cluster en cas de contraintes. L’autoscaler de cluster vérifie les métriques définies et met à l’échelle le nombre de nœuds en fonction des ressources de calcul requises.

L’autoscaler de cluster est utilisé avec l’autoscaler de pod horizontal.

L’autoscaler de cluster surveille les événements de changement d’échelle (scale-up et scale-down), et permet au cluster Kubernetes de modifier le nombre de nœuds d’un pool de nœuds en fonction de l’évolution de la demande de ressources.

Vous configurez chaque pool de nœuds avec des règles de mise à l’échelle différentes. Par exemple, il est possible que vous ne souhaitiez configurer qu’un seul pool de nœuds pour permettre une mise à l’échelle automatique ou que vous vouliez configurer un pool de nœuds pour uniquement mettre à l’échelle un nombre spécifique de nœuds.

Important

Vous perdez la possibilité de mettre à l’échelle de zéro le nombre de nœuds lorsque vous activez l’autoscaler de cluster sur un pool de nœuds. Au lieu de cela, vous définissez le nombre minimal sur zéro pour réaliser des économies sur les ressources du cluster.

Vérifiez vos connaissances

1.

Supposons que votre solution logicielle présente trois composants essentiels. Le premier composant est une application Web. Le deuxième est un service qui traite les commandes en ligne. Le troisième est un service de rendu vidéo et d’analyse qui s’exécute uniquement en fonction des besoins et requiert des machines virtuelles basées sur GPU. À des fins d’optimisation des coûts, combien de pools de nœuds devez-vous déployer dans un cluster Azure Kubernetes Service (AKS) pour gérer la solution ?

2.

Complétez la phrase suivante. L’autoscaler de cluster Kubernetes met à l’échelle...