GKE-ComputeClasses

Mit ComputeClasses können Sie Gruppen von Knotenattributen und Autoscaling-Einstellungen definieren, die Google Kubernetes Engine (GKE) verwendet, um Knoten zum Ausführen von Pods zu erstellen. Auf dieser Seite wird beschrieben, wie ComputeClasses funktionieren, welche Anwendungsfälle und Vorteile es gibt und welche Arten von ComputeClasses verfügbar sind.

Diese Informationen sind für folgende Nutzer bestimmt:

  • Cloud Architects und Plattformentwickler, 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.

Compute-Klassen 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 für jede Kubernetes-Arbeitslast auswählen, die Sie bereitstellen. Beim GKE-Cluster-Autoscaling werden die Attribute in einer Compute-Klasse verwendet, um Knoten für Arbeitslasten zu erstellen.

Plattformtechniker können ComputeClasses verwenden, um die Infrastruktur für verschiedene Arten von Arbeitslasten zu konfigurieren. So wird jeder neue Knoten für die spezifischen Anforderungen Ihrer Anwendungen optimiert. ComputeClasses verbessern die Geschwindigkeit und Flexibilität von GKE-Autoscaling 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 und -Features sind nur mit ComputeClasses verfügbar, z. B.:

  • Fallback-Computing-Prioritäten: Hiermit können Sie in einer ComputeClass mehrere Sätze von Infrastrukturkonfigurationen definieren, die auf Grundlage Ihrer 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 für diese Compute-Klasse am besten geeigneten Knoten ausgeführt, auch wenn diese Hardware beim Erstellen der Arbeitslast nicht verfügbar war.
  • Autopilot in GKE Standard: Sie können Arbeitslasten im GKE Autopilot-Modus ausführen, 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 so die Vorteile des Autopilot-Modus in jedem Cluster.

Vorteile von ComputeClasses

Compute-Klassen bieten Plattformadministratoren und ‑operatoren unter anderem folgende Vorteile:

  • Verbesserte Flexibilität, Effizienz und Verfügbarkeit von Rechenkapazität: ComputeClasses erweitern die Funktionen des GKE-Cluster-Autoscalings. ComputeClass-Funktionen wie Fallback-Prioritäten und Parameter für die Knotenverdichtung können das Risiko verringern, dass Pods im Status „Pending“ (Ausstehend) bleiben, und die Anzahl der Optionen erhöhen, die Sie zum Skalieren Ihrer Knoten verwenden können.
  • Deklarative Konfiguration auf Plattformebene: Mit ComputeClasses können Plattformtechniker Knotenkonfigurationen für verschiedene Arbeitslasttypen deklarativ beschreiben. 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 bereitgestellte Infrastruktur auf Ihrer Plattform zu erhalten.
  • Geringerer Verwaltungsaufwand: ComputeClasses reduzieren die Komplexität der Verwaltung von Infrastruktur und Arbeitslasten im großen Maßstab. Plattformtechniker deklarieren Infrastrukturklassen und App-Operatoren wählen eine entsprechende Klasse in einer Arbeitslast aus. GKE verwaltet die Skalierung und die Konfiguration der Knotenhardware und wendet Markierungen, Toleranzen und Labels an.

Benutzerdefinierte ComputeClass-Ressource

ComputeClasses sind benutzerdefinierte Kubernetes-Ressourcen. Sie können die Spezifikation einer ComputeClass in einer Manifestdatei definieren und in Ihren Clustern erstellen, ähnlich wie Sie Ihre Kubernetes-Arbeitslastressourcen wie Deployments und Services 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:

  1. GKE erstellt Knoten, die die N4-Maschinenserie verwenden.
  2. Wenn die N4-Maschinenserie nicht verfügbar ist, erstellt GKE stattdessen Knoten, die die N2-Maschinenserie verwenden.
  3. 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 Hardwareressourcen nicht verfügbar sind. Weitere Informationen zu allen verfügbaren Konfigurationen für Compute-Klassen finden Sie in der CustomResourceDefinition für Compute-Klassen.

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 Label cloud.google.com/compute-class aus.

Im folgenden Beispiel-Deployment-Manifest wird eine ComputeClass ausgewählt:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    matchLabels:
      app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      nodeSelector:
        # Replace with the name of a compute class
        cloud.google.com/compute-class: COMPUTE_CLASS 
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: "250m"
            memory: "1Gi"

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 ComputeClass angeben.

Knotenkonfiguration in Arbeitslastspezifikationen

Mit GKE Autopilot-Clustern und der automatischen Knotenbereitstellung in GKE Standard können Sie Knotenselektoren 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.

