Best Practices zum Ausführen von Batch-Arbeitslasten in GKE


Auf dieser Seite werden die Best Practices für das Erstellen und Optimieren von Batchverarbeitungsplattformen mit Google Kubernetes Engine (GKE) vorgestellt. Dazu gehören Best Practices für:

  • Architektur
  • Jobverwaltung:
  • Mehrinstanzenfähigkeit
  • Sicherheit
  • In Warteschlangen stellen
  • Speicherplatz
  • Leistung
  • Kosteneffizienz
  • Monitoring

GKE bietet ein leistungsstarkes Framework für die Orchestrierung von Batcharbeitslasten wie Datenverarbeitung, Training von ML-Modellen, Ausführen von wissenschaftlichen Simulationen und andere Hochleistungs-Computing-Arbeitslasten.

Diese Best Practices richten sich an Plattformadministratoren, Cloud-Architekten und Betriebsexperten, die an der Bereitstellung von Batcharbeitslasten in GKE interessiert sind. Die Referenzarchitektur für eine Batchverarbeitungsplattform in GKE zeigt viele der in diesem Leitfaden beschriebenen Best Practices und kann in Ihrem eigenen Google Cloud-Projekt bereitgestellt werden.

Funktionsweise von Batcharbeitslasten

Eine Batcharbeitslast ist eine Gruppe von Aufgaben, die ohne Nutzereingriff abgeschlossen werden. Zum Definieren von Aufgaben verwenden Sie die Kubernetes-Ressource Jobs. Eine Batchplattform empfängt die Jobs und stellt sie in der Reihenfolge ihres Eingangs in die Warteschlange. Die Warteschlange in der Batch-Plattform wendet Verarbeitungslogik wie Priorität, Kontingent und zuweisbare Ressourcen an. Durch Warteschlangen und Anpassung der Batchverarbeitungsparameter können Sie in Kubernetes die Nutzung verfügbarer Ressourcen optimieren, die Inaktivitätszeit von geplanten Jobs minimieren und die Kosteneinsparung maximieren. Das folgende Diagramm zeigt die GKE-Komponenten, die Teil einer Batchplattform sein können.

Batch-Plattformverwaltung

Traditionell haben Batch-Plattformen zwei Hauptnutzer-Identitäten, Entwickler und Plattformadministratoren:

  • Ein Entwickler sendet einen Job, der das Programm, die zu verarbeitenden Daten und die Anforderungen für den Job angibt. Anschließend erhält der Entwickler eine Bestätigung der Jobübermittlung und eine eindeutige Kennzeichnung. Wenn der Job abgeschlossen ist, erhält der Entwickler eine Benachrichtigung zusammen mit den Ausgaben oder Ergebnissen des Jobs.
  • Ein Plattformadministrator verwaltet und stellt eine effiziente und zuverlässige Batchverarbeitungsplattform für die Entwickler bereit.

Eine Batchverarbeitungsplattform muss folgende Anforderungen erfüllen:

  • Die Plattformressourcen werden ordnungsgemäß bereitgestellt, um sicherzustellen, dass Jobs mit geringem oder gar keinem Nutzereingriff ausgeführt werden.
  • Die Plattformressourcen werden gemäß den Best Practices für Sicherheit und Beobachtbarkeit der Organisation konfiguriert.
  • Die Plattformressourcen werden so effizient wie möglich genutzt. Bei Ressourcenkonflikten wird die wichtigste Arbeit zuerst ausgeführt.

Batchplattformarchitektur in GKE vorbereiten

Eine GKE-Umgebung besteht aus Knoten, bei denen es sich um virtuelle Compute Engine-Maschinen (VMs) handelt, die zusammen einen Cluster bilden.

In der folgenden Tabelle sind die wichtigsten Empfehlungen für die Planung und Gestaltung Ihrer Batchplattformarchitektur aufgeführt:

Empfehlung Ressourcen
GKE-Betriebsmodus auswählen

