Mise à l'échelle dynamique : Adapter l'infrastructure aux charges de travail variables

Mise à l'échelle dynamique : Adapter l'infrastructure aux charges de travail variables

Pour les projets de charge moyenne à élevée, Kubernetes est considéré comme la norme industrielle pour l'orchestration des applications conteneurisées. Les organisations s'en servent car il automatise les déploiements, la mise à l'échelle et la récupération, réduisant ainsi l'intervention manuelle et les frais généraux opérationnels, ce qui en fait une solution efficace pour des charges de travail exigeantes.

Cependant, Kubernetes lui-même ne gère pas l'approvisionnement en infrastructure ni la gestion des nœuds — ces aspects nécessitent des outils supplémentaires.

AWS propose plusieurs solutions, notamment AWS Cluster Autoscaler, qui fournit un plan de contrôle géré, et Karpenter, un auto-scalant dynamique open-source. Bien que les deux aident à gérer l'infrastructure Kubernetes, ils remplissent des rôles différents.

Dans cet article, nous comparerons leurs approches, leurs points forts et leurs compromis pour déterminer lequel est le mieux adapté à des cas d'utilisation spécifiques.

Qu'est-ce que le scaling ?

Imaginez que vous utilisez Opigno LMS pour supporter plus de 10 000 utilisateurs. À 14 heures, vous avez 1 000 utilisateurs en ligne ; à 17 heures, ce nombre monte à 1 500 ; et à 3 heures du matin, il chute à 400. Votre système doit s'adapter en conséquence, en augmentant les ressources lorsque la demande atteint un pic et en réduisant la capacité excédentaire pendant les heures creuses pour minimiser les coûts.

Dans Kubernetes, la mise à l'échelle de l'infrastructure consiste à ajuster le nombre de pods, de nœuds et de clusters en fonction des besoins en ressources. Chacun de ces composants joue un rôle crucial dans la gestion des charges de travail de l'application :

  • Pods : Les plus petites unités déployables dans Kubernetes, chaque pod contenant un ou plusieurs conteneurs qui partagent le réseau et le stockage.
  • Nœuds : Les machines de travail (physiques ou virtuelles) qui exécutent les pods. Chaque nœud dispose de ressources CPU et mémoire limitées.
  • Clusters : Un ensemble de nœuds gérés ensemble, permettant à Kubernetes de distribuer les charges de travail de manière efficace.

Autoscaling methods in Kubernetes
Source

La mise à l'échelle peut être abordée au niveau des pods et des nœuds, en fonction du goulot d'étranglement :

Horizontal Pod Autoscaler (HPA) ajuste automatiquement le nombre de pods en cours d'exécution en fonction de l'utilisation du CPU, de la mémoire ou de métriques personnalisées comme le nombre de requêtes. Lorsque la charge augmente, HPA crée plus de réplicas d'un pod pour gérer le trafic. Lorsque la demande diminue, les pods excédentaires sont supprimés pour économiser des ressources.

Vertical Pod Autoscaler (VPA) ajuste les allocations CPU et mémoire des pods existants. Au lieu d'ajouter plus de pods, Kubernetes augmente les ressources disponibles pour chaque pod.

La mise à l'échelle des nœuds permet d'ajouter de nouveaux nœuds avec suffisamment de CPU et de mémoire lorsque les nœuds actuels ne disposent pas des ressources nécessaires pour exécuter davantage de pods. Il existe deux outils principaux pour la mise à l'échelle des nœuds : Cluster Autoscaler et Karpenter. Ces deux outils permettent à Kubernetes de mettre à l'échelle non seulement les pods, mais également l'ensemble de l'infrastructure, garantissant ainsi que les applications restent performantes tout en contrôlant les coûts.

AWS Cluster Autoscaler

L'AWS Cluster Autoscaler est un composant natif de Kubernetes qui ajuste automatiquement le nombre de nœuds dans un cluster en fonction des exigences en ressources des pods en cours d'exécution. Il aide à maintenir une performance optimale en veillant à ce que le cluster dispose de suffisamment de capacité pour répondre aux besoins de tous les pods sans surprovisionner les ressources.

