Quelles sont les bonnes pratiques pour l'utilisation des instances Spot EC2 avec Amazon EKS ?

Date de la dernière mise à jour : 16/12/2022

Je souhaite utiliser des instances Spot d'Amazon Elastic Compute Cloud (Amazon EC2) avec mon Amazon Elastic Kubernetes Service (Amazon EKS). Quelles sont les bonnes pratiques ?

Brève description

Les indications suivantes constituent des bonnes pratiques pour l'utilisation des instances Spot Amazon EC2 avec Amazon EKS :

  • N'utilisez pas les instances Spot pour les tâches de longue durée ou les applications avec état.
  • Utilisez des groupes de nœuds gérés avec des instances Spot.
  • Ajoutez plusieurs types d'instance aux groupes de nœuds.
  • Utilisez AWS Node Termination Handler (NTH) pour les groupes de nœuds autogérés.

Solution

N'utilisez pas les instances Spot pour les tâches de longue durée ou les applications avec état.

La courte durée de vie d'une instance Spot peut entraîner des arrêts indésirables des tâches de longue durée. Cela peut également affecter les applications avec état car ces dernières ne peuvent pas tolérer les arrêts. Privilégiez plutôt les instances à la demande pour les tâches de longue durée.

Utiliser des groupes de nœuds gérés avec des instances Spot

Vous pouvez définir le type de capacité d'un groupe de nœuds gérés en tant qu'instance Spot. Le groupe de nœuds gérés configure ensuite un groupe Auto Scaling pour utiliser la fonction de rééquilibrage de capacité EC2 Auto Scaling. Lorsque le rééquilibrage de capacité EC2 Auto Scaling est activé et qu'un nœud Spot reçoit une recommandation de rééquilibrage, Amazon EKS tente de remplacer le nœud Spot.

Une fois que le nouveau nœud Spot est prêt, Amazon EKS sépare et vide le nœud Spot précédent. Cette opération peut contribuer à réduire le risque de corruption des volumes Amazon Elastic Block Store (Amazon EBS) ou d'interruption des connexions à la base de données.

Ajouter plusieurs types d'instance à des groupes de nœuds

Chaque groupe d'instances Spot se compose d'une capacité d'instance EC2 inutilisée pour un type d'instance spécifique dans une zone de disponibilité donnée. Lorsqu'un groupe de nœuds tente de mettre en service un nouveau nœud, le groupe de nœuds utilise l'un des types d'instance définis dans sa configuration. Si le type d'instance ne dispose pas d'une capacité Spot dans aucune zone de disponibilité, le groupe de nœuds ne parvient pas à se mettre à l'échelle et se dégrade.

Pour éviter ce problème, augmentez le nombre de types d'instances similaires dans le groupe de nœuds.

Par exemple, vous disposez d'une instance de type m5.large (2 vCPU/8 Go de RAM). Ajoutez des instances ayant les mêmes valeurs de vCPU et de RAM, telles que m5a.large, m5n.large et m4.large.

Utiliser AWS NTH pour les groupes de nœuds autogérés

L'AWS Node Termination Handler (NTH) du site GitHub est déployé sur un cluster Amazon EKS en tant que déploiement ou DaemonSet. Le NTH ajoute aux groupes de nœuds autogérés des capacités qui leur font défaut. Le gestionnaire détecte les événements de maintenance Amazon EC2, les avis d'interruption Spot, les événements de mise à l'échelle du groupe Auto Scaling et les rééquilibrages de la zone de disponibilité et y répond de manière appropriée. Utilisez l'option Queue Processor (Processeur de file d'attente) pour ajouter toutes les fonctions NTH au groupe de nœuds autogéré.

Utiliser Karpenter pour gérer les instances Spot

Karpenter est un autoscaler de cluster open source qui met en service automatiquement de nouveaux nœuds pour répondre à des pods impossibles à panifier. Karpenter dispose également de fonctions permettant la mise à l'échelle horizontale des nœuds et leur consolidation afin de réduire les déchets et les coûts. Il utilise la stratégie d'allocation priorisée optimisée en termes de capacité pour mettre en service les instances EC2.

Karpenter utilise tous les types d'instances EC2 disponibles dans les régions AWS et les zones de disponibilité d'un cluster Amazon EKS pour optimiser les instances Spot. Vous pouvez utiliser Karpenter avec l'outil EC2 Instance Selector pour générer une liste de types d'instances répondant à des exigences de calcul spécifiques. L'utilisation d'un ensemble diversifié de types d'instances vous permet de réduire le risque d'erreurs de capacité insuffisante. Il est également recommandé de répartir les instances entre différentes zones de disponibilité afin d'utiliser des groupes Spot différents.

Pour plus d'informations sur les bonnes pratiques et les limites de Karpenter, consultez les Bonnes pratiques de Karpenter sur GitHub.

Important : Karpenter n'est pas actuellement en mesure de gérer l'alerte de deux minutes de l'avis de résiliation de l'interruption Spot (ITN). Pour remédier à ce problème, vous pouvez installer le NTH de manière à boucler et drainer gracieusement les nœuds ponctuels lorsqu'ils sont interrompus.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?