Configurer plusieurs pools de nœuds à l’aide de pools de nœuds spot AKS avec l’autoscaler de cluster

Azure fournit des instances de machine virtuelle Azure qui combinent scalabilité et réduction des coûts. Elles sont idéales pour les charges de travail pouvant être interrompues. Ces machines virtuelles accèdent à une capacité de calcul Azure inutilisée à prix réduit tout en prenant en charge des scénarios de calcul hautes performances.

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. L’un de ces services correspond à un service de traitement par lots qui planifie les trajectoires de vol des drones. Suite à une croissance soudaine de votre base de clients, le service de traitement par lots est submergé de demandes et ne peut plus suivre. Cette situation occasionne retards et frustrations.

La mise à l’échelle automatique du nombre de réplicas du service de traitement par lots permet le traitement en temps voulu des commandes. Toutefois, vous devez également déployer davantage de nœuds pour répondre aux besoins en ressources informatiques. En analysant les tendances d’utilisation dans Azure Monitor, vous remarquez que ces nœuds sont utilisés uniquement à des moments spécifiques et de manière non rentable. Le service de traitement par lots est sans état et n’enregistre aucune donnée de session client. Vous comprenez que vous pouvez réaliser des économies en :

  • Utilisant des instances de nœuds à faible coût.
  • Mettant automatiquement à l’échelle le nombre de nœuds du pool configuré pour le traitement par lots.

Examinons l’infrastructure sur laquelle repose cette solution économique dans AKS.

Qu’est-ce qu’une machine virtuelle spot dans Azure ?

Une machine virtuelle spot est une machine virtuelle qui vous permet d’accéder à une capacité de calcul Azure inutilisée en bénéficiant de remises conséquentes. Les machines virtuelles spot remplacent les machines virtuelles basse priorité existantes dans Azure. Vous pouvez utiliser des machines virtuelles spot pour exécuter des charges de travail telles que les suivantes :

  • scénarios informatiques hautes performances, traitement par lots ou applications de rendu visuel ;

  • applications sans état à grande échelle ;

  • environnements de développement/test, incluant des charges de travail d’intégration continue (CI) et de livraison continue (CD).

Disponibilité des machines virtuelles spot

La disponibilité des machines virtuelles spot dépend de facteurs tels que la capacité, la taille, la région et l’heure de la journée. Azure alloue des machines virtuelles uniquement si la capacité est disponible. Dès lors, il n’existe aucun contrat de niveau de service (SLA) pour ces types de machines virtuelles et elles n’offrent aucune garantie de haute disponibilité.

Stratégie d’éviction des machines virtuelles spot

La stratégie d’éviction par défaut des machines virtuelles spot est Libérer. Azure écarte les machines virtuelles spot avec un préavis de 30 secondes lorsque la capacité d’une région est limitée. Une machine virtuelle définie avec la stratégie Libérer, passe à l’état arrêté-libéré lorsqu’elle est écartée. Vous pouvez redéployer une machine virtuelle écartée lorsque la capacité spot redevient disponible. Une machine virtuelle libérée continue de suivre votre quota de processeur virtuel spot, et les frais relatifs aux disques alloués sous-jacents s’appliquent toujours.

Qu’est-ce qu’un groupe de machines virtuelles identiques spot ?

Un groupe de machines virtuelles identiques spot est un groupe de machines virtuelles identiques qui prend en charge des machines virtuelles spot Azure. Ces machines virtuelles se comportent de la même façon que les machines virtuelles spot classiques, à la différence près que vous lorsque vous utilisez la prise en charge des groupes de machines virtuelles identiques dans Azure, vous choisissez entre deux stratégies d’éviction :

  • Libérer : La stratégie Libérer fonctionne exactement comme décrit précédemment.

  • Supprimer : La stratégie Supprimer vous permet d’éviter le coût des disques et d’atteindre les limites de quota. Avec la stratégie d’éviction Supprimer, les machines virtuelles écartées sont supprimées en même temps que leurs disques sous-jacents. La fonctionnalité de mise à l’échelle automatique du groupe identique peut désormais tenter automatiquement de compenser l’éviction de machines virtuelles en créant de nouvelles machines virtuelles. Bien que la création de machines virtuelles ne soit pas garantie, les machines virtuelles écartées ne sont pas comptabilisées dans votre quota de processeur virtuel ou engendrent des coûts pour les disques sous-jacents.

    Une bonne pratique consiste à n’utiliser la fonctionnalité de mise à l’échelle automatique que lorsque vous définissez la stratégie d’éviction Supprimer sur le groupe identique.

Qu’est-ce qu’un pool de nœuds spot dans Azure Kubernetes Service (AKS) ?

