Autopilot-Arbeitslasten in GKE Standard-Clustern ausführen


Clusteradministratoren und Anwendungsoperatoren können die Vorteile von Google Kubernetes Engine (GKE) Autopilot, wie Preise und vorkonfigurierte Einstellungen, in Clustern im Standardmodus nutzen. Auf dieser Seite wird beschrieben, wie Sie ComputeClasses verwenden, um eine Autopilot-Arbeitslast in einem Standardcluster bereitzustellen. Sie sollten mit den folgenden Konzepten vertraut sein:

Autopilot-Compute-Klassen

GKE bietet benutzerdefinierte Kubernetes-Ressourcen mit dem Namen ComputeClasses, die wie alle anderen Kubernetes-Ressourcen in Ihrem Cluster bereitgestellt werden können. Eine ComputeClass definiert eine Liste von Knotenkonfigurationen, z. B. Maschinentypen oder Spot-VMs. Sie können Compute-Klassen in Ihren Arbeitslasten auswählen. Dadurch wird GKE mitgeteilt, dass für alle neuen Knoten eine der Konfigurationen in dieser Liste verwendet werden soll.

Wenn für eine Arbeitslast eine ComputeClass ausgewählt wird, für die das Feld autopilot aktiviert ist, führt GKE die Pods im Autopilot-Modus aus. Die von GKE erstellten Knoten werden von Google verwaltet und enthalten viele der standardmäßigen Autopilot-Funktions- und Sicherheitseinstellungen. Weitere Informationen zu den Auswirkungen der Ausführung einer Autopilot-Arbeitslast in Ihren Standardclustern, einschließlich der Unterschiede, die Sie bei der Bereitstellung dieser Arbeitslasten möglicherweise bemerken, finden Sie unter Autopilot-Modus-Arbeitslasten in GKE Standard.

Arten von Autopilot-Compute-Klassen

GKE bietet integrierte Autopilot-ComputeClasses, die Sie für die meisten Arbeitslasten für allgemeine Zwecke verwenden können. Sie können auch eine neue oder vorhandene benutzerdefinierte ComputeClass für die Verwendung des Autopilot-Modus konfigurieren. Welche Art von Autopilot-ComputeClass Sie verwenden, hängt davon ab, ob Ihre Arbeitslasten bestimmte Hardware benötigen:

  • Arbeitslasten für allgemeine Zwecke: Verwenden Sie eine der integrierten Autopilot-ComputeClasses, mit denen Pods auf der containeroptimierten Compute-Plattform platziert werden.
  • Arbeitslasten, die bestimmte Hardware erfordern: Aktivieren Sie den Autopilot-Modus für eine beliebige benutzerdefinierte Compute-Klasse, stellen Sie diese Compute-Klasse im Cluster bereit und wählen Sie sie in Ihren Arbeitslasten aus.

Weitere Informationen zu diesen Optionen, wann sie verwendet werden sollten und zu den Preisen für die einzelnen Optionen finden Sie unter Hardwareauswahl in Autopilot ComputeClasses.

Preise

Die Preise für GKE Autopilot gelten für die Arbeitslasten und Knoten, die eine Autopilot-Compute-Klasse verwenden. Das anwendbare Abrechnungsmodell hängt davon ab, ob Sie eine integrierte Autopilot-Compute-Klasse oder eine benutzerdefinierte Autopilot-Compute-Klasse verwenden. Weitere Informationen finden Sie unter Preise im Abschnitt „Informationen zu Autopilot-Modus-Arbeitslasten in GKE Standard“.

Hinweise

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

  • Aktivieren Sie die Google Kubernetes Engine API.
  • Google Kubernetes Engine API aktivieren
  • Wenn Sie die Google Cloud CLI für diesen Task verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit gcloud components update ab.
  • Verwenden Sie einen GKE-Standardcluster, auf dem Version 1.33.1-gke.1107000 oder höher ausgeführt wird und der im Rapid-Releasekanal registriert ist. Informationen zum Erstellen eines neuen Clusters finden Sie unter Regionalen Cluster erstellen.
  • Informationen zu den Anforderungen und Sicherheitsbeschränkungen von Autopilot finden Sie unten. Weitere Informationen finden Sie unter Vordefinierte Einstellungen für Autopilot-Knoten.

Voraussetzungen

  • Mindestens ein Knotenpool im Cluster darf keine Knotenmarkierungen haben.

    Dieser Knotenpool ist erforderlich, um GKE Standard-System-Pods auszuführen, die aufgrund der Markierungen, die GKE diesen Knoten hinzufügt, nicht auf Autopilot-Knoten in Standardclustern ausgeführt werden können.

  • Shielded GKE-Knoten sind erforderlich und standardmäßig aktiviert.

  • Sie müssen einen VPC-nativen Cluster verwenden.

