Le Blog Amazon Web Services

Comment Voodoo a réduit de 40% ses coûts Amazon EC2 avec Karpenter sur Amazon EKS

Amazon Web Services (AWS) présente Karpenter, un nouvel outil de mise à l’échelle des nœuds Kubernetes pour améliorer l’évolutivité et l’optimisation des coûts des clusters AWS Elastic Kubernetes Service (EKS).

Ce blog explore comment les clients, tels que Voodoo, utilisent Karpenter pour adapter dynamiquement leurs ressources cloud en fonction des fluctuations de charge de travail, tout en optimisant les coûts. Les principales fonctionnalités de Karpenter incluent le provisionnement automatique des nœuds, l’utilisation des instances AWS Graviton pour de meilleures performances et économies, et la gestion des interruptions des instances Amazon EC2 Spot. Karpenter facilite également la mise à jour et la maintenance des clusters EKS.

Fonctionnalités clés de Karpenter

Mise à l’échelle automatique des nœuds

Historiquement, pour gérer la mise à l’échelle automatique des clusters Kubernetes, nous utilisions le Kubernetes cluster-autoscaler avec un ou plusieurs groupes de mise à l’échelle automatique AWS Auto Scaling Groups. C’était un processus asynchrone et souvent lent, pouvant mener à des timeouts avant de pouvoir tester un nouveau groupe de mise à l’échelle.

Karpenter permet de remplacer à la fois le cluster-autoscaler et les différents groupes de mise à l’échelle associés à votre cluster. Karpenter interagit directement avec l’API EC2 Fleet de manière synchrone pour provisionner les instances Amazon EC2. Cette différence fondamentale de fonctionnement rend Karpenter plus rapide, plus flexible et avec une intégration native à Kubernetes grâce aux CRD (Custom Resource Definitions) et aux concepts de NodePool et d’EC2NodeClass, ce qui permet de définir les noeuds depuis Kubernetes au lieu de repasser par la case infrastructure as code pour mettre à jour le cluster avec un nouveau groupe de noeuds.

Optimisation des coûts

Utilisation des instances Graviton

Pour optimiser les coûts, les performances et réduire la consommation d’énergie, les instances Graviton basées sur l’architecture ARM peuvent être une très bonne alternative. Les clients observent généralement un gain de performances entre 30 et 40% avec une réduction des coûts allant jusqu’à 20% et une consommation d’énergie diminuée de 60%.

Il est nécessaire de recompiler les applications pour s’adapter à cette nouvelle architecture. Il est recommandé de modifier les pipelines de création d’images de conteneurs pour générer automatiquement les deux versions, x86 et Graviton.

Gestion des instances Spot

Les instances Spot permettent d’utiliser la capacité excédentaire d’AWS avec une réduction de coût pouvant aller jusqu’à 90% par rapport à la version on-demand. Bien que ces instances puissent être reprises par AWS à tout moment, Karpenter est capable de gérer ces interruptions de manière transparente.

Lorsqu’une instance Spot est sur le point d’être reprise, Karpenter déplacera les pods qui y sont hébergés vers une nouvelle instance existante ou provisionnée automatiquement. Vous n’avez donc pas besoin de mettre en place de surveillance ou d’outils de gestion des interruptions Spot, Karpenter s’en charge pour vous.

Gestion des mises à jour et correctifs

Karpenter peut également vous aider à maintenir vos clusters à jour. Lorsque vous mettez à jour le plan de contrôle EKS, Karpenter détectera le drift entre les versions des nœuds de travail et la nouvelle version du contrôle plan. Il procédera alors à une mise à niveau progressive des nœuds worker afin de les mettre à jour avec la dernière version d’AMI (Amazon Machine Image) optimisée pour EKS, de manière sécurisée et sans intervention manuelle. Vous pouvez également définir les plages horaires pendant lesquels les mises à jours serons autorisées.

Cette fonctionnalité est activable également si vous utilisez vos propres AMIs. Il vous suffit de mettre à jour la définition du NodePool avec la nouvelle version d’AMI, et Karpenter se chargera de détecter le drift et d’appliquer la mise à jour.

Compatibilité avec les contraintes de placement des pods

Karpenter respecte l’ensemble des mécanismes de placement des pods de Kubernetes, tels que les sélecteurs de nœuds, l’affinité des nœuds, les tolérances aux taints et les contraintes de propagation de topologie. Lorsque Karpenter provisionne de nouveaux nœuds, il s’assure que ces contraintes soient bien respectées.

Retour d’expérience client avec Karpenter : Voodoo

Contexte : infrastructure AWS et EKS chez Voodoo

Voodoo est un éditeur de jeux et d’applications mobiles, 3e éditeur sur l’App Store avec plus de 200 jeux et 7 milliards de téléchargements. Ils emploient 730 collaborateurs et leurs plus grosses licences, Blog Jam et Mob Control, rapportent plus de 100 millions d’euros par an.

Chez Voodoo, l’infrastructure AWS et EKS se compose de 14 comptes et 37 clusters EKS gérés avec des groupes de nœuds managés et des instances on-demand. Leur infrastructure EKS représente 15% de leurs coûts AWS, avec 50% de ressources inutilisées et une hausse constante des coûts.

Problématiques rencontrées avant Karpenter

Avant l’adoption de Karpenter, Voodoo utilisait le cluster-autoscaler avec des groupes de mise à l’échelle automatique AWS Auto-Scaling Groups. Ce processus était asynchrone et souvent lent, pouvant mener à des timeouts avant de pouvoir tester un nouveau groupe de mise à l’échelle.

