View a markdown version of this page

Kostenoptimierung im EKS Auto Mode - Amazon EKS

Unterstützung für die Verbesserung dieser Seite beitragen

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Um zu diesem Benutzerhandbuch beizutragen, wählen Sie den GitHub Link Diese Seite bearbeiten auf, der sich im rechten Bereich jeder Seite befindet.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Kostenoptimierung im EKS Auto Mode

Der automatische Modus von EKS optimiert kontinuierlich die Rechenkosten Ihres Clusters durch Konsolidierung, Bin-Packing und die richtige Dimensionierung. Bestimmte Workload-Konfigurationen können diese Optimierungen jedoch verhindern. In diesem Thema wird erklärt, wie die Kostenoptimierung funktioniert, was sie verhindern kann und wie Sie Ihren Cluster konfigurieren, um die Kosteneffizienz aufrechtzuerhalten.

Wie der automatische Modus von EKS die Kosten optimiert

Der EKS-Automatikmodus reduziert die Rechenkosten durch die folgenden Mechanismen:

  • Bin-packing— Bei der Planung von Pods auf Knoten wählt der automatische Modus von EKS Instance-Typen aus, die den aggregierten Ressourcenanforderungen sehr nahe kommen, wodurch ungenutzte Kapazität minimiert wird.

  • Konsolidierung — Der automatische Modus von EKS bewertet regelmäßig laufende Knoten und ersetzt oder entfernt sie, wenn Workloads auf weniger oder kostengünstigeren Instances ausgeführt werden können.

  • Right-sizing— Wenn die Workloads nach unten skalieren, konsolidiert der EKS Auto Mode Pods auf kleineren Knoten und beendet nicht ausgelastete Instances.

Diese Optimierungen werden kontinuierlich ohne manuelles Eingreifen ausgeführt. Bestimmte Pod-Anmerkungen und NodePool Konfigurationen können jedoch verhindern, dass die Konsolidierung wirksam wird.

Built-in Knotenpools und Kostenplanken

Die integrierten Pools general-purpose und die system Knotenpools setzen bereits mehrere kostenschützende Standardeinstellungen durch:

  • Auf C, M und R beschränkte Instance-Familien — Beschleunigte (P, G, Inf, Trn) oder exotische Instance-Typen sind nicht zulässig.

  • On-demand Nur Kapazität — Keine Spot-Instances, wodurch eine unterbrechungsbedingte Abwanderung vermieden wird, aber auch keine Spot-Einsparungen bedeutet.

  • Generation 5 oder neuer — Ältere, weniger kosteneffiziente Instance-Generationen sind ausgeschlossen.

Wenn Sie nur die integrierten Knotenpools verwenden, profitieren Sie bereits von diesen Leitplanken. Die Hinweise in diesem Thema zum Ausschluss von Instanzfamilien und zur Beschränkung der Instanzgrößen sind vor allem dann relevant, wenn Sie benutzerdefinierte Instanzen erstellen NodePools, die diese Einschränkungen nicht erben.

Die folgenden Abschnitte gelten jedoch auch bei integrierten Knotenpools weiterhin für Sie:

  • Was blockiert die Konsolidierung— Die do-not-disrupt Anmerkung und die restriktiven PDBs blockieren die Konsolidierung, unabhängig davon, welcher NodePool Knoten bereitgestellt wurde.

  • Verwenden Sie NodePool Limits als Kostenobergrenze— Für die integrierten Knotenpools sind keine Ressourcen limits konfiguriert. Wenn Ihre Workloads erheblich skaliert werden können, sollten Sie erwägen, ein benutzerdefiniertes System NodePool mit Grenzwerten zu erstellen, anstatt sich auf die unbegrenzten integrierten Pools zu verlassen.

  • Lebenszyklus und Kosten des Knotens— Die Überschneidung beim Austausch von Knoten gilt für alle Knoten, auch für Knoten, die von integrierten Pools bereitgestellt werden.