Un pool de nœuds spot est un pool de nœuds utilisateur qui utilise un groupe de machines virtuelles identiques spot. AKS prend en charge les machines virtuelles spot lorsque vous :

  • Devez créer des pools de nœuds utilisateur.
  • Souhaitez bénéficier des avantages en matière de coûts offerts par la prise en charge des groupes de machines virtuelles identiques pour les machines virtuelles spot Azure.

Utilisez des pools de nœuds spot pour :

  • Tirer parti de la capacité inutilisée dans Azure.
  • Utiliser les fonctionnalités de groupe identique avec la stratégie d’éviction Supprimer.
  • Définir le prix maximum que vous souhaitez payer par heure.
  • Activer l’autoscaler de cluster Kubernetes AKS recommandé lors de l’utilisation de pools de nœuds spot.

Par exemple, pour prendre en charge le service de traitement par lots de l’application de suivi de drones, vous pouvez créer un pool de nœuds utilisateur spot et activer l’autoscaler de cluster. Vous configurez ensuite le scaler de pod horizontal pour déployer des services de traitement par lots supplémentaires en réponse aux demandes de ressources.

À mesure que la demande de nœuds augmente, l’autoscaler de cluster peut mettre à l’échelle le nombre de nœuds du pool de nœuds spot. Si des évictions de nœud se produisent, l’autoscaler de cluster continue d’essayer de mettre à l’échelle le nombre de nœuds en l’augmentant si des nœuds supplémentaires sont toujours nécessaires.

Limitations des pools de nœuds spot

Avant de décider d’ajouter un pool de nœuds utilisateur spot à votre cluster AKS, tenez compte des limitations suivantes :

  • Le groupe identique spot sous-jacent n’est déployé que sur un seul domaine d’erreur, et n’offre aucune garantie de haute disponibilité.
  • Le cluster AKS implique que la prise en charge de pool de nœuds multiples soit activée.
  • Vous ne pouvez utiliser les pools de nœuds spot qu’en tant que pools de nœuds utilisateur.
  • Les pools de nœuds spot ne peuvent pas être mis à niveau.
  • La création de machines virtuelles spot n’est pas garantie. La création de nœuds spot dépend de la capacité et de la disponibilité de quota dans la région Azure où est déployé le cluster.

Souvenez-vous que les pools de nœuds spot ne doivent être utilisés que pour des charges de travail qui peuvent être interrompues.

Créer un pool de nœuds spot

Au moment de la rédaction de ce module, les pools de nœuds spot sont en préversion. Pour terminer la configuration du pool de nœuds spot, vous devez activer la fonctionnalité d’évaluation sur le fournisseur de ressources Microsoft.ContainerService et installer l’extension CLI aks-preview.

Important

Dans certains abonnements, tels que les abonnements parrainés, la possibilité de créer des machines virtuelles spot et des pools de nœuds spot est limitée. Vous ne serez peut-être pas en mesure de créer un pool de nœuds spot pour votre cluster.

Activer les fonctionnalités en préversion sur votre abonnement

Pour utiliser des pools de nœuds spot, vous devez activer la fonctionnalité spotpoolpreview sur votre abonnement et fournir l’ensemble d’améliorations du service le plus récent lors de la configuration d’un cluster.

Attention

Après avoir activé certaines fonctionnalités d’évaluation dans Azure, les valeurs par défaut peuvent être utilisées pour tous les clusters AKS créés dans l’abonnement. Testez les fonctionnalités d’évaluation dans des abonnements hors production pour éviter des effets secondaires imprévus dans les déploiements de production.

Pour inscrire la fonctionnalité spotpoolpreview :

  1. Utilisez la commande az feature register pour inscrire la fonctionnalité spotpoolpreview. Cette commande accepte deux paramètres : espace de noms identifie le fournisseur de ressources avec lequel vous inscrivez la fonctionnalité, et nom identifie la fonctionnalité.

    Vous inscrivez la fonctionnalité spotpoolpreview auprès du fournisseur de ressources Service conteneur Microsoft.

    Le fournisseur de ressources Service conteneur Microsoft autorise les actions qui ont un impact sur la gestion d’un cluster AKS. Il peut notamment s’agir de la création, de la mise à jour et de la suppression de services conteneur, ou de la lecture des détails correspondants.

    Voici un exemple de la commande az feature register pour inscrire la fonctionnalité spotpoolpreview.

    az feature register --namespace "Microsoft.ContainerService" --name "spotpoolpreview"
    
  2. L’inscription du fournisseur de ressources requiert une actualisation lors l’inscription de la fonctionnalité. Pour vérifier l’état de l’inscription, interrogez la liste de fonctionnalités des fournisseurs de ressources. Une fois terminée, la requête az feature list retourne la valeur Inscrite. Voici un exemple de la commande de requête :

    az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/spotpoolpreview')].{Name:name,State:properties.state}"
    
  3. Une fois la fonctionnalité inscrite, la dernière étape consiste à propager la nouvelle inscription. Exécutez la commande az provider register avec le paramètre --namespace en spécifiant le même fournisseur de ressources que celui de la version antérieure. Voici un exemple de la commande az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Installer l’extension CLI aks-preview