In GKE stehen folgende Betriebsmodi zur Verfügung:

  • Mit dem Autopilot-Modus verwaltet GKE automatisch Ihre Clusterkonfiguration, einschließlich Knoten, Skalierung, Sicherheit und anderen vorkonfigurierten Einstellungen, damit Sie sich auf Ihre Arbeitslast konzentrieren können. Autopilot-Cluster sind standardmäßig hochverfügbar.
  • Im Standardmodus definieren und verwalten Sie Ihre Clusterkonfiguration, einschließlich Knoten, Skalierung, Sicherheit und anderer erweiterter Einstellungen.

Weitere Informationen finden Sie unter Vergleich des Autopilot- und Standardmodus.

Maschinentyp für Knoten auswählen

GKE unterstützt die folgende Reihe von Compute Engine-VMs:

  • Kostenoptimiert, z. B. E2
  • Ausgeglichen, z. B. N2, N2D oder N1
  • Horizontale Skalierung, z. B. Tau T2D oder Tau T2A
  • Speicheroptimiert, z. B. M2 oder M1
  • Computing-optimiert wie C2 oder C2D
  • Beschleunigungsoptimiert, wie A2 mit NVIDIA A100-GPUs, G2 mit NVIDIA L4-GPUs, A3 mit NVIDIA H100-GPUs (in der privaten Vorschau verfügbar).

Jede Maschinenreihe ist einer oder mehreren CPU-Plattformen zugeordnet, z. B. ARM-Prozessoren und x86-Prozessoren von Intel und AMD.

Optionen, die derzeit für Ihre Arbeitslast verfügbar sind.

Hardwarebeschleuniger für Knoten verwenden

Sie können in GKE auch Hardwarebeschleuniger wie Grafikprozessoren (GPUs) und Tensor Processing Units (TPUs) verwenden. Betrachten Sie die GPU-Zeitfreigabe-Strategie, bei der mehrere Container die gleiche Zeit auf derselben physischen GPU teilen können. Dieser Ansatz eignet sich für Burst- und homogene GPU-Arbeitslasten mit niedrigen Anfragen. GPUs mit mehreren Instanzen partitionieren GPUs, um eine einzelne GPU-Ressource für mehrere Container gleichzeitig freizugeben.

Cluster Autoscaler für Standardcluster aktivieren

GKE passt die Größe der Knoten in einem bestimmten Knotenpool automatisch an die Anforderungen Ihrer Arbeitslasten an. Sie müssen weder Knoten manuell hinzufügen oder entfernen noch Ihre Knotenpools überdimensionieren. Stattdessen geben Sie nur eine Mindest- und eine maximale Größe für den Knotenpool an.

Es wird empfohlen, Cluster Autoscaler mit der folgenden Konfiguration festzulegen:

  • Verwenden Sie das Profil optimize-utilization, das nicht verwendete Knoten bis zu dreimal schneller als das ausgeglichene Profil entfernt. Weitere Informationen finden Sie unter Profile für Autoscaling.
  • Legen Sie die Standortrichtlinie auf ANY fest. GKE Cluster Autoscaler priorisiert die Nutzung nicht verwendeter Reservierungen und erstellt Knoten in jeder verfügbaren Zone in den Regionen. Weitere Informationen finden Sie unter Standortrichtlinie.
  • Automatische Knotenbereitstellung aktivieren, um die Infrastruktur automatisch zu verwalten und zu skalieren. Nachdem ein Knotenpool mithilfe der automatischen Bereitstellung erstellt wurde, kann Cluster Autoscaler den Knotenpool dynamisch skalieren. Weitere Informationen finden Sie unter Funktionsweise der automatischen Knotenbereitstellung.

Mit Autopilot-Clustern müssen Sie sich keine Gedanken über die Bereitstellung von Knoten oder die Verwaltung von Knotenpools machen, da Knotenpools automatisch über die automatische Knotenbereitstellung bereitgestellt und automatisch skaliert werden, um die Anforderungen Ihrer Arbeitslasten zu erfüllen.

Cluster in einer Release-Version registrieren

