Consumo di risorse di zona prenotate


Questa pagina mostra come utilizzare le risorse di zona di Compute Engine riservate in workload GKE specifici. Queste prenotazioni della capacità ti offrono un alto livello di garanzia che hardware specifico sia disponibile per i tuoi carichi di lavoro.

Assicurati di conoscere già i concetti delle prenotazioni di Compute Engine, come i tipi di consumo, i tipi di condivisione e i tipi di provisioning. Per maggiori dettagli, consulta la pagina Prenotazioni di risorse di zona di Compute Engine.

Questa pagina è rivolta ai seguenti utenti:

  • Operatori di applicazioni che eseguono il deployment di carichi di lavoro che devono essere eseguiti il prima possibile, in genere con hardware specializzato come le GPU.
  • Amministratori della piattaforma che vogliono ottenere un elevato livello di garanzia che i carichi di lavoro vengano eseguiti su hardware ottimizzato che soddisfi sia i requisiti dell'applicazione sia quelli dell'organizzazione.

Informazioni sul consumo delle prenotazioni in GKE

Le prenotazioni della capacità di Compute Engine ti consentono di eseguire il provisioning di configurazioni hardware specifiche nelle Google Cloud zone, immediatamente o in un momento futuro specificato. Potrai quindi utilizzare questa capacità prenotata in GKE.

A seconda della modalità di funzionamento di GKE, puoi utilizzare i seguenti tipi di prenotazioni:

  • Modalità Autopilot: solo prenotazioni specifiche.
  • Modalità standard: prenotazioni specifiche o qualsiasi prenotazione corrispondente.

Per consentire l'utilizzo delle prenotazioni per creare le risorse, devi specificare un'affinità di prenotazione, ad esempio any o specific.

Opzioni di consumo delle prenotazioni in GKE

GKE ti consente di utilizzare le prenotazioni direttamente nei singoli workload utilizzando i selettori dei nodi Kubernetes nel manifest del workload o creando pool di nodi in modalità standard che utilizzano la prenotazione. Questa pagina descrive l'approccio di selezione diretta delle prenotazioni nelle singole risorse.

Puoi anche configurare GKE in modo che utilizzi le prenotazioni durante le operazioni di scalabilità che creano nuovi nodi utilizzando le classi di calcolo personalizzate. Le classi di calcolo personalizzate consentono agli amministratori della piattaforma di definire una gerarchia di configurazioni dei nodi per consentire a GKE di dare la priorità durante la scalabilità dei nodi in modo che i workload vengano eseguiti sull'hardware selezionato.

Puoi specificare le prenotazioni nella configurazione della classe di calcolo personalizzata in modo che qualsiasi carico di lavoro GKE che utilizza questa classe di calcolo personalizzata indichi a GKE di utilizzare le prenotazioni specificate per quella classe di calcolo.

Per scoprire di più, consulta la pagina "Informazioni sui classi di calcolo personalizzati", Utilizzare le prenotazioni di Compute Engine.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

  • Attiva l'API Google Kubernetes Engine.
  • Attiva l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo gcloud components update.

Utilizzare le prenotazioni della capacità nei cluster Autopilot

I cluster Autopilot supportano il consumo di risorse dalle prenotazioni della capacità di Compute Engine nello stesso progetto o in un progetto condiviso. Devi impostare la proprietà del tipo di consumo della prenotazione di destinazione su specifica e devi selezionare esplicitamente questa prenotazione nel manifest. Se non specifichi esplicitamente una prenotazione, i cluster Autopilot non consumeranno prenotazioni. Per scoprire di più sui tipi di consumo delle prenotazioni, consulta Come funzionano le prenotazioni.

Queste prenotazioni sono idonee per gli sconti per impegno di utilizzo flessibili di Compute. Per utilizzare le prenotazioni della capacità, devi utilizzare la classe di calcolo Accelerator o Performance.

  • Prima di iniziare, crea un cluster Autopilot che esegui le seguenti versioni:

    • Per utilizzare gli acceleratori riservati, ad esempio le GPU: 1.28.6-gke.1095000 o versioni successive
    • Per eseguire i pod su una serie di macchine specifica e con ogni pod su un proprio nodo: 1.28.6-gke.1369000 e versioni successive o 1.29.1-gke.1575000 e versioni successive.

Creare prenotazioni della capacità per Autopilot

