In diesem Dokument finden Sie Richtlinien und Empfehlungen zur Kostenoptimierung in der Google Kubernetes Engine (GKE). GKE bietet umfangreiche Autoscaling- und Planungsfunktionen, mit denen Sie die Clusterkosten minimieren und gleichzeitig die Anwendungsstabilität aufrechterhalten können.
Eine konsolidierte Übersicht aller GKE-Best Practices finden Sie unter Best Practices für GKE.Sie sollten mit den folgenden Themen vertraut sein:
Übersicht
Bei der Implementierung von GKE müssen Sie verschiedene technische Aspekte berücksichtigen, um die Anwendungs- und Geschäftsanforderungen zu erfüllen. Neben der Definition von Netzwerk, Sicherheit, Speicher und anderen technischen Aspekten müssen Sie sowohl die Kosten als auch die Leistung bewerten, um die geschäftlichen Anforderungen zu erfüllen. Anstatt Kosten und Leistung als separate Einheiten zu behandeln, müssen Sie sie von Anfang an in die Infrastrukturplanung einbeziehen, um eine einheitliche Beziehung zu definieren, die sowohl die Zuverlässigkeit als auch die Cloud-Ausgaben bestimmt. Niedrige Kosten und hohe Zuverlässigkeit werden erwartet, aber mit zunehmender Skalierung steigt die Komplexität der Verwaltung dieses Kompromisses.
Um niedrige Kosten und Anwendungsstabilität zu erreichen, können Sie die folgenden GKE-Funktionen festlegen oder optimieren:
- GKE-Konfiguration
- Arbeitslastkonfiguration
- Kostengrundlage und -transparenz
GKE Autopilot verwenden
Wählen Sie für kleine Sandbox- oder Entwicklungsumgebungen Autopilot-Cluster aus. In Autopilot verwaltet GKE Knoten dynamisch und Sie werden nur für die angeforderte Pod-Kapazität in Rechnung gestellt. So vermeiden Sie Gebühren für VMs, Knotenbetriebssysteme und System-Overhead.
Weitere Informationen finden Sie unter GKE Autopilot – Übersicht.
Funktionsweise von Autoscaling
GKE-Autoscaling-Controller passen Ressourcen dynamisch an Änderungen bei Trafficanfragen an.
Pods anhand von Auslastungsmesswerten hinzufügen und entfernen
Ein HorizontalPodAutoscaler (HPA) fügt Pods basierend auf CPU- oder benutzerdefinierten Messwerten hinzu und entfernt sie.
Informationen zum horizontalen Pod-Autoscaling und dessen Konfiguration finden Sie in der folgenden GKE-Dokumentation:
- Konzepte für horizontales Pod-Autoscaling
- Horizontales Pod-Autoscaling konfigurieren
- Ereignisse des horizontalen Pod-Autoscalers ansehen
- Benutzerdefinierte Anwendungsmesswerte für Autoscaling verfügbar machen
Konfigurieren Sie einen Zielauslastungsschwellenwert (z. B. 70% oder 80%), um einen Puffer zu erhalten, der Trafficspitzen abfängt, während zusätzliche Replikat-Pods gestartet werden.
Pods anhand von Auslastungsmesswerten skalieren
Verwenden Sie VerticalPodAutoscaler (VPA), um die CPU- und Arbeitsspeicheranfragen für Container für Arbeitslasten, die kein horizontales Pod-Autoscaling verwenden, oder wenn Spitzenarbeitslasten unbekannt sind, dynamisch anzupassen.
Informationen zum vertikalen Pod-Autoscaling und dessen Konfiguration finden Sie in der folgenden GKE-Dokumentation:
Lassen Sie VPA in produktionsähnlichen Umgebungen mindestens 24 Stunden lang (idealerweise eine Woche) im Modus Off (nur Empfehlung) laufen, um repräsentative Trafficmuster zu erfassen. Geben Sie explizite Mindest- und Höchstwerte in Ihrem VerticalPodAutoscaler-Objekt an, bevor Sie die Modi Initial oder Auto aktivieren, um unregelmäßige Anpassungen der Größe zu vermeiden.
Infrastrukturskalierung mit Cluster Autoscaler automatisieren
Wenn Sie die zugrunde liegenden Compute-Knoten anhand einer aktiven Planungssimulation und nicht anhand von Messwertlasten skalieren möchten, aktivieren Sie Cluster Autoscaler in GKE Standard-Knotenpools. Geben Sie die Mindestknotenparameter an, um die Baseline-Nachtkapazität zu unterstützen.
Konfigurieren Sie immer ein PodDisruptionBudget-Objekt (PDB) für System- und Anwendungs-Pods. Diese Konfiguration trägt dazu bei, dass Cluster Autoscaler bei der Konsolidierung oder Verkleinerung von unterlasteten Knotenpools nicht versehentlich zu Dienstunterbrechungen führt.
Informationen zum Cluster Autoscaler und dessen Konfiguration finden Sie in der folgenden GKE-Dokumentation:
Dynamische Knotenpools mit automatischer Knotenpoolerstellung bereitstellen
Aktivieren Sie die automatische Knotenpoolerstellung, um automatisch benutzerdefinierte GKE-Knotenpools zu generieren, deren Formen, CPU-Anzahlen oder Arbeitsspeicherlimits genau den Planungsparametern der ausstehenden Pods entsprechen. Mit dieser Funktion werden Ressourcen minimiert, die auf überdimensionierten Knoten übrig bleiben.
Informationen zur automatischen Knotenpoolerstellung und deren Konfiguration finden Sie in der folgenden GKE-Dokumentation:
Checkliste für Autoscaling
Infrastrukturmerkmale
Richten Sie die Clusterhardware, den Standort und die Knotennetzwerkregeln an den Prioritäten für die Kostenoptimierung aus.
Geeignete Maschinentypen auswählen
Wählen Sie die geeigneten Maschinentypen für Ihren Cluster basierend auf dem Standort Ihrer Nutzer und dem Standort der Daten aus, auf die Ihr Cluster zugreifen muss.
Weitere Informationen finden Sie im Leitfaden zu Ressourcen und Vergleichen für Maschinenfamilien.
Fehlertolerante Arbeitslasten auf Spot-VMs bereitstellen
Mit Spot-VMs können Sie zustandslose, fehlertolerante oder Batch-Arbeitslasten mit einem Rabatt von bis zu 91% im Vergleich zu VMs auf Abruf ausführen.
Weitere Informationen finden Sie in der folgenden GKE-Dokumentation:
- Konzepte für Spot-VMs
- Mit Spot-VMs fehlertolerante Arbeitslasten zu geringeren Kosten ausführen
- Fehlertolerante Arbeitslasten zu geringeren Kosten in Spot-Pods ausführen
Effiziente Maschinenfamilien und Betriebssystemeinstellungen zuordnen
Passen Sie die Maschineneinstellungen für Knotenpools mit kosteneffizienten Instanzprofilen an (z. B. E2-VM-Architekturen).
Weitere Informationen zum Anpassen der Größe von Knoten, zum Konfigurieren der Zeitpunkte für das vorzeitige Beenden von Spot-VM und zum Konfigurieren von Kernelkonfigurationen finden Sie unter Knotenpools.
Die geeignete Region auswählen
Wenn die Latenz Ihre Nutzer nicht beeinträchtigt, führen Sie Clusterarbeitslasten in Compute Engine-Regionen mit niedrigeren Betriebskosten aus.
Weitere Informationen finden Sie unter Best Practices für die Auswahl der Region in Compute Engine.
Für Rabatte für zugesicherte Nutzung registrieren
Erwerben Sie Rabatte für zugesicherte Nutzung (Committed Use Discounts, CUDs), um sich für ein oder drei Jahre einen stark ermäßigten Preis (bis zu 70 % Rabatt) für Compute-Ressourcen zu sichern.
Weitere Informationen finden Sie unter Ressourcenbasierte Rabatte für zugesicherte Nutzung.
Netzwerkkosten berücksichtigen
Regionale und multizonale GKE-Cluster verbessern die Zuverlässigkeit von Anwendungen, können aber interne Kosten für ausgehenden Traffic zwischen Zonen verursachen.
Berücksichtigen Sie Folgendes, um die Netzwerkkosten zu minimieren und zu kontrollieren:
- Datenübertragungen zwischen Zonen:Regionale Cluster erhöhen zwar die Verfügbarkeit, indem sie Arbeitslasten auf mehrere Zonen verteilen, aber es fallen Kosten für die Datenübertragung zwischen diesen Zonen an.
Weitere Informationen finden Sie unter Alle Netzwerkpreise.
Cluster mit einer Zone für Nicht-Produktionsumgebungen bereitstellen
Um in Nicht-Produktionsumgebungen Gebühren für ausgehenden Traffic zwischen Zonen zu vermeiden und den VM-Overhead zu reduzieren, stellen Sie Cluster mit einer Zone anstelle von regionalen oder multizonalen Clustern bereit.
Weitere Informationen finden Sie unter Informationen zu Cluster-Konfigurationsoptionen.
DNS-Auflösungspfade und eingehender Traffic für Cluster optimieren
Um die DNS-Auflösung und den eingehenden Traffic für Cluster zu optimieren, können Sie NodeLocal DNSCache und Netzwerk-Endpunktgruppen (Network Endpoint Groups, NEGs) bereitstellen.
Wenn Sie Arbeitslasten mit hohem DNS-Verbrauch ausführen, führt NodeLocal DNSCache auf jedem Knoten einen lokalen DNS-Daemon aus. Diese Konfiguration verhindert, dass CoreDNS durch hohe Abfragelasten überlastet wird. So ist es nicht erforderlich, CoreDNS zu skalieren, und die GKE-Gesamtkosten werden gesenkt.
Beim eingehenden Traffic leitet das containernative Load-Balancing über NEGs den Traffic direkt an Pod-IP-Adressen anstelle von Instanzgruppen weiter. Diese direkte Weiterleitung ermöglicht eine ordnungsgemäße Trafficumleitung bei Pod-Skalierungsaktionen.
Weitere Informationen finden Sie unter:
- NodeLocal DNSCache einrichten
- Containernatives Load-Balancing – Übersicht
- Ingress für externe Application Load Balancer konfigurieren
Ressourcenkontingente pro Namespace anwenden
Stellen Sie in Clustern mit mehreren Mandanten standardmäßige Kubernetes-ResourceQuota-Objekte pro Namespace bereit, um Schwellenwerte für CPU- und Arbeitsspeicherformen festzulegen und zu verhindern, dass einzelne Teams nicht konforme Arbeitslasten planen, die unerwartete Compute-Gebühren verursachen.
Weitere Informationen finden Sie in der Kubernetes-Dokumentation unter Namespaces.
Policy Controller-Prüfungen implementieren
Stellen Sie Policy Controller bereit, um die Cluster-Compliance mit Unternehmensstandards dynamisch zu prüfen und zu erzwingen. Policy Controller verwendet die Zugangssteuerung, um falsch konfigurierte Ressourcen abzulehnen.
Weitere Informationen finden Sie unter:
Nicht konforme Manifeste in CI/CD-Pipelines blockieren
Prüfen Sie die Einhaltung der Kostenrichtlinien früher im Entwicklungszyklus.
Integrieren Sie Validierungsskripts (z. B. kpt-Parsing) in Pre-Commit- oder Pull-Request-Prüfungen, um nicht konforme Manifeste zu prüfen und zu blockieren, bevor sie den Cluster erreichen.
Weitere Informationen finden Sie unter Anwendungen anhand von Unternehmensrichtlinien in einer CI-Pipeline validieren.
Checkliste für die Infrastruktur
Anwendungs- und Arbeitslastoptimierung
Konfigurieren Sie Ihre Arbeitslasten so, dass Ressourcen effizient genutzt werden und der Betriebsaufwand reduziert wird.
Passende Arbeitsspeicheranfragen und -limits angeben
Geben Sie vor der Bereitstellung genaue CPU- und Arbeitsspeicheranfragen für Container an. Konfigurieren Sie für die CPU Anfragen, die Ihren Service Level Objectives (SLOs) entsprechen, lassen Sie die Limits jedoch uneingeschränkt. Achten Sie beim Arbeitsspeicher darauf, dass die angeforderte Zuweisung dem Arbeitsspeicherlimit entspricht.
Weitere Informationen finden Sie in der Kubernetes-Dokumentation unter CPU- und Arbeitsspeicherressourcen für Container anpassen.
Containerstartzeiten beschleunigen
Halten Sie Container-Images so klein wie möglich, um die Downloadzeiten für Images zu minimieren.
PDBs konfigurieren
Geben Sie ein PodDisruptionBudget-Objekt (PDB) für Anwendungsreplikate an, um freiwillige Unterbrechungen zu begrenzen und die Stabilität zu gewährleisten, wenn GKE verkleinert wird oder Knotenupgrades erfolgen.
Weitere Informationen finden Sie unter Unterbrechungsbudget für Ihre Anwendung festlegen.
Aussagekräftige Bereitschafts- und Aktivitätsprüfungen festlegen
Konfigurieren Sie Bereitschafts- und Aktivitätsprüfungen für alle Container, um sicherzustellen, dass GKE den Traffic nur an bereite Pods weiterleitet und fehlerhafte Instanzen neu startet. So wird Trafficverlust während des Autoscalings verhindert.
Weitere Informationen finden Sie unter Aktivitäts-, Bereitschafts- und Start prüfungen konfigurieren.
Ordnungsgemäßes Herunterfahren von Anwendungen konfigurieren
Bereiten Sie Container auf das ordnungsgemäße Beenden vor, indem Sie auf das Signal SIGTERM warten, laufende Anfragen abschließen, bevor Sie beenden, oder preStop-Hooks konfigurieren.
Weitere Informationen finden Sie unter Beenden und ordnungsgemäßes Herunterfahren von VMs auf Abruf.
Wiederholungsversuche mit exponentiellem Backoff implementieren
Implementieren Sie Wiederholungsversuche mit exponentiellem Backoff auf Anwendungs- oder Service Mesh-Ebene, um vorübergehende Fehler oder potenzielle vorzeitige Beendigungen von Spot-VM zu verarbeiten.
Weitere Informationen finden Sie in der Istio-Dokumentation unter Wiederholungsversuche.
Checkliste für die Anwendungs- und Arbeitslastoptimierung
Kostengrundlage und -transparenz
Um Kosten zu optimieren, benötigen Sie zuerst Transparenz bei Ihren GKE-Ausgaben und deren Zuordnung. So können Sie Kosten den Teams und Geschäftseinheiten zuordnen, die sie verursachen.
In der folgenden GKE-Dokumentation wird beschrieben, wie Sie detaillierte Einblicke in die GKE-Abrechnung, den Ressourcenverbrauch und die Baseline-Messwerte erhalten.
GKE-Kostenzuordnung aktivieren
Aktivieren Sie die GKE-Kostenzuordnung, um Einblick in die Ressourcenanfragen für Arbeitslasten und die damit verbundenen Kosten zu erhalten. Bei der Kostenzuordnung werden Clusterkosten den Namespaces und Kubernetes-Labels Ihrer Arbeitslasten zugeordnet.
Exportieren Sie diese Details nach BigQuery, um die Daten in Cloud Billing zu analysieren. Mit dieser Analyse können Sie ermitteln, welche Arbeitslasten Abrechnungsspitzen verursachen, Rückbuchungen vornehmen und Ressourcenanfragen optimieren.
Weitere Informationen finden Sie unter Informationen zu Ausgaben für die GKE-Ressourcenzuordnung und Clusterkosten erhalten.
Aufnahmevolumen für Logs und Messwerte prüfen
Die Aktivierung von Cloud Logging und Cloud Monitoring für Ihre Cluster verursacht Kosten. Hohe Aufnahmevolumen für Logs und benutzerdefinierte Messwerte können zu unerwarteten Gebühren führen. Prüfen Sie zentral, welche Logebenen und benutzerdefinierten Messwerte aufgenommen werden.
Weitere Informationen zur Fehlerbehebung bei hoher Nutzung der Logging API oder Zeitüberschreitungen des Limits für das Schreiben von Logs finden Sie unter:
Integrität von Metrics Server überwachen
Überwachen Sie die Integrität der Metrics Server-Bereitstellung, da die integrierten Autoscaling-Controller von GKE darauf angewiesen sind, CPU- und Arbeitsspeichermesswerte abzurufen.
Weitere Informationen finden Sie unter Fehlerbehebung beim horizontalen Pod-Autoscaling.
Kultur der Kosteneinsparung fördern
Geben Sie Entwicklern Zugriff auf Dashboards für Cloud-Ausgaben und richten Sie FinOps-Schulungen ein, um Architekturentscheidungen an den Kostenbudgets des Unternehmens auszurichten.
Weitere Informationen zur Unternehmenskultur der Kosteneffizienz finden Sie unter Kultur der Kosteneinsparung etablieren.
Checkliste für Kostengrundlage und -transparenz
Nächste Schritte
Weitere Informationen zu den architektonischen Prinzipien und der Unternehmenskultur, die für Kosteneffizienz erforderlich sind, finden Sie unter Best Practices zum Ausführen kostenoptimierter Kubernetes-Anwendungen in GKE.