Les paramètres de commande du pool de nœuds spot AKS sont uniquement disponibles dans l’extension CLI aks-preview. Si l’extension n’est pas installée, vous ne pouvez pas utiliser les fonctionnalités d’évaluation.

Vous pouvez exécuter les commandes suivantes pour installer l’extension ou, si elle est déjà installée, pour vérifier sa version et la mettre à jour.

Si l’extension n’est pas installée, exécutez la commande suivante pour le faire :

az extension add --name aks-preview

Vous devez installer l’extension CLI aks-preview version 0.4.53 ou ultérieure pour créer un cluster AKS qui utilise des pools de nœuds spot. Vérifiez la version installée de l’extension si vous avez déjà installé la version en préversion. Pour interroger la version de l’extension, exécutez la commande az extension show :

az extension show --name aks-preview --query [version]

Si vous avez déjà installé l’extension et devez la mettre à jour vers une version plus récente, exécutez la commande az extension update :.

az extension update --name aks-preview

Ajouter un pool de nœuds spots à un cluster AKS

Un pool de nœuds spot ne peut pas être un pool de nœuds système pour un cluster AKS. Vous allez d’abord créer votre cluster, puis utiliser la commande az aks nodepool add pour ajouter un nouveau pool de nœuds utilisateur.

Vous définissez plusieurs paramètres pour un nouveau pool de nœuds afin de le configurer en tant que pool de nœuds spot.

Priorité

Le paramètre --priority est défini sur Regular par défaut pour un nouveau pool de nœuds. Définissez la valeur sur Spot pour indiquer que le nouveau pool que vous créez est un pool de nœuds spot. Vous ne pourrez pas modifier cette valeur après la création.

Stratégie d’éviction

Un pool de nœuds spot doit utiliser un groupe de machines virtuelles identiques. Comme indiqué précédemment, souvenez-vous que le pool de nœuds spot utilise un groupe identique spot. Définissez --eviction-policy sur Delete pour permettre au groupe identique de supprimer le nœud et le disque alloué sous-jacent que le nœud utilise. Vous ne pourrez pas modifier cette valeur après la création.

Vous pouvez définir la stratégie d’éviction sur Deallocate. Toutefois, une fois écartés, ces nœuds sont comptabilisés par rapport à votre quota de calcul et ont une incidence sur la mise à l’échelle ou la mise à niveau ultérieure du cluster.

Prix maximal d’un nœud spot

Les pools de nœuds spot vous permettent d’optimiser les coûts en définissant le montant maximal que vous êtes disposé à débourser par nœud spot par heure. Pour définir ce montant, utilisez le paramètre --spot-max-price. Les nœuds spot nouvellement créés sont écartés une fois cette valeur atteinte.

Vous pouvez définir cette valeur sur n’importe quel nombre positif jusqu’à cinq décimales, ou la définir sur -1. La définition de la valeur --spot-max-price sur -1 affecte votre pool de nœuds comme suit :

  • Les nœuds ne seront pas écartés en fonction de leur prix.
  • Le coût des nouveaux nœuds sera le plus faible entre le prix actuel des nœuds spot ou le prix d’un nœud standard.

Par exemple, si vous définissez la valeur sur 0,98765, le prix maximal d’un nœud sera de 0,98765 USD par heure. Lorsque l’utilisation du nœud dépasse cette valeur, il est écarté.

Activer l’autoscaler de cluster

Nous vous recommandons d’activer l’autoscaler de cluster à l’aide du paramètre --enable-cluster-autoscaler. Si vous n’utilisez pas l’autoscaler de cluster, vous courez le risque que le nombre de nœuds chute à zéro dans le pool de nœuds à mesure que des nœuds sont écartés en raison de contraintes de capacité Azure.

Nombre minimal de nœuds

Définissez le nombre minimal de nœuds sur une valeur comprise entre 1 et 100 à l’aide du paramètre --min-count. Le nombre minimal de nœuds est requis lorsque vous activez l’autoscaler de cluster.

Nombre maximal de nœuds