I pod Autopilot possono utilizzare le prenotazioni con la proprietà del tipo di consumo specifica nello stesso progetto del cluster o in una prenotazione condivisa di un altro progetto. Puoi utilizzare l'hardware riservato facendo riferimento esplicitamente alla prenotazione nel manifest. Puoi utilizzare le prenotazioni in Autopilot per i seguenti tipi di hardware:

  • Uno dei seguenti tipi di GPU:
    • nvidia-h200-141gb: NVIDIA H200 (141GB)
    • nvidia-h100-mega-80gb: NVIDIA H100 Mega (80GB)
    • nvidia-h100-80gb: NVIDIA H100 (80GB)
    • nvidia-a100-80gb: NVIDIA A100 (80GB)
    • nvidia-tesla-a100: NVIDIA A100 (40GB)
    • nvidia-l4: NVIDIA L4
    • nvidia-tesla-t4: NVIDIA T4

Per creare una prenotazione della capacità, consulta le seguenti risorse. La prenotazione deve soddisfare i seguenti requisiti:

Utilizzare una prenotazione specifica nello stesso progetto in Autopilot

Questa sezione mostra come utilizzare una prenotazione della capacità specifica che si trova nello stesso progetto del cluster. Puoi utilizzare kubectl o Terraform.

kubectl

  1. Salva il seguente manifest come specific-autopilot.yaml. Questo manifest ha selettori di nodi che utilizzano una prenotazione specifica. Puoi utilizzare istanze VM o acceleratori.

    Istanze VM

      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-storage: "200Gi"
    

    Sostituisci quanto segue:

    • MACHINE_SERIES: una serie di macchine che contiene il tipo di macchina delle VM nella prenotazione della capacità specifica. Ad esempio, se la prenotazione riguarda c3-standard-4 tipi di macchine, specifica C3 nel MACHINE_SERIES campo.
    • RESERVATION_NAME: il nome della prenotazione della capacità di Compute Engine.

    Acceleratori

      apiVersion: v1
      kind: Pod
      metadata:
        name: specific-same-project-pod
      spec:
        nodeSelector:
          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-storage: "200Gi"
            limits:
              nvidia.com/gpu: QUANTITY
    

    Sostituisci quanto segue:

    • ACCELERATOR: l'acceleratore che hai prenotato nella prenotazione della capacità di Compute Engine. Deve essere uno dei seguenti valori:
      • nvidia-h200-141gb: NVIDIA H200 (141GB)
      • nvidia-h100-mega-80gb: NVIDIA H100 Mega (80GB)
      • nvidia-h100-80gb: NVIDIA H100 (80GB)
      • nvidia-a100-80gb: NVIDIA A100 (80GB)
      • nvidia-tesla-a100: NVIDIA A100 (40GB)
      • nvidia-l4: NVIDIA L4
      • nvidia-tesla-t4: NVIDIA T4
    • RESERVATION_NAME: il nome della prenotazione della capacità di Compute Engine.
    • QUANTITY: il numero di GPU da collegare al contenutore. Deve essere una quantità supportata per la GPU specificata, come descritto in Quantità di GPU supportate.
  2. Esegui il deployment del pod:

    kubectl apply -f specific-autopilot.yaml
    

Autopilot utilizza la capacità riservata nella prenotazione specificata per eseguire il provisioning di un nuovo nodo in cui posizionare il pod.

Terraform

Per utilizzare una prenotazione specifica nello stesso progetto con istanze VM utilizzando Terraform, fai riferimento al seguente esempio:

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
  ]
}

Per utilizzare una prenotazione specifica nello stesso progetto con la classe di calcolo Accelerator utilizzando Terraform, consulta il seguente esempio:

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
  ]
}

Per scoprire di più sull'utilizzo di Terraform, consulta Assistenza di Terraform per GKE.

Utilizzare una prenotazione condivisa specifica in Autopilot

Questa sezione utilizza i seguenti termini:

  • Progetto proprietario: il progetto proprietario della prenotazione e che la condivide con altri progetti.
  • Progetto consumer: il progetto che esegue i carichi di lavoro che utilizzano la prenotazione condivisa.