GKE kann Ihre Clusterversion und Upgrades automatisch verwalten. Basierend auf Ihrem Release-Akzeptanzmodell können Sie Ihren Cluster bei den verfügbaren GKE-Kanälen registrieren.

Weitere Informationen finden Sie unter Beste Release-Version für Ihre Cluster auswählen.

Umfang des Wartungsausschlusses für den Cluster definieren

Wenn ein Ausschlussfenster für den Upgradebereich definiert ist, berücksichtigt GKE, dass lange laufende Batcharbeitslasten erst nach Abschluss einer Wartung unterbrochen werden.

Weitere Informationen finden Sie unter Umfang des Wartungsausschlusses.

Joblebenszyklus verwalten

In Kubernetes führen Sie Ihre Arbeitslasten in einer Reihe von Pods aus. Pods sind Gruppen aus einzelnen oder mehreren Containern mit gemeinsam genutztem Speicher und Netzwerkressourcen. Pods werden durch eine Kubernetes-Spezifikation definiert.

Ein Job erstellt einen oder mehrere Pods und wiederholt die Ausführung der Pods, bis eine festgelegte Anzahl von Pods erfolgreich beendet wird. Wenn die Pods abgeschlossen sind, verfolgt der Job die erfolgreichen Vervollständigungen. Wenn eine bestimmte Anzahl erfolgreicher Ausführungen erreicht ist, wird der Job abgeschlossen.

In der folgenden Tabelle sind die wichtigsten Empfehlungen beim Entwerfen und Verwalten von Jobs aufgeführt:

Empfehlung Ressourcen
Modus für den Jobabschluss auswählen Geben Sie den Abschlussmodus als Indexed an. Diese Konfiguration ist nützlich, wenn Sie eine Partition der zu verarbeitenden Daten basierend auf dem Pod-Index zuweisen. Die Pods eines Jobs erhalten einen zugehörigen Abschlussindex. Wenn Sie einen Job löschen, werden die von ihm erstellten Pods bereinigt. Durch das Anhalten eines Jobs werden seine aktiven Pods gelöscht, bis der Job wieder fortgesetzt wird.
CronJobs für reguläre geplante Aktionen festlegen Verwenden Sie CronJob für GKE, um regelmäßige geplante Aktionen durchzuführen, wie z. B. Sicherungen, Berichtsgenerierung oder geplantes Training für Modelle für maschinelles Lernen.
Fehler in einem Job verwalten Definieren Sie die Kubernetes-Pod-Fehlerrichtlinie und das Fehlerlimit für Pod-Backoffs, um wiederholbare und nicht wiederholbare Fehler in einem Job zu beheben. Diese Definition verbessert den Verbrauch der Clusterressourcen, da unnötige Pod-Wiederholungen und Jobfehler aufgrund von Pod-Unterbrechungen vermieden werden. Sie können beispielsweise eine präemptive Bereinigung, eine API-initiierte Bereinigung oder eine markierungsbasierte Bereinigung konfigurieren, bei der Pods ohne Toleranz für den NoExecute-Markierungseffekt werden entfernt. Umsetzbare und nicht wiederholbare Pod-Fehler mit einer Pod-Fehlerrichtlinie behandeln
Mehrere Jobs als Einheit verwalten Verwenden Sie die JobSet API, um mehrere Jobs als Einheit zu verwalten, um Arbeitslastmuster wie einen Treiber (oder Koordinator) und mehrere Worker (z. B. MPIJob) zu adressieren, während Sie Standardeinstellungen für Jobs festlegen, die anhand Ihrer Anwendungsfälle an allgemeinen Mustern ausgerichtet sind. Sie können beispielsweise einen indexierten Job erstellen und einen monitorlosen Dienst für vorhersehbare vollständig qualifizierte Domainnamen (FQDN) für Pods erstellen und die zugehörige Pod-Fehlerrichtlinie festlegen.
Laufzeit für einen Pod verlängern, der Neustarts nicht toleriert Legen Sie die Kubernetes-Annotation cluster-autoscaler.kubernetes.io/safe-to-evict in der Pod-Spezifikation auf false fest. Cluster Autoscaler berücksichtigt die auf Pods festgelegten Bereinigungsregeln. Diese Einschränkungen können das Löschen eines Knotens verhindern, wenn er einen Pod mit der Annotation cluster-autoscaler.kubernetes.io/safe-to-evict enthält.