Le Cluster Autoscaler s'intègre directement avec les groupes de mise à l'échelle automatique (ASG) ou les groupes de nœuds gérés dans Amazon Elastic Kubernetes Service (EKS). Ainsi, Kubernetes peut mettre à l'échelle dynamiquement l'infrastructure sous-jacente en réponse aux changements de la charge de travail.

Cluster Autoscaler schema
Source

Lorsqu'un nouveau pod est créé, Kubernetes vérifie s'il existe un nœud capable de l'héberger en fonction de plusieurs critères, notamment la CPU et la mémoire nécessaires pour l'exécuter, les restrictions du nœud, etc. Si un pod répond aux exigences et peut être attribué à un nœud, il est "planifié".

Lorsqu'un pod ne peut pas être planifié, le Cluster Autoscaler détecte ces pods non planifiables et déclenche la mise à l'échelle du cluster en ajoutant ou en supprimant des nœuds des groupes de mise à l'échelle automatique (ASG) ou des groupes de nœuds gérés dans EKS.

Comme la mise à l'échelle reste limitée aux groupes de nœuds prédéfinis, le Cluster Autoscaler offre une méthode simple et efficace pour gérer la mise à l'échelle des nœuds. Cependant, il ne peut pas évaluer les types d'instances les plus rentables ni optimiser dynamiquement les types d'instances en fonction de la charge de travail en temps réel ou de critères personnalisés comme la CPU, la mémoire ou d'autres exigences.

Karpenter

Karpenter est une solution de mise à l'échelle flexible conçue par Amazon pour améliorer la manière dont les clusters Kubernetes dimensionnent leurs nœuds. Contrairement au Cluster Autoscaler, Karpenter interagit directement avec l'API du fournisseur de cloud (par exemple, AWS EC2) pour provisionner et optimiser les nœuds en temps réel en fonction des demandes actuelles de la charge de travail, en faisant une alternative plus dynamique et rentable.

Karpenter schema
Source

Avec Karpenter, vous n'avez pas besoin de spécifier le nombre exact de nœuds.

Lorsque des pods non programmables sont détectés en raison de contraintes de ressources, Karpenter provisionne de nouveaux nœuds avec le type d'instance le plus adapté et le plus rentable en fonction des besoins en ressources en temps réel. De plus, Karpenter réduit les délais dans la gestion des pics de trafic, car il provisionne les nœuds en quelques secondes plutôt qu'en minutes.

Lorsque la demande diminue, Karpenter optimise le placement des pods via la consolidation — en réaffectant les pods à moins de nœuds — et termine automatiquement les nœuds inutilisés. Minimiser le nombre de nœuds actifs aide à distribuer les pods de manière plus efficace et élimine les frais inutiles liés au cloud.

Tout cela permet une plus grande flexibilité et une allocation des ressources plus efficace par rapport au Cluster Autoscaler, et rend Karpenter particulièrement adapté aux applications avec des charges imprévisibles ou très variables, telles que les plateformes d'apprentissage en ligne, les services de streaming média ou les applications SaaS connaissant un trafic utilisateur fluctuant.

L'optimisation de l'infrastructure cloud nécessite une expertise continue

Le dimensionnement des clusters Kubernetes peut sembler simple, mais l'infrastructure cloud regorge d'embûches, allant de l'allocation inefficace des ressources aux coûts imprévus et aux goulots d'étranglement de performance. Tous ces défis ne peuvent pas être résolus uniquement avec Cluster Autoscaler et Karpenter.

Maintenir une configuration optimisée et rentable nécessite une surveillance continue, une analyse et un ajustement pour suivre l'évolution des charges de travail, les fluctuations des prix et les capacités croissantes des fournisseurs de cloud. Nos experts peuvent concevoir, mettre en œuvre et optimiser en continu votre stratégie de dimensionnement Kubernetes pour garantir un environnement cloud résilient, efficace et rentable. Construisons ensemble une infrastructure plus intelligente — contactez-nous dès aujourd'hui !