Per utilizzare una prenotazione condivisa, devi concedere all'agente di servizio GKE l'accesso alla prenotazione nel progetto che la possiede. Segui questi passaggi:

  1. Crea un ruolo IAM personalizzato che contenga l'autorizzazione compute.reservations.list nel progetto del proprietario:

    gcloud iam roles create ROLE_NAME \
        --project=OWNER_PROJECT_ID \
        --permissions='compute.reservations.list'
    

    Sostituisci quanto segue:

    • ROLE_NAME: un nome per il nuovo ruolo.
    • OWNER_PROJECT_ID: l'ID del progetto che possiede la prenotazione della capacità.
  2. Concedi all'agente di servizio GKE nel progetto consumer l'accesso per elencare le prenotazioni condivise nel progetto del proprietario:

    gcloud projects add-iam-policy-binding OWNER_PROJECT_ID \
        --project=OWNER_PROJECT_ID \
        --member=serviceAccount:service-CONSUMER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role='projects/OWNER_PROJECT_ID/roles/ROLE_NAME'
    

    Sostituisci CONSUMER_PROJECT_NUMBER con il numero numerico del progetto consumer. Per trovare questo numero, consulta Identificazione dei progetti nella documentazione di Resource Manager.

  3. Salva il seguente manifest come shared-autopilot.yaml. Questo manifest ha nodeSelectors che indicano a GKE di utilizzare una prenotazione condivisa specifica.

    Istanze VM

    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-storage: "200Gi"
    

    Sostituisci quanto segue:

    • MACHINE_SERIES: una serie di macchine che contiene il tipo di macchina delle VM nella prenotazione della capacità specifica. Ad esempio, se la prenotazione riguarda c3-standard-4 tipi di macchine, specifica C3 nel campo MACHINE_SERIES.
    • RESERVATION_NAME: il nome della prenotazione della capacità di Compute Engine.
    • OWNER_PROJECT_ID: l'ID del progetto che possiede la prenotazione della capacità.

    Acceleratori

    apiVersion: v1
    kind: Pod
    metadata:
      name: specific-same-project-pod
    spec:
      nodeSelector:
        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-storage: "200Gi"
          limits:
            nvidia.com/gpu: QUANTITY
    

    Sostituisci quanto segue:

    • ACCELERATOR: l'acceleratore che hai prenotato nella prenotazione della capacità di Compute Engine. Deve essere uno dei seguenti valori:
      • nvidia-h200-141gb: NVIDIA H200 (141GB)
      • nvidia-h100-mega-80gb: NVIDIA H100 Mega (80GB)
      • nvidia-h100-80gb: NVIDIA H100 (80GB)
      • nvidia-a100-80gb: NVIDIA A100 (80GB)
      • nvidia-tesla-a100: NVIDIA A100 (40GB)
      • nvidia-l4: NVIDIA L4
      • nvidia-tesla-t4: NVIDIA T4
    • RESERVATION_NAME: il nome della prenotazione della capacità di Compute Engine.
    • OWNER_PROJECT_ID: l'ID del progetto che possiede la prenotazione della capacità.
    • QUANTITY: il numero di GPU da collegare al contenutore. Deve essere una quantità supportata per la GPU specificata, come descritto in Quantità di GPU supportate.
  4. Esegui il deployment del pod:

    kubectl apply -f shared-autopilot.yaml
    

Autopilot utilizza la capacità riservata nella prenotazione specificata per eseguire il provisioning di un nuovo nodo in cui posizionare il pod.

Risolvere i problemi relativi all'utilizzo delle prenotazioni in Autopilot

  • Assicurati che i tipi di macchine, i tipi di acceleratori, le configurazioni delle SSD locali e le quantità di acceleratori corrispondano a quanto consumeranno i tuoi carichi di lavoro. Per un elenco completo delle proprietà che devono corrispondere, consulta le proprietà di prenotazione della capacità di Compute Engine.
  • Assicurati che la prenotazione sia creata con un'affinità specifica.
  • Quando utilizzi le prenotazioni condivise, assicurati che l'agente di servizio GKE nel progetto consumer abbia l'autorizzazione per elencare le prenotazioni condivise nel progetto del proprietario.

Utilizzo di istanze riservate in GKE Standard

Quando crei un cluster o un pool di nodi, puoi indicare la modalità di consumo della prenotazione specificando il flag --reservation-affinity.

Utilizzo di eventuali prenotazioni corrispondenti

Puoi creare una prenotazione e istanze per utilizzare qualsiasi prenotazione utilizzando gcloud CLI o Terraform.

gcloud

Per utilizzare automaticamente le prenotazioni corrispondenti, imposta il flag di affinità della prenotazione su --reservation-affinity=any. Poiché any è il valore predefinito definito in Compute Engine, puoi omettere del tutto il flag di affinità della prenotazione.