Weitere Informationen finden Sie unter Pod-Planung und -Unterbrechungen berücksichtigen.

Mandantenfähigkeit verwalten

Die Mehrmandantenfähigkeit des GKE-Clusters ist eine Alternative zur Verwaltung von GKE-Ressourcen durch verschiedene Nutzer oder Arbeitslasten, sogenannte Mandanten, in einer einzelnen Organisation. Die Verwaltung von GKE-Ressourcen kann Kriterien wie die Mandantenisolation, Kontingente und Limitbereiche oder die Kostenzuweisung erfüllen.

In der folgenden Tabelle sind die wichtigsten Empfehlungen bei der Verwaltung der Mehrmandantenfähigkeit aufgeführt:

Empfehlung Ressourcen
Mandantenisolation mit Namespaces verwalten Sie können jeden Mandanten und die zugehörigen Kubernetes-Ressourcen in separate Namespaces aufteilen.
Mandantenisolation mithilfe von Richtlinien erzwingen Definieren Sie Richtlinien, um den API-Zugriff zu beschränken, Kontingente festzulegen, die Ressourcennutzung einzuschränken und die Berechtigungen von Containern einzuschränken. Diese Richtlinien sind auf Namespaces beschränkt.
GKE-Kostenzuordnung festlegen Verwenden Sie die GKE-Kostenzuordnung, um Informationen zu Cluster-Ressourcenanfragen für jeden Mandanten auf Namespace-Basis zu erhalten.

Zugriff auf die Batchplattform steuern

Mit GKE können Sie die Zugriffsberechtigungen der auf dem Cluster ausgeführten Arbeitslasten optimieren.

In der folgenden Tabelle sind die wichtigsten Empfehlungen für die Verwaltung von Zugriff und Sicherheit aufgeführt

Empfehlung Ressourcen
Identitätsföderation von Arbeitslasten für GKE festlegen GKE ermöglicht Arbeitslasten in Ihrem GKE-Cluster, die Identität von Identity and Access Management (IAM)-Dienstkonten für den Zugriff auf Google Cloud-Dienste anzunehmen. Mithilfe der Identitätsföderation von Arbeitslasten für GKE können Arbeitslasten sicher auf Secrets zugreifen, die außerhalb von GKE gespeichert sind.

Weitere Informationen finden Sie unter Identitätsföderation von Arbeitslasten für GKE und Auf gespeicherte Secrets zugreifen.

Cluster-Netzwerkisolation festlegen Verwenden Sie private Cluster, bei denen sowohl der Endpunkt der Steuerungsebene als auch die Worker-Knoten interne IP-Adressen haben können. Sie können die Cluster-Isolierung auch für vorhandene öffentliche Cluster ändern, die Private Service Connect verwenden.

Weitere Informationen finden Sie unter Öffentliche Cluster und Clusterisolation ändern.

Shielded GKE-Knoten verwenden Shielded GKE-Knoten konfigurieren, um eine starke, überprüfbare Knotenidentität und -integrität zu bieten, die die Sicherheit von GKE-Knoten erhöht.
Physische Isolation Aus Sicherheitsgründen benötigen Ihre Arbeitslasten möglicherweise eine stärkere Isolation. Steuern Sie die Planung mit Knotenmarkierungen, um Mandanten in Knotenpools mithilfe von Knotenmarkierungen und Arbeitslasttoleranzen physisch zu trennen. Dadurch wird sichergestellt, dass nur die entsprechenden Arbeitslasten auf diesen Knotenpools geplant werden.

Warteschlangen und faire Freigabe

