View a markdown version of this page

Optimisation des coûts en mode automatique EKS - Amazon EKS

Aidez à améliorer cette page

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Pour contribuer à ce guide de l'utilisateur, cliquez sur le GitHub lien Modifier cette page sur qui se trouve dans le volet droit de chaque page.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Optimisation des coûts en mode automatique EKS

Le mode automatique d'EKS optimise en permanence les coûts de calcul de votre cluster grâce à la consolidation, au regroupement et au dimensionnement correct. Toutefois, certaines configurations de charge de travail peuvent empêcher ces optimisations. Cette rubrique explique comment fonctionne l'optimisation des coûts, ce qui peut la bloquer et comment configurer votre cluster pour maintenir la rentabilité.

Comment le mode automatique d'EKS optimise les coûts

Le mode automatique EKS réduit les coûts de calcul grâce aux mécanismes suivants :

  • Bin-packing— Lors de la planification des pods sur les nœuds, le mode automatique d'EKS sélectionne les types d'instances qui correspondent étroitement aux demandes de ressources agrégées, minimisant ainsi la capacité inutilisée.

  • Consolidation — Le mode automatique d'EKS évalue régulièrement les nœuds en cours d'exécution et les remplace ou les supprime lorsque les charges de travail peuvent être exécutées sur des instances moins nombreuses ou moins coûteuses.

  • Right-sizing— À mesure que les charges de travail diminuent, le mode automatique d'EKS consolide les pods sur des nœuds plus petits et met fin aux instances sous-utilisées.

Ces optimisations s'exécutent en continu sans intervention manuelle. Cependant, certaines annotations et NodePool configurations des pods peuvent empêcher la consolidation de prendre effet.

Built-in pools de nœuds et garde-fous en matière de coûts

Les pools intégrés general-purpose et de system nœuds appliquent déjà plusieurs paramètres par défaut de protection des coûts :

  • Familles d'instances limitées à C, M et R : aucun type d'instance accéléré (P, G, Inf, Trn) ou exotique n'est autorisé.

  • On-demand capacité uniquement : aucune instance ponctuelle, ce qui permet d'éviter les pertes dues aux interruptions, mais également de ne pas réaliser d'économies ponctuelles.

  • Génération 5 ou ultérieure : les générations d'instances plus anciennes et moins rentables sont exclues.

Si vous utilisez uniquement les pools de nœuds intégrés, vous bénéficiez déjà de ces garde-fous. Les conseils de cette rubrique sur l'exclusion des familles d'instances et la limitation de la taille des instances sont particulièrement pertinents lorsque vous créez des éléments personnalisés NodePools, qui n'héritent pas de ces restrictions.

Toutefois, même avec les pools de nœuds intégrés, les sections suivantes s'appliquent toujours à vous :

  • Quels sont les obstacles à la consolidation— Les do-not-disrupt annotations et les PDB restrictifs bloquent la consolidation quel que soit le NodePool nœud provisionné.

  • Utiliser NodePool les limites comme plafond de coûts— Aucune ressource n'est limits configurée pour les pools de nœuds intégrés. Si vos charges de travail peuvent évoluer de manière significative, envisagez de créer une solution personnalisée NodePool avec des limites plutôt que de vous fier aux pools intégrés illimités.

  • Cycle de vie et coût des nœuds— Le chevauchement des remplacements de nœuds s'applique à tous les nœuds, y compris ceux fournis par des pools intégrés.

Rambarde Built-in pools de nœuds Personnalisé NodePools

Exclusion d'instance accélérée

Appliqué

Vous devez configurer

Limites de taille d'instance

Non défini

Vous devez configurer

Ressource limits (CPU/memory plafond)

Non défini

Vous devez configurer

On-demand uniquement

Appliqué

À vous de choisir (Spot/On-Demand)

Protection contre la consolidation (do-not-disrupt/PDB)

Votre responsabilité

Votre responsabilité

Quels sont les obstacles à la consolidation

La consolidation est bloquée lorsque le mode automatique d'EKS détermine que la perturbation d'un nœud violerait les exigences de disponibilité d'une charge de travail. Les configurations suivantes empêchent la consolidation :

L'annotation « ne pas perturber »

L'karpenter.sh/do-not-disruptannotation indique au mode automatique EKS de conserver un nœud tant que le module annoté est exécuté dessus. Cela empêche le nœud d'être consolidé, remplacé ou résilié, même s'il est sous-utilisé.

metadata: annotations: karpenter.sh/do-not-disrupt: "true"
Important

Incidence financière : lorsqu'un pod contient l'do-not-disruptannotation, le nœud sur lequel il s'exécute n'est pas soumis à la consolidation. Autrement dit :

  • Le nœud continue de fonctionner à sa taille d'instance actuelle, quelle que soit son utilisation réelle.

  • L'utilisation du vCPU et de la mémoire sur ce nœud peut rester élevée même si la charge de travail diminue.

  • Si plusieurs pods répartis sur de nombreux nœuds comportent cette annotation, la consolidation à l'échelle du cluster est considérablement réduite, ce qui entraîne une hausse durable des coûts.