Beschränkungen

  • Es wird nur der Schnellauslösekanal unterstützt.
  • Wenn Sie vorhandene ComputeClass-Ressourcen im Cluster so aktualisieren möchten, dass der Autopilot-Modus verwendet wird, müssen Sie die ComputeClass mit einer aktualisierten Spezifikation neu erstellen. Weitere Informationen finden Sie unter Autopilot für eine vorhandene benutzerdefinierte Compute-Klasse aktivieren.
  • Sie können die Prioritätsregel podFamily nicht in Ihren eigenen ComputeClasses verwenden. Diese Regel ist nur in integrierten Autopilot-ComputeClasses verfügbar.
  • Die integrierten Autopilot-ComputeClasses unterstützen nicht die Aktivierung von Confidential GKE Nodes für Ihren gesamten Cluster. Wenn Sie Confidential GKE Nodes für den Cluster aktivieren, bleiben alle neuen Pods, die die integrierten Autopilot-Compute-Klassen auswählen, auf unbestimmte Zeit im Status Pending.

Erforderliche Rollen und Berechtigungen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Kubernetes Engine-Entwickler (roles/container.developer) für Ihren Cluster oder Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Bereitstellen von ComputeClasses benötigen . Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Autopilot-ComputeClass in einer Arbeitslast auswählen

Wenn Sie eine Autopilot-ComputeClass in einer Arbeitslast auswählen möchten, verwenden Sie einen Knotenselektor für das Label cloud.google.com/compute-class. Dies ist dasselbe Label, das Sie zum Auswählen einer beliebigen anderen Compute-Klasse in GKE verwenden. In den folgenden Schritten wird gezeigt, wie Sie ein Beispiel-Deployment erstellen, das eine Compute-Klasse auswählt, und wie Sie prüfen, ob die Pods im Autopilot-Modus ausgeführt werden:

  1. Speichern Sie das folgende Beispiel-Deployment als autopilot-cc-deployment.yaml:

    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: "4Gi"

    Ersetzen Sie COMPUTE_CLASS durch den Namen der zu verwendenden Compute-Klasse. Dieser Wert kann einer der folgenden sein:

  2. Arbeitslast bereitstellen:

    kubectl apply -f autopilot-cc-deployment.yaml
    
  3. So prüfen Sie, ob die Pods Autopilot verwenden:

    kubectl get pods -l=app=hello -o wide
    

    Die Ausgabe sieht etwa so aus:

    NAME                       READY   STATUS    RESTARTS   AGE     IP             NODE                                         NOMINATED NODE   READINESS GATES
    helloweb-79b9f6f75-5wwc9   1/1     Running   0          152m    10.102.1.135   gk3-cluster-1-nap-10abc8ya1-f66c6cef-wg5g   <none>           <none>
    helloweb-79b9f6f75-9skb9   1/1     Running   0          4d3h    10.102.0.140   gk3-cluster-1-nap-10abc8ya1-632bac02-hjl6   <none>           <none>
    helloweb-79b9f6f75-h7bdv   1/1     Running   0          152m    10.102.1.137   gk3-cluster-1-nap-10abc8ya1-f66c6cef-wg5g   <none>           <none>
    

    In dieser Ausgabe gibt das Präfix gk3- in der Spalte Knoten an, dass der Knoten von Autopilot verwaltet wird.

Benutzerdefinierte Autopilot-Compute-Klasse konfigurieren

Sie können benutzerdefinierte Compute-Klassen für die Verwendung von Autopilot konfigurieren. Verwenden Sie eine benutzerdefinierte Autopilot-ComputeClass, wenn für Ihre Arbeitslasten bestimmte Hardware wie GPUs oder eine bestimmte Compute Engine-Maschinenserie erforderlich ist, damit sie optimal ausgeführt werden können.

Wenn für Ihre Arbeitslasten keine spezielle Hardware erforderlich ist, empfehlen wir, stattdessen eine der integrierten Autopilot-Compute-Klassen zu verwenden. Informationen zum Auswählen einer integrierten Autopilot-ComputeClass finden Sie im vorherigen Abschnitt Autopilot-ComputeClass in einer Arbeitslast auswählen.

