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-disruptannotations 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
limitsconfiguré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 |
Non défini |
Vous devez configurer |
|
On-demand uniquement |
Appliqué |
À vous de choisir (Spot/On-Demand) |
|
Protection contre la consolidation ( |
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-disruptuniquement 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é.
Modèles recommandés pour les charges de travail excessives
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é.
Valeurs par défaut recommandées pour les charges de travail surchargées
| Configuration | Recommendation |
|---|---|
|
|
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 |
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 à |
|
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 |
|
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.