L'do-not-disruptannotation est un mécanisme de disponibilité. Il ne tient pas compte des coûts. Utilisez-le uniquement pour les charges de travail où une interruption en cours d'exécution entraîne une perte de données ou des retouches importantes, par exemple pour les tâches par lots de longue durée ou les processus dynamiques sans point de contrôle.

Solutions de rechange à envisager :

  • Budgets de perturbation des modules (PDB) : utilisez les PDB pour contrôler le taux d'interruption plutôt que de le bloquer complètement. Les PDB permettent de poursuivre la consolidation tout en garantissant la disponibilité d'un nombre minimum de répliques.

  • Shorter-lived charges de travail — Pour les CI/CD exécutants et les agents de construction, autorisez les interruptions et comptez sur la logique de relance intégrée de votre système CI plutôt que de l'utiliser. do-not-disrupt

  • Time-limited annotations : s'appliquent do-not-disrupt uniquement pendant la durée d'une opération critique, puis supprimez-la par programme une fois l'opération terminée.

Budgets relatifs aux perturbations des pods (PDB)

Les PDB dont le nombre de répliques est défini maxUnavailable: 0 ou minAvailable égal au nombre actuel de répliques bloquent efficacement toute consolidation pour les pods concernés. Passez en revue vos PDB pour vous assurer qu'ils permettent d'interrompre au moins un module à la fois.

Utiliser NodePool les limites comme plafond de coûts

NodePool limitsfixer un plafond strict pour le total des ressources de calcul qu'un NodePool fournisseur peut fournir. Lorsque la limite est atteinte, le mode automatique EKS arrête de lancer de nouveaux nœuds pour cela NodePool. Cela se produit même si les pods sont en attente.

À utiliser limits comme mesure de réduction des coûts, en particulier pour les NodePools charges de travail hors production, de test ou surchargées pour lesquelles une mise à l'échelle illimitée n'est pas appropriée.

apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: ci-runners spec: template: spec: nodeClassRef: group: eks.amazonaws.com kind: NodeClass name: default requirements: - key: "eks.amazonaws.com/instance-category" operator: In values: ["c", "m"] limits: cpu: "500" memory: 1000Gi

Dans cet exemple, il ci-runners NodePool ne peut pas dépasser 500 vCPU ou 1 000 GiB de mémoire au total sur tous les nœuds qu'il provisionne. Les pods qui dépassent cette limite restent en Pending état jusqu'à ce que leur capacité soit libérée.

Astuce

Définissez limits en fonction de la taille de rafale maximale attendue, plus une mémoire tampon pour le remplacement des nœuds. Passez régulièrement en revue votre NodePool utilisation et ajustez les limites en fonction de l'évolution des modèles de charge de travail.

Exclure les familles d'instances pour contrôler les coûts

Par défaut, le mode automatique d'EKS sélectionne parmi un large éventail de types d'instances afin d'optimiser la flexibilité de planification. Pour les charges de travail qui ne nécessitent pas de matériel spécialisé, limitez les familles d'instances afin d'éviter le lancement de types d'instances coûteux.

Exclure les instances accélérées

Si vos charges de travail ne demandent pas de ressources de GPU ou d'accélérateur, excluez les familles d'instances accélérées de votre NodePool. Cela permet d'éviter les scénarios dans lesquels des instances accélérées sont sélectionnées en cas de contraintes de capacité.

spec: template: spec: requirements: - key: "eks.amazonaws.com/instance-category" operator: In values: ["c", "m", "r"]

En spécifiant uniquement des catégories optimisées pour le calcul, pour usage général et pour la mémoire, vous excluez de la sélection les familles d'instances accélérées (P, G, Inf, Trn) et les autres familles d'instances spécialisées.

Comment la sélection d'instances interagit avec les contraintes de capacité

Le mode automatique d'EKS ne donne plus la priorité aux types d'instances accélérés et exotiques lors de la sélection normale des instances. Toutefois, en cas d'échec prolongé du lancement, le mode automatique d'EKS se lance à partir de n'importe quel type d'instance encore disponible afin de prioriser la disponibilité de la charge de travail. Cela se produit par exemple lorsque les quotas de service EC2 sont temporairement épuisés pour tous les types d'instances préférés.

Pour éviter ce comportement de repli, limitez explicitement vos NodePool exigences aux seules catégories d'instances dont votre charge de travail a besoin. Lorsque les types préférés ne sont pas disponibles et qu'aucun autre type n'est autorisé par votre NodePool configuration, les pods restent en Pending état au lieu d'être programmés sur des instances coûteuses.