Neue benutzerdefinierte Autopilot-ComputeClass erstellen

  1. Speichern Sie das folgende Beispielmanifest für ComputeClass als autopilot-n2-class.yaml:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: autopilot-n2-class
    spec:
      autopilot:
        enabled: true
      priorities:
      - machineFamily: n2
        spot: true
        minCores: 64
      - machineFamily: n2
        spot: true
      - machineFamily: n2
        spot: false
      activeMigration:
        optimizeRulePriority: true
      whenUnsatisfiable: DoNotScaleUp
    

    Dieses Manifest enthält die folgenden Felder:

    • autopilot: Aktiviert den Autopilot-Modus für die ComputeClass. Wenn Sie dieses Feld in einer ComputeClass angeben, die Sie in einem Autopilot-Cluster bereitstellen, wird es von GKE ignoriert.
    • priorities: Definiert ein Array mit drei verschiedenen Konfigurationen der N2-Maschinenfamilie.
    • activeMigration: Ermöglicht GKE, Pods zu Konfigurationen zu migrieren, die in der Prioritätenliste weiter oben stehen, wenn Ressourcen verfügbar werden.
    • whenUnsatisfiable: Der Wert von DoNotScaleUp in diesem Feld macht es für GKE erforderlich, eine der Regeln im Feld priorities für neue Knoten zu verwenden. Wenn keine dieser Prioritätsregeln erfüllt werden kann, belässt GKE den Pod im Status Pending, bis Ressourcen verfügbar sind. DoNotScaleUp ist der Standardwert und der empfohlene Wert für dieses Feld.
  2. Stellen Sie die ComputeClass bereit:

    kubectl apply -f autopilot-n2-class.yaml
    
  3. Prüfen Sie, ob die ComputeClass vorhanden ist:

    kubectl get computeclasses
    

    Die Ausgabe sieht etwa so aus:

    NAME                  AGE
    autopilot-n2-class    3s
    

Autopilot für eine vorhandene benutzerdefinierte Compute-Klasse aktivieren

Sie können Autopilot in vorhandenen benutzerdefinierten ComputeClasses aktivieren, die sich in einem Standardcluster befinden und für die das Feld nodePoolAutoCreation.enabled in der Spezifikation auf true festgelegt ist. Das Aktivieren von Autopilot in einer Compute-Klasse, die sich in einem Autopilot-Cluster befindet, hat keine Auswirkungen, da der gesamte Cluster den Autopilot-Modus verwendet.

Nachdem Sie Autopilot für eine vorhandene ComputeClass aktiviert haben, verwendet GKE Autopilot, um neue Pods auszuführen, die die ComputeClass auswählen. Wenn Sie vorhandene Pods auf Standardknoten haben, die die Autopilot-ComputeClass auswählen, verwenden diese Pods Autopilot nur, wenn sie neu erstellt werden.

So aktualisieren Sie eine vorhandene benutzerdefinierte ComputeClass für die Verwendung des Autopilot-Modus:

  1. Aktualisieren Sie die Manifestdatei für Ihre vorhandene ComputeClass in einem Texteditor, um das Feld spec.autopilot hinzuzufügen:

    spec:
      autopilot:
        enabled: true
    
  2. Ersetzen Sie die vorhandene ComputeClass-Ressource in der Kubernetes API durch die aktualisierte Spezifikation:

    kubectl replace --force -f PATH_TO_UPDATED_MANIFEST
    

    Ersetzen Sie PATH_TO_UPDATED_MANIFEST durch den Pfad zu Ihrer aktualisierten Manifestdatei.

  3. Wenn Sie die Erstellung neuer Knoten auslösen möchten, müssen Sie alle Arbeitslasten neu erstellen, die die Compute-Klasse verwenden.

Nachdem Sie das aktualisierte Manifest angewendet haben, verwenden alle neuen Knoten, die GKE für diese ComputeClass erstellt, Autopilot. GKE ändert keine vorhandenen Knoten, die vor dem Update erstellt wurden.

Prüfen, ob Ihre Arbeitslast Autopilot verwendet

  • Rufen Sie mit dem Befehl kubectl get eine Liste der Pods in Ihrem Cluster ab:

    kubectl get pods --output=custom-columns=Pod:.metadata.name,Node:.spec.nodeName
    

    Die Ausgabe sieht etwa so aus:

    Pod                         Node
    helloweb-84c865764b-nzhxt   gk3-cluster-1-pool-3-68fc8dca-t54b
    # lines omitted for clarity
    

    Das Präfix gk3- im Knotennamen gibt an, dass der Pod im Autopilot-Modus ausgeführt wird.

Standardmäßig eine Autopilot-ComputeClass anwenden

In GKE können Sie eine ComputeClass als Standard für einen Namespace festlegen. Die Standardklasse des Namespace gilt für alle Pods in diesem Namespace, für die nicht explizit eine andere ComputeClass ausgewählt wird. Wenn Sie eine Autopilot-ComputeClass als Standard festlegen, können Sie alle Pods in einem Namespace standardmäßig im Autopilot-Modus ausführen, sofern für die Arbeitslast keine andere Option ausgewählt wird.

Weitere Informationen finden Sie unter Standard-ComputeClass für einen Namespace konfigurieren.

Nächste Schritte