De plus, la gestion manuelle des mises à jour et des correctifs sur leurs clusters EKS était fastidieuse et sujette à des dérives entre le plan de contrôle et le plan de données.

Mise en place de Karpenter

Prérequis techniques

Avant de déployer Karpenter, Voodoo a dû mettre en place quelques prérequis techniques :

  • Créer une file d’attente Amazon SQS pour la gestion des interruptions Spot
  • Provisionner un rôle IAM pour permettre à Karpenter d’interagir avec l’API EC2
  • Bien taguer l’ensemble de leurs ressources, notamment les groupes de sécurité et les sous-réseaux

Ils ont également veillé à ce que leurs applications soient bien architecturées pour supporter les perturbations induites par Karpenter.

Intégration dans l’architecture EKS

Au sein de Voodoo, Karpenter a été intégré dans leur architecture EKS pour remplacer le cluster-autoscaler et les groupes de mise à l’échelle automatique. Ils ont migré leur déploiement de Terraform vers des charts Helm pour gérer la configuration de Karpenter.

Bénéfices observés

« Avec Karpenter, nous sommes passés à 100% en Spot sur nos environnements de staging et de production. Cela nous a facilité la gestion de nos clusters et nous a permis de constater un scaling beaucoup plus rapide de nos nœuds, entre 30 et 40 secondes. » – Martinho Morera, Senior Cloud Engineer chez Voodoo

Optimisation des coûts

Grâce à l’utilisation des instances Spot et Graviton gérées par Karpenter, Voodoo a observé une baisse de 40% de leurs coûts EC2 en seulement 4 mois.

Gestion simplifiée des clusters

La mise en place de Karpenter a permis à Voodoo de simplifier grandement la gestion de leurs clusters EKS. Ils n’ont plus besoin de gérer manuellement les mises à jour et les correctifs, Karpenter s’en chargeant de manière automatique et sécurisée.

Évolutivité améliorée

Avec Karpenter, Voodoo bénéficie d’une plus grande diversité d’instances EC2 disponibles, permettant une meilleure adéquation entre leurs workloads et les ressources provisionnées. Ils observent également un scale-up beaucoup plus rapide de leurs clusters, passant de plusieurs minutes à quelques dizaines de secondes.

Bonnes pratiques d’utilisation de Karpenter

Architecture des applications

Afin de bénéficier pleinement des fonctionnalités de Karpenter, il est important que vos applications soient bien architecturées. Cela inclut l’utilisation de sélecteurs de nœuds, de budgets de perturbation des pods (PodDisruptionBudget) et de contraintes de répartition topologique (TopologySpreadConstraints).

Ces mécanismes permettent de garantir la haute disponibilité de vos applications, en s’assurant qu’un nombre limité de pods puissent être indisponibles à un instant donné, même lorsque Karpenter effectue des opérations de mise à jour, de consolidation ou de réduction des coûts.

Gestion des perturbations

Budgets de disruption des nœuds

Karpenter respecte les budgets de disruption définis au niveau des nœuds. Vous pouvez ainsi limiter le pourcentage ou le nombre de nœuds pouvant être déprovisionés simultanément. Cela vous permet de contrôler l’impact des opérations de Karpenter sur vos applications.

Fenêtres de maintenance

Vous pouvez également définir des fenêtres de temps pendant lesquelles Karpenter ne sera pas autorisé à perturber vos nœuds, et également de différentier les perturbations pour cause de consolidation ou de drift. Cela peut être utile pour protéger vos applications pendant les heures ouvrables ou les périodes de forte activité.

Surveillance et monitoring

Karpenter fournit des informations détaillées sur ses actions via ses logs et ses metrics. Il est recommandé de les surveiller attentivement, notamment pour suivre les opérations de drift, de consolidation et de mise à jour, notamment au travers des dashboards fournis.

De plus, l’outil eks-node-viewer permet de visualiser en temps réel les instances EC2 créées par Karpenter, leur utilisation en termes de CPU et de mémoire, ainsi que les coûts associés. Cet outil est très utile pour comprendre le comportement de Karpenter et optimiser davantage vos coûts.

Conclusion

Karpenter est un outil puissant qui permet d’améliorer l’efficacité et l’optimisation des coûts de vos clusters EKS. Grâce à ses fonctionnalités avancées, vous pouvez désormais gérer de manière automatisée la mise à l’échelle, l’optimisation des coûts, les mises à jour et les correctifs de vos clusters.

L’intégration de Karpenter dans votre architecture EKS vous offre de nombreux bénéfices, comme l’a démontré le retour d’expérience de Voodoo. Vous pouvez ainsi réduire significativement vos coûts, simplifier la gestion de vos clusters et bénéficier d’une plus grande évolutivité.

Si vous souhaitez en apprendre davantage sur Karpenter et commencer à l’utiliser, nous vous recommandons les ressources suivantes :

  • Le projet Karpenter est open-source et disponible sur GitHub. Vous y trouverez la documentation, les guides de démarrage rapide et les exemples de configuration.
  • AWS propose régulièrement des workshops Karpenter pour vous guider pas à pas dans la mise en place de Karpenter et l’utilisation des instances Spot.
  • Pour un démarrage accéléré, vous pouvez utiliser l’EKS Blueprint qui inclut une configuration Terraform pré-définie pour déployer un cluster EKS avec Karpenter.

Découvrez la session AWS Summit Paris 2024 « Optimisez les coûts et la mise à l’échelle d’EKS avec Karpenter » décrivant l’utilisation de Karpenter par Voodoo