Zur Kontrolle des Ressourcenverbrauchs können Sie jedem Mandanten ein Limit für Ressourcenkontingente zuweisen, eingehende Jobs in die Warteschlange stellen und Jobs in der Reihenfolge verarbeiten, in der sie empfangen wurden.

In der folgenden Tabelle sind die wichtigsten Empfehlungen für die Verwaltung von Warteschlangen und fairer Freigabe bei Batcharbeitslasten aufgeführt:

Empfehlung Ressourcen
Kueue verwenden

Kueue ist ein Kubernetes-natives Jobwarteschlangensystem für Batch-, Hochleistungs-Computing-, maschinelle Lern- und ähnliche Anwendungen in einem Kubernetes-Cluster. Um die faire Freigabe von Clusterressourcen zwischen seinen Mandanten zu gewährleisten, verwaltet Kueue Kontingente und deren Nutzung durch Jobs. Kueue trifft die folgenden Entscheidungen:

  • Wann ein Job warten sollte
  • Wann ein Job gestartet werden sollte, beispielsweise durch Erstellen des Pods
  • Wann ein Job vorzeitig beendet werden soll, z. B. durch Löschen des Pods

Informationen zum Implementieren eines Jobwarteschlangensystems finden Sie unter Jobwarteschlangensystem mit Kontingentfreigabe zwischen Namespaces in GKE implementieren.

Weitere Informationen zu Kueue finden Sie unter Kueue-Konzepte.

Speicher, Leistung und Kosteneffizienz

Durch die effiziente Nutzung unserer GKE-Computing- und Speicherressourcen können Sie die Kosten senken. Eine Strategie besteht darin, die Größe Ihrer Compute-Instanzen so anzupassen, dass sie Ihren Batchverarbeitungsanforderungen entsprechen, ohne die Leistung zu beeinträchtigen.

In der folgenden Tabelle sind die wichtigsten Empfehlungen für das Entwerfen und Verwalten von Speicher und das Optimieren der Leistung aufgeführt:

Empfehlung Ressourcen
Nichtflüchtige Compute Engine-Speicher verwenden

Wir empfehlen die folgenden Konfigurationen für nichtflüchtigen Speicher von Compute Engine:

Network Attached Storage verwenden

Verwenden Sie den folgenden netzgebundenen Speicher zusammen mit Persistent Disk, um eine optimale Speicherleistung zu erzielen:

  • Verwenden Sie Filestore, damit alle Worker-Knoten in einem Pod auf denselben Speicher-Namespace und dieselbe Skalierungskapazität zugreifen können.
  • Verwenden Sie Cloud Storage FUSE, um direkt von einem Container als lokale POSIX-Bereitstellung auf Cloud Storage zuzugreifen.
Pub/Sub definieren

Ihre Batcharbeitslast kann auch Daten lesen und schreiben. Sie können beispielsweise Pub/Sub verwenden und die Ergebnisse in ein Data Warehouse wie BigQuery schreiben, von dem aus Berichte und Dashboards aktualisiert werden.

Wir empfehlen die folgenden Speicherlösungen:

  • Verwenden Sie Cloud Storage für den verwalteten Objektspeicher.
  • Verwenden Sie für verwalteten Netzwerkdateispeicher Filestore.
  • Verwenden Sie für Arbeitslasten, die eine Dateisystemsemantik erfordern, den Cloud Storage FUSE CSI-Treiber. Mit diesem Treiber können Kubernetes-Anwendungen Cloud Storage-Buckets als lokale Dateisysteme bereitstellen
Abstimmungsparameter für Ihre Arbeitslast angeben