Leitplanke Built-in Knotenpools Benutzerdefiniert NodePools

Beschleunigter Ausschluss von Instanzen

Erzwungen

Sie müssen konfigurieren

Größenbeschränkungen für Instanzen

Nicht gesetzt

Sie müssen konfigurieren

Ressource limits (CPU/memory Obergrenze)

Nicht gesetzt

Sie müssen konfigurieren

On-demand nur

Erzwungen

Du wählst (Spot/On-Demand)

Konsolidierungsschutz (do-not-disrupt/PDB)

Ihre Verantwortung

Deine Verantwortung

Was blockiert die Konsolidierung

Die Konsolidierung wird blockiert, wenn der automatische Modus von EKS feststellt, dass die Unterbrechung eines Knotens die Verfügbarkeitsanforderungen eines Workloads verletzen würde. Die folgenden Konfigurationen verhindern eine Konsolidierung:

Die Anmerkung „Nicht stören

Die karpenter.sh/do-not-disrupt Anmerkung weist EKS Auto Mode an, einen Knoten beizubehalten, solange der kommentierte Pod darauf läuft. Dadurch wird verhindert, dass der Knoten konsolidiert, ersetzt oder beendet wird, selbst wenn der Knoten nicht ausgelastet ist.

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

Kostenauswirkung: Wenn ein Pod die do-not-disrupt Anmerkung enthält, ist der Knoten, auf dem er ausgeführt wird, von der Konsolidierung ausgenommen. Das bedeutet Folgendes:

  • Der Knoten wird unabhängig von der tatsächlichen Auslastung weiterhin mit seiner aktuellen Instance-Größe ausgeführt.

  • Die vCPU- und Speicherauslastung auf diesem Knoten kann erhöht bleiben, auch wenn die Auslastung der Arbeitslast sinkt.

  • Wenn mehrere Pods auf vielen Knoten diese Anmerkung enthalten, wird die clusterweite Konsolidierung erheblich reduziert, was zu nachhaltig höheren Kosten führt.

Die do-not-disrupt Anmerkung ist ein Verfügbarkeitsmechanismus. Die Kosten werden nicht berücksichtigt. Verwenden Sie es nur für Workloads, bei denen eine Unterbrechung während der Ausführung zu Datenverlust oder erheblichen Nacharbeiten führt, z. B. bei Batch-Jobs mit langer Laufzeit oder statusbehafteten Prozessen ohne Checkpointing.

Zu berücksichtigende Alternativen:

  • Pod Disruption Budgets (PDBs) — Verwenden Sie PDBs, um die Geschwindigkeit der Störungen zu kontrollieren, anstatt sie vollständig zu blockieren. PDBs ermöglichen die Fortsetzung der Konsolidierung und stellen gleichzeitig sicher, dass eine Mindestanzahl von Replikaten verfügbar bleibt.

  • Shorter-lived Workloads — Für CI/CD Runner und Build-Agents sollten Sie Unterbrechungen zulassen und sich auf die integrierte Wiederholungslogik Ihres CI-Systems verlassen, anstatt sie zu verwenden. do-not-disrupt

  • Time-limited Anmerkungen — Gilt do-not-disrupt nur für die Dauer eines kritischen Vorgangs und entfernt sie dann programmatisch, wenn der Vorgang abgeschlossen ist.

Budgets für Pod-Störungen (PDBs)

PDBs, bei denen die aktuelle Anzahl an Replikaten festgelegt ist maxUnavailable: 0 oder dieser minAvailable entspricht, blockieren effektiv die gesamte Konsolidierung für die betroffenen Pods. Überprüfen Sie Ihre PDBs, um sicherzustellen, dass mindestens ein Pod gleichzeitig unterbrochen werden kann.

Verwenden Sie NodePool Limits als Kostenobergrenze

NodePool limitslegen Sie eine feste Obergrenze für die gesamten Rechenressourcen fest, die ein NodePool Unternehmen bereitstellen kann. Wenn das Limit erreicht ist, beendet der automatische Modus von EKS den Start neuer Knoten dafür NodePool. Dies passiert auch dann, wenn Pods noch ausstehen.