Nella modalità di consumo delle prenotazioni any, i nodi acquisiscono prima la capacità da tutte le prenotazioni di singoli progetti prima di qualsiasi prenotazione condivisa, perché le prenotazioni condivise sono più disponibili per altri progetti. Per saperne di più su come le istanze vengono consumate automaticamente, consulta Ordine di consumo.

  1. Crea una prenotazione di tre istanze VM:

    gcloud compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE --vm-count=3
    

    Sostituisci quanto segue:

    • RESERVATION_NAME: il nome della prenotazione da creare.
    • MACHINE_TYPE: il tipo di macchina (solo nome) da utilizzare per la prenotazione. Ad esempio: n1-standard-2.
  2. Verifica che la prenotazione sia stata creata correttamente:

    gcloud compute reservations describe RESERVATION_NAME
    
  3. Crea un cluster con un nodo per utilizzare qualsiasi prenotazione corrispondente:

    gcloud container clusters create CLUSTER_NAME \
        --machine-type=MACHINE_TYPE --num-nodes=1 \
        --reservation-affinity=any
    

    Sostituisci CLUSTER_NAME con il nome del cluster da creare.

  4. Crea un pool di nodi con tre nodi per utilizzare qualsiasi prenotazione corrispondente:

    gcloud container node-pools create NODEPOOL_NAME \
        --cluster CLUSTER_NAME --num-nodes=3 \
        --machine-type=MACHINE_TYPE --reservation-affinity=any
    

    Sostituisci NODEPOOL_NAME con il nome del pool di nodi da creare.

Il numero totale di nodi è quattro, che supera la capacità della prenotazione. Tre dei nodi utilizzano la prenotazione, mentre l'ultimo nodo preleva la capacità dal pool di risorse Compute Engine generale.

Terraform

Per creare una prenotazione di tre istanze VM utilizzando Terraform, consulta il seguente esempio:

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

  specific_reservation {
    count = 3

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

Per creare un cluster con un nodo per utilizzare qualsiasi prenotazione corrispondente utilizzando Terraform, consulta il seguente esempio:

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
}

Per creare un pool di nodi con tre nodi per utilizzare qualsiasi prenotazione corrispondente con Terraform, fai riferimento al seguente esempio:

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"
    }
  }
}

Per scoprire di più sull'utilizzo di Terraform, consulta Assistenza di Terraform per GKE.

Utilizzo di una prenotazione per un singolo progetto specifica

Per utilizzare una prenotazione specifica, imposta il flag di affinità della prenotazione su --reservation-affinity=specific e fornisci il nome della prenotazione specifica. In questa modalità, le istanze devono utilizzare la capacità della prenotazione specificata nella zona. La richiesta non va a buon fine se la prenotazione non ha una capacità sufficiente.

Per creare una prenotazione e istanze per utilizzare una prenotazione specifica, svolgi i seguenti passaggi. Puoi utilizzare gcloud CLI o Terraform.

gcloud

  1. Crea una prenotazione specifica per tre istanze VM:

    gcloud compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE --vm-count=3 \
        --require-specific-reservation
    

    Sostituisci quanto segue:

    • RESERVATION_NAME: il nome della prenotazione da creare.
    • MACHINE_TYPE: il tipo di macchina (solo nome) da utilizzare per la prenotazione. Ad esempio: n1-standard-2.
  2. Crea un pool di nodi con un singolo nodo per utilizzare una prenotazione specifica per un singolo progetto:

    gcloud container node-pools create NODEPOOL_NAME \
        --cluster CLUSTER_NAME \
        --machine-type=MACHINE_TYPE --num-nodes=1 \
        --reservation-affinity=specific --reservation=RESERVATION_NAME
    

    Sostituisci quanto segue:

    • NODEPOOL_NAME: il nome del pool di nodi da creare.
    • CLUSTER_NAME: il nome del cluster che hai creato.

Terraform

Per creare una prenotazione specifica utilizzando Terraform, consulta il seguente esempio:

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
}

Per creare un pool di nodi con un singolo nodo per utilizzare una prenotazione per un singolo progetto specifico utilizzando Terraform, consulta il seguente esempio:

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
  ]
}

Per scoprire di più sull'utilizzo di Terraform, consulta Assistenza di Terraform per GKE.

Utilizzo di una prenotazione condivisa specifica

Per creare una prenotazione condivisa specifica e utilizzarla, segui questi passaggi. Puoi utilizzare gcloud CLI o Terraform.

  1. Segui i passaggi descritti in Consentire e limitare la creazione e la modifica delle prenotazioni condivise da parte dei progetti.

