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

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 aux nœuds vous permet de planifier le calcul de la consommation et l’optimisation des 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 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 dans 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 configuré avec 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 minimale 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, la fonction qui permet d’augmenter ou de réduire la quantité de ressources de calcul d’un cluster Kubernetes est appelée 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 ces charges de travail s’exécutent. Vous mettez à l’échelle les charges de travail sur un cluster managé par AKS de deux façons. La première option consiste à mettre à l’échelle les pods ou les nœuds manuellement en fonction des besoins. Vous pouvez également 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, 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 nouveau service de modélisation prédictive lourd en calcul requiert un pool de nœuds basés sur GPU et ne s’exécute qu’à intervalles spécifiques. 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

Diagramme illustrant la façon dont la mise à l’échelle automatique de cluster ajoute des nœuds et la façon dont l’autoscaler de pod horizontal ajoute des 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 constatez que le service est submergé de demandes et génère une file d’attente de remises qui occasionne retards et frustrations. L’augmentation du nombre de réplicas du service de traitement par lots permet 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 les requêtes de lots diminuent, le nombre de réplicas est mis à l’échelle.

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 utilisez l’autoscaler de cluster pour mettre à l’échelle le nombre de nœuds dans les pools de nœuds d’un cluster. 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, vous pouvez souhaiter configurer un seul pool de nœuds pour permettre la mise à l’échelle automatique. Vous pouvez également configurer un pool de nœuds pour mettre à l’échelle uniquement 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.

Contrôle des 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.

Exécutez l’instruction suivante. L’autoscaler de cluster Kubernetes met à l’échelle...