Sie können Compute Engine-Instanzen in einer bestimmten Zone reservieren, um sicherzustellen, dass bei Bedarf Ressourcen für ihre Arbeitslasten verfügbar sind. Weitere Informationen zum Verwalten von Reservierungen finden Sie unter Zonale Compute Engine-Ressourcen reservieren.
Nachdem Sie Reservierungen erstellt haben, können Sie die reservierten Ressourcen in GKE nutzen. GKE unterstützt dieselben Nutzungsmodi wie Compute Engine:
- Ressourcen aus beliebigen Reservierungen nutzen: Nur Standard
- Ressourcen aus einer bestimmten Reservierung nutzen: Standard und Autopilot
- Knoten ohne Nutzung von Reservierungen erstellen: Standard und Autopilot
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 diese Aufgabe 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.
Kapazitätsreservierungen in Autopilot-Clustern nutzen
Autopilot-Cluster unterstützen die Nutzung von Ressourcen aus bestimmten Compute Engine-Kapazitätsreservierungen im selben Projekt oder in einem freigegebenen Projekt. Sofern nicht ausdrücklich angegeben, nutzen Autopilot-Cluster keine Reservierungen. Diese Reservierungen gelten für Autopilot-Rabatte für zugesicherte Nutzung. Sie müssen die Compute-Klasse Accelerator
oder die Compute-Klasse Performance
verwenden, um Kapazitätsreservierungen zu nutzen.
Bevor Sie beginnen, erstellen Sie einen Autopilot-Cluster, auf dem die folgenden Versionen ausgeführt werden:
- So nutzen Sie reservierte Beschleuniger mit der Compute-Klasse Accelerator: 1.28.6-gke.1095000 oder höher
- So verwenden Sie die Computingklasse "Leistung": 1.28.6-gke.1369000 und höher oder Version 1.29.1-gke.1575000 und höher.
Kapazitätsreservierungen für Autopilot erstellen
Autopilot-Pods können bestimmte Reservierungen im selben Projekt wie der Cluster oder in einer freigegebenen Reservierung aus einem anderen Projekt nutzen. Sie können die reservierte Hardware nutzen, indem Sie in Ihrem Manifest explizit auf diese Reservierung verweisen. Sie können Reservierungen in Autopilot für die folgenden Hardwaretypen nutzen:
- Einer der folgenden GPU-Typen:
nvidia-h100-80gb
: NVIDIA H100 (80 GB) (nur mit Accelerator-Computing-Klasse verfügbar)nvidia-a100-80gb
: NVIDIA A100 (80 GB)nvidia-tesla-a100
: NVIDIA A100 (80 GB)nvidia-l4
; NVIDIA L4nvidia-tesla-t4
: NVIDIA T4
Informationen zum Erstellen einer Kapazitätsreservierung finden Sie in den folgenden Ressourcen. Achten Sie darauf, dass die Maschinentypen, Beschleunigertypen und Beschleunigermengen mit dem übereinstimmen, was Ihre Arbeitslasten verbrauchen werden.
Eine bestimmte Reservierung im selben Projekt in Autopilot verwenden
In diesem Abschnitt erfahren Sie, wie Sie eine bestimmte Kapazitätsreservierung nutzen, die sich im selben Projekt wie Ihr Cluster befindet. Sie können kubectl oder Terraform verwenden.
kubectl
Speichern Sie das folgende Manifest als
specific-autopilot.yaml
. Dieses Manifest hat Knotenselektoren, die eine bestimmte Reservierung nutzen. Sie können VM-Instanzen oder Beschleuniger verwenden.VM-Instanzen
apiVersion: v1 kind: Pod metadata: name: specific-same-project-pod spec: nodeSelector: cloud.google.com/compute-class: Performance cloud.google.com/machine-family: MACHINE_SERIES cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral: "200Gi"
Ersetzen Sie Folgendes:
MACHINE_SERIES
: eine Maschinenserie, die den Maschinentyp der VMs in Ihrer spezifischen Kapazitätsreservierung enthält. Wenn Ihre Reservierung beispielsweise fürc3-standard-4
-Maschinentypen gilt, geben SieC3
im FeldMACHINE_SERIES
an.RESERVATION_NAME
: der Name der Compute Engine-Kapazitätsreservierung
Beschleuniger
apiVersion: v1 kind: Pod metadata: name: specific-same-project-pod spec: nodeSelector: cloud.google.com/compute-class: "Accelerator" cloud.google.com/gke-accelerator: ACCELERATOR cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral: "200Gi" limits: nvidia.com/gpu: QUANTITY
Ersetzen Sie Folgendes:
ACCELERATOR
: der Beschleuniger, den Sie in der Compute Engine-Kapazitätsreservierung reserviert haben. Muss einer der folgenden Werte sein:nvidia-h100-80gb
: NVIDIA H100 (80 GB) (nur mit Accelerator-Computing-Klasse verfügbar)nvidia-a100-80gb
: NVIDIA A100 (80 GB)nvidia-tesla-a100
: NVIDIA A100 (80 GB)nvidia-l4
; NVIDIA L4nvidia-tesla-t4
: NVIDIA T4
RESERVATION_NAME
: der Name der Compute Engine-KapazitätsreservierungQUANTITY
: Die Anzahl der GPUs, die an den Container angehängt werden sollen. Muss eine unterstützte Menge für die angegebene GPU sein, wie unter Unterstützte GPU-Mengen beschrieben.
Stellen Sie den Pod bereit:
kubectl apply -f specific-autopilot.yaml
Autopilot verwendet die reservierte Kapazität in der angegebenen Reservierung, um einen neuen Knoten zum Platzieren des Pods bereitzustellen.
Terraform
Informationen zur Verwendung einer bestimmten Reservierung im selben Projekt mit VM-Instanzen mithilfe von Terraform finden Sie im folgenden Beispiel:
Informationen zur Verwendung einer bestimmten Reservierung im selben Projekt mit der Accelerator-Computing-Klasse mithilfe von Terraform finden Sie im folgenden Beispiel:
Weitere Informationen zur Verwendung von Terraform finden Sie unter Terraform-Unterstützung für GKE.
Eine bestimmte freigegebene Reservierung in Autopilot verwenden
In diesem Abschnitt werden die folgenden Begriffe verwendet:
- Inhaberprojekt: das Projekt, zu dem die Reservierung gehört, und sie für andere Projekte freigibt.
- Nutzerprojekt: das Projekt, das die Arbeitslasten ausführt, die die freigegebene Reservierung nutzen.
Zum Nutzen einer freigegebenen Reservierung müssen Sie dem GKE-Dienst-Agent Zugriff auf die Reservierung in dem Projekt gewähren, zu dem die Reservierung gehört. Gehen Sie dazu so vor:
Erstellen Sie eine benutzerdefinierte IAM-Rolle, die die Berechtigung
compute.reservations.list
im Inhaberprojekt enthält:gcloud iam roles create ROLE_NAME \ --project=OWNER_PROJECT_ID \ --permissions='compute.reservations.list'
Ersetzen Sie Folgendes:
ROLE_NAME
ist ein Name für die neue Rolle.OWNER_PROJECT_ID
: die Projekt-ID des Projekts, zu dem die Kapazitätsreservierung gehört.
Gewähren Sie dem GKE-Dienst-Agent im Nutzerprojekt Zugriff auf die freigegebene Reservierung im Inhaberprojekt:
gcloud compute reservations add-iam-policy-binding RESERVATION_NAME \ --project=OWNER_PROJECT_ID \ --zone=ZONE \ --member=service-CONSUMER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \ --role='roles/ROLE_NAME'
Ersetzen Sie
CONSUMER_PROJECT_NUMBER
durch die numerische Projektnummer Ihres Nutzerprojekts. Diese Nummer finden Sie in der Resource Manager-Dokumentation unter Projekte identifizieren.Speichern Sie das folgende Manifest als
shared-autopilot.yaml
. Dieses Manifest enthält nodeSelectors, die GKE anweisen, eine bestimmte freigegebene Reservierung zu nutzen.VM-Instanzen
apiVersion: v1 kind: Pod metadata: name: performance-pod spec: nodeSelector: cloud.google.com/compute-class: Performance cloud.google.com/machine-family: MACHINE_SERIES cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-project: OWNER_PROJECT_ID cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral: "200Gi"
Ersetzen Sie Folgendes:
MACHINE_SERIES
: eine Maschinenserie, die den Maschinentyp der VMs in Ihrer spezifischen Kapazitätsreservierung enthält. Wenn Ihre Reservierung beispielsweise fürc3-standard-4
-Maschinentypen gilt, geben SieC3
im FeldMACHINE_SERIES
an.RESERVATION_NAME
: der Name der Compute Engine-KapazitätsreservierungOWNER_PROJECT_ID
: die Projekt-ID des Projekts, zu dem die Kapazitätsreservierung gehört.
Beschleuniger
apiVersion: v1 kind: Pod metadata: name: specific-same-project-pod spec: nodeSelector: cloud.google.com/compute-class: "Accelerator" cloud.google.com/gke-accelerator: ACCELERATOR cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-project: OWNER_PROJECT_ID cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral: "200Gi" limits: nvidia.com/gpu: QUANTITY
Ersetzen Sie Folgendes:
ACCELERATOR
: der Beschleuniger, den Sie in der Compute Engine-Kapazitätsreservierung reserviert haben. Dies muss einer der folgenden Werte sein:nvidia-h100-80gb
: NVIDIA H100 (80 GB) (nur mit Accelerator-Computing-Klasse verfügbar)nvidia-a100-80gb
: NVIDIA A100 (80 GB)nvidia-tesla-a100
: NVIDIA A100 (80 GB)nvidia-l4
; NVIDIA L4nvidia-tesla-t4
: NVIDIA T4
RESERVATION_NAME
: der Name der Compute Engine-KapazitätsreservierungOWNER_PROJECT_ID
: die Projekt-ID des Projekts, zu dem die Kapazitätsreservierung gehört.QUANTITY
: Die Anzahl der GPUs, die an den Container angehängt werden sollen. Muss eine unterstützte Menge für die angegebene GPU sein, wie unter Unterstützte GPU-Mengen beschrieben.
Stellen Sie den Pod bereit:
kubectl apply -f shared-autopilot.yaml
Autopilot verwendet die reservierte Kapazität in der angegebenen Reservierung, um einen neuen Knoten zum Platzieren des Pods bereitzustellen.
Reservierte Instanzen in GKE Standard nutzen
Sie können den Nutzungsmodus für die Reservierung mit dem Flag --reservation-affinity
angeben, wenn Sie einen Cluster oder Knotenpool erstellen.
Jede übereinstimmende Reservierung nutzen
Sie können eine Reservierung und Instanzen erstellen, um jede Reservierung mit der gcloud CLI oder Terraform zu nutzen.
gcloud
Wenn Sie automatisch jede übereinstimmende Reservierung nutzen möchten, setzen Sie das Flag für die Reservierungsaffinität auf --reservation-affinity=any
. Da any
der in Compute Engine definierte Standardwert ist, können Sie das Flag für die Reservierungsaffinität vollständig weglassen.
Im Nutzungsmodus any
für die Reservierung nutzen Knoten zuerst die Kapazität aus allen Reservierungen für ein Einzelprojekt, bevor freigegebene Reservierungen verwendet werden, da die freigegebenen Reservierungen für andere Projekte besser verfügbar sind. Weitere Informationen zur automatischen Nutzung von Instanzen finden Sie unter Nutzungsreihenfolge.
Erstellen Sie eine Reservierung von drei VM-Instanzen:
gcloud compute reservations create RESERVATION_NAME \ --machine-type=MACHINE_TYPE --vm-count=3
Ersetzen Sie Folgendes:
RESERVATION_NAME
: der Name der Reservierung, die erstellt werden soll.MACHINE_TYPE
ist der für die Reservierung zu verwendende Maschinentyp (nur Name). Beispiel:n1-standard-2
Prüfen Sie, ob die Reservierung erfolgreich erstellt wurde:
gcloud compute reservations describe RESERVATION_NAME
Erstellen Sie einen Cluster mit einem Knoten, der eine beliebige übereinstimmende Reservierung nutzt:
gcloud container clusters create CLUSTER_NAME \ --machine-type=MACHINE_TYPE --num-nodes=1 \ --reservation-affinity=any
Ersetzen Sie
CLUSTER_NAME
durch den Namen des zu erstellenden Clusters.Erstellen Sie einen Knotenpool mit drei Knoten, der eine beliebige übereinstimmende Reservierung nutzt:
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME --num-nodes=3 \ --machine-type=MACHINE_TYPE --reservation-affinity=any
Ersetzen Sie
NODEPOOL_NAME
durch den Namen des zu aktualisierenden Knotenpools.
Die Gesamtzahl der Knoten beträgt vier, was die Kapazität der Reservierung übersteigt. Drei der Knoten nutzen die Reservierung, während der letzte Knoten Kapazität aus dem allgemeinen Compute Engine-Ressourcenpool nimmt.
Terraform
Informationen zum Erstellen einer Reservierung von drei VM-Instanzen mit Terraform finden Sie im folgenden Beispiel:
Informationen zum Erstellen eines Clusters mit einem Knoten, der eine beliebige übereinstimmende Reservierung mit Terraform nutzt, finden Sie im folgenden Beispiel:
Informationen zum Erstellen eines Knotenpools mit drei Knoten, der eine beliebige übereinstimmende Reservierung mit Terraform nutzt, finden Sie im folgenden Beispiel:
Weitere Informationen zur Verwendung von Terraform finden Sie unter Terraform-Unterstützung für GKE.
Eine bestimmte Reservierung für ein einzelnes Projekt nutzen
Wenn Sie eine bestimmte Reservierung nutzen möchten, setzen Sie das Reservierungsaffinitäts-Flag auf --reservation-affinity=specific
und geben Sie den spezifischen Reservierungsnamen an. In diesem Modus müssen Instanzen Kapazität aus der angegebenen Reservierung in der Zone nutzen. Die Anfrage schlägt fehl, wenn die Reservierung nicht über ausreichende Kapazität verfügt.
Führen Sie die folgenden Schritte aus, um eine Reservierung und Instanzen zu erstellen, die eine bestimmte Reservierung nutzen: Sie können die gcloud CLI oder Terraform verwenden.
gcloud
Erstellen Sie eine bestimmte Reservierung von drei VM-Instanzen:
gcloud compute reservations create RESERVATION_NAME \ --machine-type=MACHINE_TYPE --vm-count=3 \ --require-specific-reservation
Ersetzen Sie Folgendes:
RESERVATION_NAME
: der Name der Reservierung, die erstellt werden soll.MACHINE_TYPE
ist der für die Reservierung zu verwendende Maschinentyp (nur Name). Beispiel:n1-standard-2
Erstellen Sie einen Knotenpool mit einem einzelnen Knoten, der eine bestimmte Reservierung für ein einzelnes Projekt nutzt:
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME \ --machine-type=MACHINE_TYPE --num-nodes=1 \ --reservation-affinity=specific --reservation=RESERVATION_NAME
Ersetzen Sie Folgendes:
NODEPOOL_NAME
: Der Name des Knotenpools, der erstellt werden soll.CLUSTER_NAME
: Der Name des von Ihnen erstellten Clusters.
Terraform
Informationen zum Erstellen einer bestimmten Reservierung mit Terraform finden Sie im folgenden Beispiel:
Informationen zum Erstellen eines Knotenpools mit einem einzelnen Knoten, der eine bestimmte Reservierung für ein einzelnes Projekt mit Terraform nutzt, finden Sie im folgenden Beispiel:
Weitere Informationen zur Verwendung von Terraform finden Sie unter Terraform-Unterstützung für GKE.
Eine bestimmte freigegebene Reservierung nutzen
Führen Sie die folgenden Schritte aus, um eine bestimmte freigegebene Reservierung zu erstellen und zu nutzen. Sie können die gcloud CLI oder Terraform verwenden.
- Führen Sie die Schritte unter Erstellen und Ändern von freigegebenen Reservierungen für Projekte zulassen und beschränken aus.
gcloud
Erstellen Sie eine bestimmte freigegebene Reservierung:
gcloud compute reservations create RESERVATION_NAME \ --machine-type=MACHINE_TYPE --vm-count=3 \ --zone=ZONE \ --require-specific-reservation \ --project=OWNER_PROJECT_ID \ --share-setting=projects \ --share-with=CONSUMER_PROJECT_IDS
Ersetzen Sie Folgendes:
RESERVATION_NAME
: der Name der Reservierung, die erstellt werden soll.MACHINE_TYPE
: der Name des Maschinentyps, der für die Reservierung verwendet werden soll. Beispiel:n1-standard-2
OWNER_PROJECT_ID
: Die Projekt-ID des Projekts, das diese freigegebene Reservierung erstellen darf. Wenn Sie das Flag--project
weglassen, verwendet GKE standardmäßig das aktuelle Projekt als Inhaberprojekt.CONSUMER_PROJECT_IDS
: eine durch Kommas getrennte Liste der Projekt-IDs von Projekten, für die Sie diese Reservierung freigeben möchten. Beispiel:project-1,project-2
. Sie können 1 bis 100 Nutzerprojekte hinzufügen. Diese Projekte müssen sich in derselben Organisation wie das Inhaberprojekt befinden. Geben Sie nicht dieOWNER_PROJECT_ID
an, da sie diese Reservierung standardmäßig nutzen kann.
Nutzen Sie die freigegebene Reservierung:
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME \ --machine-type=MACHINE_TYPE --num-nodes=1 \ --reservation-affinity=specific \ --reservation=projects/OWNER_PROJECT_ID/reservations/RESERVATION_NAME
Ersetzen Sie Folgendes:
NODEPOOL_NAME
: Der Name des Knotenpools, der erstellt werden soll.CLUSTER_NAME
: Der Name des von Ihnen erstellten Clusters.
Terraform
Informationen zum Erstellen einer bestimmten freigegebenen Reservierung mit Terraform finden Sie im folgenden Beispiel:
Informationen zur Verwendung der spezifischen freigegebenen Reservierung mit Terraform finden Sie im folgenden Beispiel:
Weitere Informationen zur Verwendung von Terraform finden Sie unter Terraform-Unterstützung für GKE.
Weitere wichtige Aspekte der Nutzung einer bestimmten Reservierung
Wenn ein Knotenpool mit einer Affinität zu einer bestimmten Reservierung erstellt wird, einschließlich Standardknotenpools während der Clustererstellung, ist seine Größe über die gesamte Lebensdauer des Knotenpools auf die Kapazität der spezifischen Reservierung beschränkt. Dies betrifft die folgenden GKE-Features:
- Cluster mit mehreren Zonen: In regionalen oder multizonalen Clustern können sich Knoten eines Knotenpools über mehrere Zonen erstrecken. Da Reservierungen immer in nur einer Zone liegen, sind mehrere Reservierungen erforderlich. Wenn Sie einen Knotenpool erstellen möchten, der eine bestimmte Reservierung in diesen Clustern nutzt, müssen Sie in jeder Zone des Knotenpools eine bestimmte Reservierung mit exakt demselben Namen und denselben Maschineneigenschaften erstellen.
- Cluster-Autoscaling und Knotenpool-Upgrades: Wenn Sie in der spezifischen Reservierung keine zusätzliche Kapazität haben, schlagen Knotenpool-Upgrades oder die automatische Skalierung des Knotenpools möglicherweise fehl, da beide Vorgänge das Erstellen zusätzlicher Instanzen erfordern. Dieses Problem können Sie so beheben: Ändern Sie die Größe der Reservierung oder geben Sie einige von deren gebundenen Ressourcen frei.
Knoten ohne Nutzung von Reservierungen erstellen
Wenn Sie die Nutzung von Ressourcen aus Reservierungen explizit verhindern möchten, setzen Sie die Affinität auf --reservation-affinity=none
.
Erstellen Sie einen Cluster, der keine Reservierung nutzt:
gcloud container clusters create CLUSTER_NAME --reservation-affinity=none
Ersetzen Sie
CLUSTER_NAME
durch den Namen des zu erstellenden Clusters.Erstellen Sie einen Knotenpool, der keine Reservierung nutzt:
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME \ --reservation-affinity=none
Ersetzen Sie
NODEPOOL_NAME
durch den Namen des zu aktualisierenden Knotenpools.
Verfügbare Reservierungen zwischen Zonen
Wenn Sie Knotenpools verwenden, die in mehreren Zonen mit Reservierungen ausgeführt werden, die nicht zwischen Zonen übereinstimmen, können Sie das Flag --location_policy=ANY
verwenden. Dadurch wird sichergestellt, dass neue Knoten, die dem Cluster hinzugefügt werden, in der Zone erstellt werden, die noch nicht verwendete Reservierungen hat.
TPU-Reservierung
TPU-Reservierungen unterscheiden sich von anderen Maschinentypen. Die folgenden TPU-spezifischen Aspekte sollten Sie beim Erstellen von TPU-Reservierungen berücksichtigen:
- Wenn Sie TPUs in GKE verwenden, ist
SPECIFIC
der einzige unterstützte Wert für das Flag--reservation-affinity
vongcloud container node-pools create
. - TPU-Reservierungen können nicht projektübergreifend freigegeben werden.
Weitere Informationen finden Sie unter TPU-Reservierungen.
Bereinigen
So vermeiden Sie, dass Ihrem Cloud-Rechnungskonto die auf dieser Seite verwendeten Ressourcen in Rechnung gestellt werden:
Löschen Sie die erstellten Cluster mit dem folgenden Befehl für jeden Cluster:
gcloud container clusters delete CLUSTER_NAME
Löschen Sie die von Ihnen erstellten Reservierungen mit dem folgenden Befehl für jede Reservierung:
gcloud compute reservations delete RESERVATION_NAME
Nächste Schritte
- Zonale Compute Engine-Ressourcen reservieren
- Knotenpools
- Cluster Autoscaler
- Weitere Informationen zu Knotenupgrade-Strategien