Reservierte zonale Ressourcen nutzen


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 L4
    • nvidia-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

  1. 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ür c3-standard-4-Maschinentypen gilt, geben Sie C3 im Feld MACHINE_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 L4
      • nvidia-tesla-t4: NVIDIA T4
    • RESERVATION_NAME: der Name der Compute Engine-Kapazitätsreservierung
    • 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.
  2. 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:

resource "kubernetes_pod_v1" "default_pod" {
  metadata {
    name = "specific-same-project-pod"
  }

  spec {
    node_selector = {
      "cloud.google.com/compute-class"        = "Performance"
      "cloud.google.com/machine-family"       = "c3"
      "cloud.google.com/reservation-name"     = google_compute_reservation.specific_pod.name
      "cloud.google.com/reservation-affinity" = "specific"
    }

    container {
      name  = "my-container"
      image = "registry.k8s.io/pause"

      resources {
        requests = {
          cpu               = 2
          memory            = "8Gi"
          ephemeral-storage = "1Gi"
        }
      }

      security_context {
        allow_privilege_escalation = false
        run_as_non_root            = false

        capabilities {
          add  = []
          drop = ["NET_RAW"]
        }
      }
    }

    security_context {
      run_as_non_root     = false
      supplemental_groups = []

      seccomp_profile {
        type = "RuntimeDefault"
      }
    }
  }

  depends_on = [
    google_compute_reservation.specific_pod
  ]
}

Informationen zur Verwendung einer bestimmten Reservierung im selben Projekt mit der Accelerator-Computing-Klasse mithilfe von Terraform finden Sie im folgenden Beispiel:

resource "kubernetes_pod_v1" "default_accelerator" {
  metadata {
    name = "specific-same-project-accelerator"
  }

  spec {
    node_selector = {
      "cloud.google.com/compute-class"        = "Accelerator"
      "cloud.google.com/gke-accelerator"      = "nvidia-l4"
      "cloud.google.com/reservation-name"     = google_compute_reservation.specific_accelerator.name
      "cloud.google.com/reservation-affinity" = "specific"
    }

    container {
      name  = "my-container"
      image = "registry.k8s.io/pause"

      resources {
        requests = {
          cpu               = 2
          memory            = "7Gi"
          ephemeral-storage = "1Gi"
          "nvidia.com/gpu"  = 1

        }
        limits = {
          "nvidia.com/gpu" = 1
        }
      }

      security_context {
        allow_privilege_escalation = false
        run_as_non_root            = false

        capabilities {
          add  = []
          drop = ["NET_RAW"]
        }
      }
    }

    security_context {
      run_as_non_root     = false
      supplemental_groups = []

      seccomp_profile {
        type = "RuntimeDefault"
      }
    }
  }

  depends_on = [
    google_compute_reservation.specific_accelerator
  ]
}

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:

  1. 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.
  2. 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.

  3. 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ür c3-standard-4-Maschinentypen gilt, geben Sie C3 im Feld MACHINE_SERIES an.
    • RESERVATION_NAME: der Name der Compute Engine-Kapazitätsreservierung
    • OWNER_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 L4
      • nvidia-tesla-t4: NVIDIA T4
    • RESERVATION_NAME: der Name der Compute Engine-Kapazitätsreservierung
    • OWNER_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.
  4. 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.

  1. 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
  2. Prüfen Sie, ob die Reservierung erfolgreich erstellt wurde:

    gcloud compute reservations describe RESERVATION_NAME
    
  3. 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.

  4. 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:

resource "google_compute_reservation" "any_reservation" {
  name = "any-reservation"
  zone = "us-central1-a"

  specific_reservation {
    count = 3

    instance_properties {
      machine_type = "e2-medium"
    }
  }
}

Informationen zum Erstellen eines Clusters mit einem Knoten, der eine beliebige übereinstimmende Reservierung mit Terraform nutzt, finden Sie im folgenden Beispiel:

resource "google_container_cluster" "default" {
  name     = "gke-standard-zonal-cluster"
  location = "us-central1-a"

  initial_node_count = 1

  node_config {
    machine_type = "e2-medium"

    reservation_affinity {
      consume_reservation_type = "ANY_RESERVATION"
    }
  }

  depends_on = [
    google_compute_reservation.any_reservation
  ]

  # Set `deletion_protection` to `true` will ensure that one cannot
  # accidentally delete this instance by use of Terraform.
  deletion_protection = false
}

Informationen zum Erstellen eines Knotenpools mit drei Knoten, der eine beliebige übereinstimmende Reservierung mit Terraform nutzt, finden Sie im folgenden Beispiel:

resource "google_container_node_pool" "any_node_pool" {
  name     = "gke-standard-zonal-any-node-pool"
  cluster  = google_container_cluster.default.name
  location = google_container_cluster.default.location

  initial_node_count = 3
  node_config {
    machine_type = "e2-medium"

    reservation_affinity {
      consume_reservation_type = "ANY_RESERVATION"
    }
  }
}

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

  1. 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
  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:

resource "google_compute_reservation" "specific_reservation" {
  name = "specific-reservation"
  zone = "us-central1-a"

  specific_reservation {
    count = 1

    instance_properties {
      machine_type = "e2-medium"
    }
  }

  specific_reservation_required = true
}

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:

resource "google_container_node_pool" "specific_node_pool" {
  name     = "gke-standard-zonal-specific-node-pool"
  cluster  = google_container_cluster.default.name
  location = google_container_cluster.default.location

  initial_node_count = 1
  node_config {
    machine_type = "e2-medium"

    reservation_affinity {
      consume_reservation_type = "SPECIFIC_RESERVATION"
      key                      = "compute.googleapis.com/reservation-name"
      values                   = [google_compute_reservation.specific_reservation.name]
    }
  }

  depends_on = [
    google_compute_reservation.specific_reservation
  ]
}

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.

  1. Führen Sie die Schritte unter Erstellen und Ändern von freigegebenen Reservierungen für Projekte zulassen und beschränken aus.

gcloud

  1. 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 die OWNER_PROJECT_ID an, da sie diese Reservierung standardmäßig nutzen kann.
  2. 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:

resource "google_compute_reservation" "specific_reservation" {
  name = "specific-reservation"
  zone = "us-central1-a"

  specific_reservation {
    count = 1

    instance_properties {
      machine_type = "e2-medium"
    }
  }

  specific_reservation_required = true
}

Informationen zur Verwendung der spezifischen freigegebenen Reservierung mit Terraform finden Sie im folgenden Beispiel:

resource "google_container_node_pool" "specific_node_pool" {
  name     = "gke-standard-zonal-specific-node-pool"
  cluster  = google_container_cluster.default.name
  location = google_container_cluster.default.location

  initial_node_count = 1
  node_config {
    machine_type = "e2-medium"

    reservation_affinity {
      consume_reservation_type = "SPECIFIC_RESERVATION"
      key                      = "compute.googleapis.com/reservation-name"
      values                   = [google_compute_reservation.specific_reservation.name]
    }
  }

  depends_on = [
    google_compute_reservation.specific_reservation
  ]
}

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.

  1. 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.

  2. 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 von gcloud 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:

  1. Löschen Sie die erstellten Cluster mit dem folgenden Befehl für jeden Cluster:

    gcloud container clusters delete CLUSTER_NAME
    
  2. 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