gcloud

  1. Creare una prenotazione condivisa specifica:

    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
    

    Sostituisci quanto segue:

    • RESERVATION_NAME: il nome della prenotazione da creare.
    • MACHINE_TYPE: il nome del tipo di macchina da utilizzare per la prenotazione. Ad esempio: n1-standard-2.
    • OWNER_PROJECT_ID: l'ID progetto per il progetto per cui vuoi creare questa prenotazione condivisa. Se ometti il flag --project, GKE utilizza per impostazione predefinita il progetto corrente come progetto proprietario.
    • CONSUMER_PROJECT_IDS: un elenco separato da virgole degli ID progetto con cui vuoi condividere questa prenotazione. Ad esempio, project-1,project-2. Puoi includere da 1 a 100 progetti per consumatori. Questi progetti devono trovarsi nella stessa organizzazione del progetto proprietario. Non includere OWNER_PROJECT_ID, perché può consumare questa prenotazione per impostazione predefinita.
  2. Utilizza la prenotazione condivisa:

      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
    

    Sostituisci quanto segue:

    • NODEPOOL_NAME: il nome del pool di nodi da creare.
    • CLUSTER_NAME: il nome del cluster che hai creato.

Terraform

Per creare una prenotazione condivisa specifica con Terraform, consulta il seguente esempio:

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
}

Per utilizzare la prenotazione condivisa specifica con Terraform, consulta il seguente esempio:

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
  ]
}

Per scoprire di più sull'utilizzo di Terraform, consulta Assistenza di Terraform per GKE.

Considerazioni aggiuntive per l'utilizzo di una prenotazione specifica

Quando un pool di nodi viene creato con una specifica affinità di prenotazione, inclusi i pool di nodi predefiniti durante la creazione del cluster, le sue dimensioni sono limitate alla capacità della prenotazione specifica per l'intera durata del pool di nodi. Ciò influisce sulle seguenti funzionalità di GKE:

  • Cluster con più zone: nei cluster regionali o multizona, i nodi di un pool di nodi possono essere distribuiti su più zone. Poiché le prenotazioni sono monozonali, sono necessarie più prenotazioni. Per creare un pool di nodi che utilizza una prenotazione specifica in questi cluster, devi creare una prenotazione specifica con lo stesso nome e le stesse proprietà della macchina in ogni zona del pool di nodi.
  • Scalabilità automatica del cluster e upgrade dei pool di nodi: se non disponi di capacità aggiuntiva nella prenotazione specifica, gli upgrade dei pool di nodi o la scalabilità automatica del pool di nodi potrebbero non riuscire perché entrambe le operazioni richiedono la creazione di istanze aggiuntive. Per risolvere il problema, puoi modificare le dimensioni della prenotazione o liberare alcune delle risorse limitate.

Creazione di nodi senza utilizzare prenotazioni

Per evitare esplicitamente di consumare risorse da eventuali prenotazioni, imposta l'affinità su --reservation-affinity=none.

  1. Crea un cluster che non utilizzi alcuna prenotazione:

    gcloud container clusters create CLUSTER_NAME --reservation-affinity=none
    

    Sostituisci CLUSTER_NAME con il nome del cluster da creare.

  2. Crea un pool di nodi che non utilizzi alcuna prenotazione:

    gcloud container node-pools create NODEPOOL_NAME \
        --cluster CLUSTER_NAME \
        --reservation-affinity=none
    

    Sostituisci NODEPOOL_NAME con il nome del pool di nodi da creare.

Prenotazioni disponibili nelle zone successive

Quando utilizzi pool di nodi in esecuzione in più zone con prenotazioni non uguali tra le zone, puoi utilizzare il flag --location_policy=ANY. In questo modo, quando vengono aggiunti nuovi nodi al cluster, vengono creati nella zona che ha ancora prenotazioni non utilizzate.

Prenotazione TPU

Le prenotazioni delle TPU sono diverse da quelle di altri tipi di macchine. Di seguito sono riportati aspetti specifici delle TPU da considerare durante la creazione delle prenotazioni TPU:

  • Quando utilizzi le TPU in GKE, SPECIFIC è l'unico valore supportato per il flag --reservation-affinity di gcloud container node-pools create.

Per ulteriori informazioni, consulta Prenotazioni TPU.

Pulizia

Per evitare che al tuo account Fatturazione Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina:

  1. Elimina i cluster che hai creato eseguendo il seguente comando per ciascuno di essi:

    gcloud container clusters delete CLUSTER_NAME
    
  2. Elimina le prenotazioni che hai creato eseguendo il seguente comando per ciascuna prenotazione:

    gcloud compute reservations delete RESERVATION_NAME
    

Passaggi successivi