Définissez le nombre maximal de nœuds sur une valeur comprise entre 1 et 100 à l’aide du paramètre --max-count. Le nombre maximal de nœuds est requis lorsque vous activez l’autoscaler de cluster.

Voici un exemple de commande az aks nodepool add qui ajoute un pool de nœuds spot. Notez l’utilisation de paramètres supplémentaires pour activer les fonctionnalités de nœuds spot.

az aks nodepool add \
    --resource-group resourceGroup \
    --cluster-name aksCluster \
    --name spotpool01 \
    --enable-cluster-autoscaler \
    --max-count 3 \
    --min-count 1 \
    --priority Spot \
    --eviction-policy Delete \
    --spot-max-price -1 \
    --no-wait

Déployer des pods vers des pools de nœuds spot

Lors du déploiement de charges de travail dans Kubernetes, vous pouvez fournir des informations au planificateur pour spécifier les nœuds sur lesquels les charges de travail peuvent ou non s’exécuter. Vous contrôlez la planification de la charge de travail en configurant des rejets, une tolérance ou une affinité de nœud. Les nœuds spot sont configurés avec une étiquette et un rejet spécifiques.

Qu’est-ce qu’un rejet ?

Un rejet est appliqué à un nœud pour indiquer que seuls des pods spécifiques peuvent être planifiés sur celui-ci. Les nœuds spot sont configurés avec une étiquette définie sur kubernetes.azure.com/scalesetpriority:spot.

Qu’est-ce qu’une tolérance ?

La tolérance est une spécification appliquée à un pod pour lui permettre de tolérer le rejet d’un nœud. Les nœuds spot sont configurés avec rejet de nœud défini sur kubernetes.azure.com/scalesetpriority=spot:NoSchedule.

Qu’est-ce qu’une affinité de nœud ?

Une affinité de nœud vous permet de décrire les pods planifiés sur un nœud. Une affinité est spécifiée à l’aide d’étiquettes définies sur le nœud. Par exemple, dans AKS, les pods système sont configurés avec une anti-affinité concernant les nœuds spot afin d’éviter que les pods soient planifiés sur ces nœuds.

Définir une tolérance dans un fichier manifeste de pod

Vous spécifiez une tolérance de rejet de nœud en créant une entrée de dictionnaire tolerations dans le fichier manifeste de votre charge de travail. Dans ce dictionnaire, vous définissez les propriétés suivantes pour chaque rejet de nœud que la charge de travail doit tolérer dans cette section :

Propriété Description
key Identifie une paire clé-valeur de rejet de nœud spécifiée sur le nœud. Par exemple, sur un pool de nœuds spot, la paire clé-valeur est kubernetes.azure.com/scalesetpriority:spot. La clé est kubernetes.azure.com/scalesetpriority.
operator Permet que la tolérance corresponde à un rejet. L’opérateur par défaut est Equal. Vous pouvez également spécifier Exists pour la correspondance avec la tolérance. Toutefois, lorsque vous utilisez Exists, vous ne spécifiez pas la propriété suivante (value).
value Représente la partie valeur de la paire clé-valeur de rejet de nœud spécifiée sur le nœud. Par exemple, sur un pool de nœuds spot avec une paire clé-valeur de kubernetes.azure.com/scalesetpriority:spot, la valeur est spot.
effect Indique comment la planification d’un pod est gérée dans le système. Trois options sont disponibles : NoSchedule, PreferNoSchedule et NoExecute. NoSchedule veille à ce que le système ne planifie pas le pod. PreferNoSchedule permet au système d’essayer de ne pas planifier le pod. NoExecute écarte les pods en cours d’exécution sur le nœud rejeté ou ne planifie pas du tout le pod.

Voici un exemple de charge de travail à laquelle une tolérance a été ajoutée pour les pools de nœuds spot.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  tolerations:
  - key: "kubernetes.azure.com/scalesetpriority"
    operator: "Equal"
    value: "spot"
    effect: "NoSchedule"

Contrôle des connaissances

1.

Supposons que vous disposez d’un service sans état traitant les commandes en ligne et s’exécutant sur un cluster Azure Kubernetes Service (AKS). Vous décidez d’utiliser des pools de nœuds spot sur le cluster AKS afin d’optimiser les coûts de calcul de celui-ci. Comment ajoutez-vous des pools de nœuds spot à un cluster AKS ?

2.

En ce qui concerne le service décrit dans la question précédente, quelle stratégie d’éviction correspond à l’option la plus rentable pour configurer le pool de nœuds spot ?

3.

En ce qui concerne le service décrit dans les questions précédentes, comment s’assurer que des charges de travail sont planifiées sur les nœuds du pool de nœuds utilisateur spot ?