Wird limits als Kostenbegrenzung verwendet, insbesondere für NodePools nicht produktive, Test- oder Burst-Workloads, bei denen eine unbegrenzte Skalierung nicht angemessen ist.

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

In diesem Beispiel ci-runners NodePool darf die Summe von 500 vCPUs oder 1000 GiB Arbeitsspeicher auf allen von ihr bereitgestellten Knoten nicht überschreiten. Pods, die diesen Grenzwert überschreiten, bleiben so lange im Pending Status, bis Kapazität freigegeben wird.

Tipp

Dieser Wert limits basiert auf Ihrer erwarteten maximalen Burst-Größe plus einem Puffer für den Knotenersatz. Überprüfen Sie Ihre NodePool Auslastung regelmäßig und passen Sie die Grenzwerte an, wenn sich die Arbeitslastmuster ändern.

Schließen Sie Instance-Familien aus Gründen der Kostenkontrolle aus

Standardmäßig wählt der automatische Modus von EKS aus einer Vielzahl von Instance-Typen aus, um die Flexibilität bei der Planung zu maximieren. Für Workloads, für die keine spezielle Hardware erforderlich ist, sollten Sie die Instance-Familien einschränken, um zu verhindern, dass teure Instance-Typen gestartet werden.

Schließen Sie beschleunigte Instanzen aus

Wenn Ihre Workloads keine GPU- oder Accelerator-Ressourcen anfordern, schließen Sie beschleunigte Instance-Familien von Ihren NodePool aus. Dadurch werden Szenarien vermieden, in denen beschleunigte Instances bei Kapazitätsengpässen ausgewählt werden.

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

Indem Sie nur rechenoptimierte, allgemeine und speicheroptimierte Kategorien angeben, schließen Sie beschleunigte (P, G, Inf, Trn) und andere spezialisierte Instance-Familien von der Auswahl aus.

Wie die Instance-Auswahl mit Kapazitätsbeschränkungen interagiert

Der automatische EKS-Modus depriorisiert beschleunigte und exotische Instance-Typen bei der normalen Instance-Auswahl. Wenn jedoch anhaltende Startfehler auftreten, wird der automatische Modus von EKS von jedem verbleibenden verfügbaren Instance-Typ aus gestartet, um der Workload-Verfügbarkeit Priorität einzuräumen. Dies ist beispielsweise der Fall, wenn die EC2-Servicekontingente für alle bevorzugten Instance-Typen vorübergehend ausgeschöpft sind.

Um dieses Fallback-Verhalten zu verhindern, beschränken Sie Ihre NodePool Anforderungen explizit auf die Instance-Kategorien, die Ihre Workload benötigt. Wenn bevorzugte Typen nicht verfügbar sind und Ihre NodePool Konfiguration keine anderen Typen zulässt, bleiben Pods im Pending Status, anstatt für teure Instances geplant zu werden.

Beschränken Sie die Instanzgrößen

Sie können nicht nur Instanzfamilien einschränken, sondern auch die maximale Instanzgröße innerhalb Ihrer. NodePool Durch die Beschränkung der Instanzgrößen wird das Kostenrisiko für einzelne Knoten begrenzt, die nicht konsolidiert werden können. Beispielsweise kann ein durch eine do-not-disrupt Anmerkung blockierter Knoten nicht schrumpfen, selbst wenn seine Arbeitslast gering ist.

Verwenden Sie das eks.amazonaws.com/instance-cpu Label, um die maximale Instanzgröße gemäß Ihren NodePool Anforderungen zu begrenzen:

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

Diese Konfiguration verhindert, dass EKS Auto Mode in diesem Fall Instances startet, die größer als 32 vCPUs sind. NodePool