Compute-Klassen standardmäßig anwenden

Sie können GKE so konfigurieren, dass standardmäßig eine ComputeClass auf Pods angewendet wird, für die keine bestimmte ComputeClass ausgewählt ist. 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 für einen Cluster beschrieben:

Auswirkungen von Standard-ComputeClasses
Standardeinstellung auf Namespace-Ebene
  • GKE wendet die ComputeClass nur auf Pods in einem bestimmten Namespace an.
  • GKE ändert die Pods, um eine Knotenauswahl für die Standardklasse auf Namespace-Ebene hinzuzufügen.
  • GKE skaliert nur Knoten, die Knotenlabels und Knotenmarkierungen für diese Compute-Klasse haben, ähnlich wie bei jeder anderen Compute-Klasse.
  • GKE fügt den Knoten, die GKE für die Standardklasse auf Namespace-Ebene erstellt, Knotenlabels und Knotenmarkierungen hinzu.
Standard auf Clusterebene
  • GKE wendet die ComputeClass auf Pods in einem beliebigen Namespace an.
  • GKE wendet die ComputeClass nur auf Pods an, für die kein Selektor für eine ComputeClass vorhanden ist.
  • GKE ändert die Pod-Spezifikationen nicht, um eine Knotenauswahl für die Standardklasse auf Clusterebene hinzuzufügen.
  • GKE skaliert Knoten hoch, die eine der folgenden Bedingungen erfüllen:
    • Die Knoten haben keine Labels und Markierungen für eine andere Compute-Klasse.
    • Die Knoten haben das Knotenlabel cloud.google.com/compute-class: default.
  • GKE fügt den Knoten, die GKE für die Standardklasse auf Clusterebene erstellt, das Knotenlabel cloud.google.com/compute-class: default hinzu. GKE fügt diesen Knoten keine Knotenmarkierungen hinzu.
  • Wenn Sie einen Autopilot-Cluster so aktualisieren, dass er eine benutzerdefinierte Compute-Klasse als Standard auf Clusterebene verwendet, führt GKE Pods standardmäßig nicht auf der containeroptimierten Autopilot-Compute-Plattform aus. In GKE-Version 1.34.1-gke.1829001 und höher können Sie die Autopilot-Compute-Plattform für bestimmte Pods verwenden, indem Sie diesen Pods die Knotenauswahl cloud.google.com/compute-class: autopilot hinzufügen.

Wenn GKE eine Standard-ComputeClass auf Namespace-Ebene auf einen Pod anwendet, wird die Standard-ComputeClass auf Clusterebene für diesen Pod nicht aktiviert, da GKE dem Pod einen Knotenselektor für die Standardklasse auf Namespace-Ebene hinzufügt.

Aktive Migration in Standard-Compute-Klassen

Wenn für die ComputeClass, die Sie als Standard auf Namespace- oder Clusterebene verwenden, das Feld activeMigration.optimizeRulePriority auf true festgelegt ist, kann dies folgende Auswirkungen haben:

  • Standard-Compute-Klasse 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 einer stärkeren Unterbrechung der Arbeitslast führen.
  • Standard-Compute-Klasse auf Namespace-Ebene: Eine aktive Migration wird nicht ausgelöst, da GKE die Knotenauswahl der Compute-Klasse nur in neu erstellte Pods einfügt. Vorhandene Pods werden nicht automatisch mit dem Selektor neu erstellt.

Standard-ComputeClasses auf Clusterebene

Wenn Sie Standard-Compute-Klassen 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 ob 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 bestimmte Eigenschaften standardmäßig auf automatisch skalierten Knoten anwenden möchten, müssen Sie eine benutzerdefinierte ComputeClass mit dem Namen default bereitstellen.

Beachten Sie beim Konfigurieren der Standard-Compute-Klasse auf Clusterebene Folgendes:

  • Damit Pods nicht im Status Pending bleiben, setzen Sie das Feld spec.whenUnsatisfiable auf ScaleUpAnyway. 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 in der Standard-ComputeClass verwenden, legen Sie dieses Feld auf DoNotScaleUp fest.
  • Wenn Sie Änderungen an der default-ComputeClass einschränken möchten, verwenden Sie eine RBAC-ClusterRole, um die Vorgänge update, patch, delete und create für die ComputeClass-Ressource mit dem Namen default einzuschränken.
  • Wenn Sie die Standardparameter für die Knotenkonsolidierung des Cluster-Autoscalers ändern möchten, verwenden Sie das Feld spec.autoscalingPolicy in 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 Autoscaling-Parameter für die Knotenkonsolidierung festlegen.

Nächste Schritte