Wir empfehlen die folgenden Konfigurationen:

  • Passen Sie die Knotensystemkonfiguration für Ihre Arbeitslast an. Legen Sie beispielsweise die Mindest-, Standard- und Höchstwerte für den TCP-Socket-Empfang-Zwischenspeicher fest. Verwenden Sie die Knotensystemkonfiguration.
  • Busy Polling mit Netzwerkprofilen aktivieren. Einige Arbeitslasten, die empfindlich auf Netzwerklatenz reagieren, können verbessert werden. Verwenden Sie Netzwerkprofile.
  • Erhöhen Sie die Netzwerkbandbreite für GKE-Knoten durch Aktivieren von Google Virtual NIC (gVNIC), einer virtuellen Netzwerkschnittstelle, die speziell für Compute Engine entwickelt wurde und für Hochleistungsanwendungen empfohlen wird.
  • Geben Sie die Anzahl der Threads pro Kern an, um das gleichzeitige Multi-Threading zu deaktivieren.
Arbeitslasten und Latenz von Arbeitslasten optimieren GKE unterstützt die Richtlinie für kompakte Platzierung für Knotenpools. Diese gibt an, dass diese Knoten (und damit die darauf ausgeführten Arbeitslasten) nahe zueinander innerhalb einer Zone platziert werden sollen. Dies ist besonders für eng gekoppelte und leistungsstarke Arbeitslasten nützlich, bei denen eine niedrige Latenz zwischen verschiedenen Prozessen, die die Arbeitslast umfassen, von größter Bedeutung ist. Weitere Informationen finden Sie unter Kompakte Platzierung.
Spot-VMs verwenden

Spot-VMs sind Compute Engine-VM-Instanzen, die günstiger als Standard-VMs von Compute Engine sind und keine Verfügbarkeit garantieren.

Wir empfehlen die folgenden Lösungen:

  • Legen Sie Autoscaling-Spot-VM-Knotenpools in Kombination mit location_policy= "ANY" fest. Mit dieser Richtlinie haben Spot-VMs das geringere Risiko, vorzeitig beendet zu werden. Diese Kombination ist besonders nützlich für Arbeitslasten, die die vorzeitige Beendigung einzelner Worker-Knoten überstehen können, z. B. prägnante parallele Berechnungen.
  • Wenn Ihre Arbeitslast einen vorhersehbaren Ressourcenbedarf hat, können Sie mit Google Cloud-Reservierungen und Rabatten für zugesicherte Nutzung erhebliche Einsparungen erzielen. Erstellen Sie einen Knotenpool, dessen Größe auf die Anzahl der reservierten Instanzen festgelegt ist, und priorisieren Sie die Sättigung dieses Knotenpools für eine maximale Nutzung.
Image-Draining verwenden

Container-Images mithilfe von Image-Streaming abrufen GKE streamt Daten aus zulässigen Images. Auf diese Weise können Ihre Arbeitslasten initialisiert werden, ohne auf den Download des gesamten Images warten zu müssen. Dies führt zu deutlich verbesserten Initialisierungszeiten und einer höheren Kosteneffizienz.

Monitoring

GKE ist in Beobachtbarkeits- und Logging-Tools eingebunden, mit denen Sie die Zuverlässigkeit und Effizienz Ihres Clusters überwachen können. In der folgenden Tabelle sind die wichtigsten Empfehlungen bei der Aktivierung und Verwendung von GKE-Beobachtbarkeitstools aufgeführt:

Empfehlung Ressourcen
Prometheus verwenden

GKE ist in Google Cloud Observability eingebunden. Messwerte anpassen, die GKE an Cloud Logging und Cloud Monitoring senden soll

Google Cloud Managed Service for Prometheus ist standardmäßig für GKE-Cluster aktiviert. Wir empfehlen die Verwendung der verwalteten Erfassung, um die Komplexität der Einrichtung und Wartung von Prometheus-Servern zu vermeiden.

Weitere Informationen finden Sie unter Verwalteter Dienst für Prometheus.

Cloud Monitoring-Dashboards verwenden

Verwenden Sie die Monitoring-Dashboards für GKE, um eine allgemeine Übersicht über die Cluster- und Ressourcennutzung zu erhalten und die verschiedenen Messwerte und Dimensionen aufzuschlüsseln und zu filtern.

Weitere Informationen finden Sie unter GKE-Cluster beobachten.

Nächste Schritte