Limiter la taille des instances

Outre la restriction des familles d'instances, vous pouvez limiter la taille maximale des instances au sein de votre NodePool. La limitation de la taille des instances limite l'exposition aux coûts liés à tout nœud qui ne peut pas être consolidé. Par exemple, un nœud bloqué par une do-not-disrupt annotation ne peut pas être réduit même si sa charge de travail est faible.

Utilisez l'eks.amazonaws.com/instance-cpuétiquette pour limiter la taille maximale des instances selon vos NodePool besoins :

requirements: - key: "eks.amazonaws.com/instance-cpu" operator: Lte values: ["32"]

Cette configuration empêche le mode automatique d'EKS de lancer des instances de plus de 32 vCPU dans ce mode. NodePool

Pour identifier les opportunités d'optimisation dans un cluster existant, passez en revue vos plus grandes instances en cours d'exécution. Si la consolidation des nœuds de grande taille est systématiquement bloquée, le coût par nœud de cette capacité inutilisée est proportionnellement plus élevé.

CI/CD les pipelines, les tâches par lots et les circuits de distribution éphémères créent des cycles d'inactivité qui nécessitent une configuration spécifique pour maintenir la rentabilité.

Configuration Recommendation

do-not-disrupt

Ne pas utiliser pour les CI/CD coureurs. Fiez-vous plutôt aux mécanismes de réessai et de mise en file d'attente de votre système CI.

NodePool limits

Définissez un CPU/memory plafond en fonction de votre simultanéité maximale attendue, plus une marge de manœuvre pour le chevauchement des remplacements de nœuds.

Catégories d'instances

Limiter à c et m aux familles. Excluez les familles d'instances accélérées (P, G, Inf, Trn) pour les charges de travail autres que le GPU.

Tailles d'instance

Envisagez de limiter les tailles à des tailles modérées (par exemple, 4 à 32 vCPU) afin de limiter les coûts liés à tout nœud dont la consolidation est bloquée.

Calendrier de consolidation

Utilisez le consolidateAfter paramètre par défaut. Évitez de fixer de longs délais qui permettent de maintenir la capacité des rafales en ligne une fois que les coureurs ont terminé.

Capacity type (Type de capacité)

Utilisez des instances Spot pour les coureurs tolérants aux pannes. À combiner avec On-Demand les agents de construction qui conservent leur état pendant l'exécution.

Exemple : CI Runner NodePool

apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: ci-runners spec: template: spec: nodeClassRef: group: eks.amazonaws.com kind: NodeClass name: default requirements: - key: "eks.amazonaws.com/instance-category" operator: In values: ["c", "m"] - key: "eks.amazonaws.com/instance-cpu" operator: Lte values: ["32"] - key: "karpenter.sh/capacity-type" operator: In values: ["spot", "on-demand"] limits: cpu: "500" memory: 1000Gi disruption: consolidationPolicy: WhenEmptyOrUnderutilized consolidateAfter: 30s

Cette configuration :

  • Limité aux familles d'instances économiques

  • Limite la NodePool capacité totale à 500 vCPU

  • Permet une consolidation agressive (30 secondes après le retrait des cosses)

  • Permet à la fois le spot et On-Demand la capacité

Cycle de vie et coût des nœuds

Le mode automatique EKS remplace les nœuds par interruption progressive lorsqu'ils s'écartent de leurs spécifications souhaitées (par exemple, après la publication d'une nouvelle AMI en mode automatique) ou lorsque la durée de vie du nœud approche de l'expiration. Lors d'un remplacement gracieux :

  • Un nouveau nœud de remplacement est lancé et est prêt.

  • Les pods sont vidangés de l'ancien nœud, dans le respect des budgets d'interruption des pods.

  • Pendant une brève période, l'ancien nœud et le nœud de remplacement fonctionnent simultanément.

Pour les clusters comportant de grands ou de nombreux nœuds, ce chevauchement peut entraîner des augmentations de coûts périodiques. Pour minimiser l'impact :

  • Passez en revue les budgets d'interruption : assurez-vous que vos budgets d'interruption permettent une vidange rapide. Les budgets restrictifs prolongent la période de chevauchement pendant laquelle les anciens et les nouveaux nœuds fonctionnent.

  • Right-size instances — Les instances plus petites réduisent le coût absolu de la fenêtre de chevauchement.

  • Réduction de la durée de vie maximale des nœuds : des valeurs d'expiration plus courtes (par exemple, 7 jours) entraînent des événements de remplacement plus fréquents mais moins importants. Cela permet de répartir le coût de manière plus uniforme dans le temps plutôt que de le concentrer.

Pour plus d'informations sur le cycle de vie des nœuds, consultez En savoir plus sur les instances gérées en mode automatique Amazon EKS.