Um Optimierungsmöglichkeiten in einem vorhandenen Cluster zu identifizieren, überprüfen Sie Ihre größten laufenden Instances. Wenn große Knoten ständig an der Konsolidierung gehindert werden, sind die Kosten pro Knoten für diese ungenutzte Kapazität proportional höher.

CI/CD Pipelines, Batch-Jobs und kurzlebige Runner erzeugen Burst-and-Idle-Muster, die eine spezielle Konfiguration erfordern, um die Kosteneffizienz aufrechtzuerhalten.

Konfiguration Empfehlung

do-not-disrupt

Nicht für Läufer verwenden. CI/CD Verlassen Sie sich stattdessen auf die Wiederholungs- und Warteschlangenmechanismen Ihres CI-Systems.

NodePool limits

Legen Sie eine CPU/memory Obergrenze fest, die auf der zu erwartenden maximalen Parallelität zuzüglich des Puffers für Überschneidungen beim Austausch von Knoten basiert.

Instanz-Kategorien

Beschränken Sie sich auf m Familien c und. Schließen Sie beschleunigte Instance-Familien (P, G, Inf, Trn) für Workloads ohne GPU aus.

Instance-Größen

Erwägen Sie eine Beschränkung auf moderate Größen (z. B. 4—32 vCPUs), um das Kostenrisiko durch einzelne Knoten zu begrenzen, deren Konsolidierung blockiert wird.

Zeitplan für die Konsolidierung

Verwenden Sie die consolidateAfter Standardeinstellung. Vermeiden Sie es, lange Verzögerungen festzulegen, damit die maximale Kapazität auch nach Abschluss der Läufe wieder verfügbar ist.

Capacity type (Kapazitätstyp)

Verwenden Sie Spot-Instances für fehlertolerante Läufer. Kombinieren Sie es mit On-Demand für Build-Agenten, deren Status während der Ausführung beibehalten wird.

Beispiel: 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

Diese Konfiguration:

  • Beschränkt auf kostengünstige Instance-Familien

  • Beschränkt die NodePool Gesamtkapazität auf 500 vCPUs

  • Ermöglicht eine aggressive Konsolidierung (30 Sekunden nach dem Entfernen der Pods)

  • Erlaubt sowohl Spot als auch On-Demand Kapazität

Lebenszyklus und Kosten des Knotens

Der EKS-Automatikmodus ersetzt Knoten automatisch, wenn sie von ihrer gewünschten Spezifikation abweichen (z. B. nach der Veröffentlichung eines neuen Auto-Modus-AMI) oder wenn sich die Lebensdauer des Knotens dem Ablauf nähert. Während des ordnungsgemäßen Austauschs:

  • Ein neuer Ersatzknoten wird gestartet und ist bereit.

  • Pods werden aus dem alten Knoten gelöscht, wobei die Budgets für Pod-Unterbrechungen eingehalten werden.

  • Für einen kurzen Zeitraum laufen sowohl der alte als auch der Ersatzknoten gleichzeitig.

Bei Clustern mit großen oder vielen Knoten kann diese Überlappung zu regelmäßigen Kostensteigerungen führen. Um die Auswirkungen zu minimieren:

  • Überprüfen Sie die Budgets für Unterbrechungen — Stellen Sie sicher, dass Ihre Budgets für Störungen eine zeitnahe Entlastung zulassen. Restriktive Budgets verlängern den Überschneidungszeitraum, in dem sowohl alte als auch neue Knoten betrieben werden.

  • Right-size Instanzen — Kleinere Instanzen reduzieren die absoluten Kosten des Überschneidungsfensters.

  • Reduzieren Sie die maximale Lebensdauer von Knoten — Kürzere Ablaufwerte (z. B. 7 Tage) führen zu häufigeren, aber kleineren Austauschereignissen. Dadurch werden die Kosten gleichmäßiger über die Zeit verteilt, anstatt sie zu konzentrieren.

Weitere Informationen zum Knotenlebenszyklus finden Sie unter Erfahren Sie mehr über Amazon EKS Auto Mode Managed Instances.