Mit ComputeClasses können Sie Gruppen von Knotenattributen und Autoscaling-Einstellungen definieren, die von Google Kubernetes Engine (GKE) verwendet werden, um Knoten zum Ausführen von Pods zu erstellen. Auf dieser Seite wird beschrieben, wie ComputeClasses funktionieren, Anwendungsfälle und Vorteile sowie die verfügbaren Arten von ComputeClasses.
Diese Informationen sind für folgende Personen gedacht:
- Cloud-Architekten und Plattformtechniker, die den Aufwand für die Verwaltung der Clusterinfrastruktur reduzieren möchten.
- App-Betreiber und SREs, die sich auf den Betrieb von Arbeitslasten konzentrieren möchten, ohne sich um die zugrunde liegende Infrastruktur kümmern zu müssen.
ComputeClasses und Cluster-Autoscaling
Eine ComputeClass ist eine Gruppe von Knotenattributen und Autoscaling-Einstellungen, die als Kubernetes-API-Objekt in einem GKE-Cluster vorhanden ist. Sie können eine ComputeClass in jeder Kubernetes-Arbeitslast auswählen, die Sie bereitstellen. Das GKE-Cluster-Autoscaling verwendet die Attribute in einer ComputeClass, um Knoten für Arbeitslasten zu erstellen.
Plattformtechniker können ComputeClasses verwenden, um die Infrastruktur für verschiedene Arten von Arbeitslasten zu konfigurieren, sodass jeder neue Knoten für die spezifischen Anforderungen Ihrer Anwendungen optimiert ist. ComputeClasses verbessern die Geschwindigkeit und Flexibilität des GKE-Autoscalings und bieten Ihnen eine deklarative Methode zum Konfigurieren von Infrastrukturoptionen in Ihren Clustern. Weitere Informationen finden Sie im Abschnitt Vorteile der Verwendung von ComputeClasses.
Bestimmte GKE-Funktionen sind nur mit ComputeClasses verfügbar, z. B.:
- Fallback-Computing-Prioritäten: Definieren Sie mehrere Gruppen von Infrastrukturkonfigurationen in einer ComputeClass, die basierend auf Ihren Einstellungen priorisiert werden. Wenn die bevorzugte Konfiguration während der Skalierung nicht verfügbar ist, greift GKE auf die nächste Konfiguration zurück.
- Aktive Migration zu Knoten mit höherer Priorität: Wenn diese Option konfiguriert ist, ersetzt GKE im Laufe der Zeit automatisch Knoten, die in Ihrer Liste der Fallback-Prioritäten weiter unten stehen, durch Knoten, die in dieser Liste weiter oben stehen. So werden Ihre Pods schließlich auf den bevorzugten Knoten in einer ComputeClass ausgeführt, auch wenn diese Hardware beim Erstellen der Arbeitslast nicht verfügbar war.
- Autopilot in GKE Standard: Führen Sie Arbeitslasten im GKE Autopilot-Modus aus, um Autopilot-Funktionen wie die containeroptimierte Compute-Plattform und die Pod-basierte Abrechnung auch in Standardclustern zu nutzen. GKE verwaltet diese Knoten und Arbeitslasten und bietet Ihnen die Vorteile des Autopilot-Modus in jedem Cluster.
Vorteile von ComputeClasses
ComputeClasses bieten Plattformadministratoren und -betreibern folgende Vorteile:
- Verbesserte Ressourcenverfügbarkeit: ComputeClasses erweitern die Möglichkeiten des GKE-Cluster-Autoscalings. ComputeClass-Funktionen wie Fallback-Prioritäten und Parameter für die Knotenkonsolidierung können das Risiko verringern, dass Pods im Status „Ausstehend“ bleiben, und die Anzahl der Optionen erhöhen, mit denen Sie Ihre Knoten skalieren können.
- Deklarative Konfiguration auf Plattformebene: Mit ComputeClasses können Plattformtechniker Knotenkonfigurationen für verschiedene Arbeitslasttypen deklarativ beschreiben. Das GKE-Autoscaling verwaltet die Erstellung und Konfiguration von Knoten und Knotenpools. Sie können Ihre ComputeClasses in Ihre CI/CD-Pipelines einbinden, um eine konsistente Bereitstellung der Infrastruktur auf Ihrer Plattform zu gewährleisten.
- Weniger Verwaltungsaufwand: ComputeClasses reduzieren die Komplexität der Verwaltung von Infrastruktur und Arbeitslasten im großen Maßstab. Plattformtechniker deklarieren Klassen von Infrastruktur und App-Betreiber wählen eine entsprechende Klasse in einer Arbeitslast aus. GKE verwaltet die Skalierung und die Knotenhardwarekonfiguration und wendet Markierungen, Toleranzen und Labels an.
Benutzerdefinierte ComputeClass-Ressource
ComputeClasses sind Kubernetes benutzerdefinierte Ressourcen. Sie können die Spezifikation einer ComputeClass in einer Manifestdatei definieren und sie in Ihren Clustern erstellen, ähnlich wie Sie Ihre Kubernetes-Arbeitslastressourcen wie Deployments und Dienste definieren und erstellen.
Das folgende Beispielmanifest definiert eine ComputeClass mit dem Namen n4:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: n4
spec:
nodePoolAutoCreation:
enabled: true
priorities:
- machineFamily: n4
- machineFamily: n2
whenUnsatisfiable: DoNotScaleUp
Wenn ein Pod diese ComputeClass auswählt, führt GKE beim Erstellen neuer Knoten Folgendes aus:
- GKE erstellt Knoten, die die N4-Maschinenserie verwenden.
- Wenn die N4-Maschinenserie nicht verfügbar ist, erstellt GKE stattdessen Knoten, die die N2-Maschinenserie verwenden.
- Wenn die N2-Maschinenserie nicht verfügbar ist, wartet GKE, bis Ressourcen verfügbar sind, um den Pod zu planen.
Mit ComputeClasses können Sie verschiedene Einstellungen für Ihre Knoten steuern, darunter Beschleuniger, Knotensystemeinstellungen, Knotenstandorte und das Fallback-Verhalten von GKE, wenn keine Hardwareressourcen verfügbar sind. Weitere Informationen zu allen verfügbaren Konfigurationen für ComputeClasses finden Sie in der ComputeClass-CustomResourceDefinition.
ComputeClass-Auswahl in Arbeitslasten
Wenn Sie eine ComputeClass für eine GKE-Arbeitslast verwenden möchten, wählen Sie die
ComputeClass im Arbeitslastmanifest mit einer
Knotenauswahl
für das cloud.google.com/compute-class Label aus.
Im folgenden Beispielmanifest für die Bereitstellung wird eine ComputeClass ausgewählt:
Ersetzen Sie COMPUTE_CLASS durch den Namen einer ComputeClass, die im Cluster vorhanden ist. Sie können beispielsweise die n4
ComputeClass aus dem
Abschnitt Benutzerdefinierte ComputeClass-Ressource
oder die autopilot
integrierte ComputeClassangeben.
Knotenkonfiguration in Arbeitslastspezifikationen
Mit GKE Autopilot-Clustern und der automatischen Knotenbereitstellung in GKE Standard können Sie Knotenauswahlen in Ihren Pods verwenden, um Knoten mit bestimmten Eigenschaften wie Maschinenfamilien, Spot-VMs oder GPUs und TPUs zu erstellen. Mit ComputeClasses können Sie diese Anforderungen zentral definieren, anstatt jeder Arbeitslast einzelne Selektoren hinzuzufügen.
ComputeClasses standardmäßig anwenden
Sie können GKE so konfigurieren, dass eine ComputeClass standardmäßig auf Pods angewendet wird, die keine bestimmte ComputeClass auswählen. Sie können eine Standard-ComputeClass für bestimmte Namespaces oder für einen gesamten Cluster definieren. Weitere Informationen zum Konfigurieren Ihrer Cluster oder Namespaces mit einer Standardklasse finden Sie unter ComputeClasses standardmäßig auf Pods anwenden.
In der folgenden Tabelle werden die Auswirkungen der Festlegung einer ComputeClass als Standard für einen Namespace oder einen Cluster beschrieben:
| Auswirkungen von Standard-ComputeClasses | |
|---|---|
| Standard auf Namespace-Ebene |
|
| Standard auf Clusterebene |
|
Wenn GKE eine Standard-ComputeClass auf Namespace-Ebene auf einen Pod anwendet, wird die Standard-ComputeClass auf Clusterebene nicht aktiviert, da GKE dem Pod eine Knotenauswahl für die Standardklasse auf Namespace-Ebene hinzufügt.
Aktive Migration in Standard-ComputeClasses
Wenn für die ComputeClass, die Sie als Standard auf Namespace- oder Clusterebene verwenden, das Feld activeMigration.optimizeRulePriority auf true gesetzt ist, können folgende Auswirkungen auftreten:
- Standard-ComputeClass auf Clusterebene: Die aktive Migration kann ausgelöst werden, wenn Knoten mit niedrigerer Priorität vorhanden sind und GKE Knoten mit höherer Priorität erstellen kann. Je nach Anzahl der Knoten mit niedrigerer Priorität kann die Migration zu mehr Unterbrechungen der Arbeitslast führen.
- Standard-ComputeClass auf Namespace-Ebene: Die aktive Migration wird nicht ausgelöst, da GKE die Knotenauswahl für die ComputeClass nur in neu erstellte Pods einfügt. Vorhandene Pods werden nicht automatisch mit der Auswahl neu erstellt.
Standard-ComputeClasses auf Clusterebene
Wenn Sie Standard-ComputeClasses auf Clusterebene aktivieren, definiert ein ComputeClass-Objekt mit dem Namen default die Regeln für das Knoten-Autoscaling für den Cluster. Wenn Ihr Cluster bereits eine ComputeClass mit dem Namen default hat, verwendet GKE diese ComputeClass-Konfiguration für den Cluster. Wenn der Cluster keine benutzerdefinierte ComputeClass mit dem Namen default hat, verhält sich GKE so, als würden die folgenden ComputeClass-Regeln gelten:
spec:
whenUnsatisfiable: ScaleUpAnyway
nodePoolAutoCreation:
enabled: true
Standardmäßig wendet GKE kein Fallback-Verhalten an und ändert die Konfiguration von automatisch skalierten Knoten nicht. Wenn Sie automatisch skalierten Knoten standardmäßig bestimmte Eigenschaften zuweisen möchten, müssen Sie eine benutzerdefinierte ComputeClass mit dem Namen default bereitstellen.
Beachten Sie Folgendes, wenn Sie Ihre Standard-ComputeClass auf Clusterebene konfigurieren:
- Damit Pods nicht im Status
Pendingbleiben, setzen Sie das Feldspec.whenUnsatisfiableaufScaleUpAnyway. Mit diesem Wert kann GKE Knoten erstellen, auch wenn Pods Compute Engine-Maschinenfamilien anfordern, die nicht in den Prioritätsregeln für die Standardklasse auf Clusterebene enthalten sind. Wenn Sie erzwingen möchten, dass diese Pods die Maschinenfamilien verwenden, die in der Standard-ComputeClass enthalten sind, setzen Sie dieses Feld aufDoNotScaleUp. - Um Änderungen an der
defaultComputeClass einzuschränken, verwenden Sie eine RBAC-ClusterRole, um die Vorgänge update, patch, delete und create für dieComputeClass-Ressource mit dem Namendefaulteinzuschränken. - Wenn Sie die Standardparameter für die Knotenkonsolidierung des Cluster-Autoscalers ändern möchten, verwenden Sie das Feld
spec.autoscalingPolicyin Ihrer ComputeClass-Spezifikation. Die Parameter, die Sie für dieses Feld in der Standard-ComputeClass auf Clusterebene angeben, gelten für alle Knoten in Ihrem Cluster. Weitere Informationen finden Sie unter siehe Autoscaling-Parameter für die Knotenkonsolidierung festlegen.
Nächste Schritte
- Informationen zu integrierten ComputeClasses
- Informationen zu benutzerdefinierten ComputeClasses
- ComputeClass-CustomResourceDefinition lesen
- ComputeClass bereitstellen und in einer Arbeitslast auswählen