Consumo di risorse di zona prenotate


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

Assicurati di avere già familiarità con i concetti di prenotazioni di Compute Engine, come tipi di consumo, tipi di condivisione e tipi di provisioning. Per i dettagli, vedi Prenotazioni di risorse di zona di Compute Engine.

Questa pagina è rivolta alle seguenti persone:

  • Operatori di applicazioni che eseguono il deployment di workload che devono essere eseguiti il prima possibile, di solito 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 i requisiti dell'applicazione e dell'organizzazione.

Informazioni sul consumo delle prenotazioni in GKE

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

A seconda della modalità operativa di GKE, puoi utilizzare i seguenti tipi di prenotazione:

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

Per consentire alle prenotazioni di 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 nodeSelector di 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 computing personalizzate consentono agli amministratori della piattaforma di definire una gerarchia di configurazioni dei nodi che GKE deve dare la priorità durante lo scaling 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 quella classe di calcolo personalizzata indichi a GKE di utilizzare le prenotazioni specificate per quella classe di calcolo.

Per saperne di più, consulta la sezione Utilizzare le prenotazioni di Compute Engine nella pagina "Informazioni sulle classi di calcolo personalizzate".

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à, installala e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo gcloud components update.

Utilizzare le prenotazioni di capacità nei cluster Autopilot

I cluster Autopilot supportano l'utilizzo delle risorse dalle prenotazioni di 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 specifico e devi selezionare esplicitamente la prenotazione nel manifest. Se non specifichi esplicitamente una prenotazione, i cluster Autopilot non la utilizzeranno. Per scoprire di più sui tipi di utilizzo delle prenotazioni, consulta Come funzionano le prenotazioni.

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

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

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

Crea prenotazioni di capacità per Autopilot

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

  • Uno qualsiasi dei seguenti tipi di GPU:

    • nvidia-b200: NVIDIA B200 (180GB)
    • 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

  • Uno qualsiasi dei seguenti tipi di TPU:

    • tpu-v6e-slice: Sezione TPU v6e
    • tpu-v5p-slice: Sezione TPU v5p
    • tpu-v5-lite-podslice: TPU v5 lite podslice
    • tpu-v5-lite-device: TPU v5 lite device
    • tpu-v4-lite-device: Dispositivo TPU v4 lite
    • tpu-v4-podslice: PodSlice TPU v4
    • tpu-v3-device: dispositivo TPU v3
    • tpu-v3-slice: PodSlice TPU v3

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

GKE collega automaticamente tutti gli SSD locali della prenotazione specifica selezionata al tuo nodo. Non devi selezionare singoli SSD locali nel manifest del tuo workload. Ad esempio, se la prenotazione selezionata include due SSD locali, i nodi creati da GKE da questa prenotazione hanno due SSD locali collegati.

Consuma una prenotazione specifica nello stesso progetto in Autopilot

Questa sezione mostra come utilizzare una prenotazione di 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 contiene 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: 2
              memory: "4Gi"
    

    Sostituisci quanto segue:

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

    Acceleratori GPU

      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 di capacità di Compute Engine. Deve essere uno dei seguenti valori:
      • nvidia-b200: NVIDIA B200 (180GB)
      • 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 di capacità di Compute Engine.
    • QUANTITY: il numero di GPU da collegare al container. Deve essere una quantità supportata per la GPU specificata, come descritto in Quantità di GPU supportate.

    Acceleratori TPU

      apiVersion: v1
      kind: Pod
      metadata:
        name: specific-same-project-pod
      spec:
        nodeSelector:
          cloud.google.com/gke-tpu-accelerator: ACCELERATOR
          cloud.google.com/gke-tpu-topology: TOPOLOGY
          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:
              google.com/tpu: QUANTITY
    

    Sostituisci quanto segue:

    • ACCELERATOR: l'acceleratore che hai prenotato nella prenotazione di capacità di Compute Engine. Deve essere uno dei seguenti valori:
      • tpu-v6e-slice: Sezione TPU v6e
      • tpu-v5p-slice: Sezione TPU v5p
      • tpu-v5-lite-podslice: TPU v5 lite podslice
      • tpu-v5-lite-device: TPU v5 lite device
      • tpu-v4-lite-device: Dispositivo TPU v4 lite
      • tpu-v4-podslice: PodSlice TPU v4
      • tpu-v3-device: dispositivo TPU v3
      • tpu-v3-slice: PodSlice TPU v3
    • TOPOLOGY: la topologia TPU.
    • RESERVATION_NAME: il nome della prenotazione di capacità di Compute Engine.
    • QUANTITY: il numero di TPU da collegare al container. Deve essere allineato alla topologia TPU.
  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 inserire il pod.

Terraform

Per utilizzare una prenotazione specifica nello stesso progetto con istanze VM utilizzando Terraform, consulta il 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 Supporto di Terraform per GKE.

Consuma una prenotazione condivisa specifica in Autopilot

In questa sezione vengono utilizzati i seguenti termini:

  • Progetto proprietario: il progetto proprietario della prenotazione 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 proprietario. Segui questi passaggi:

  1. Crea un ruolo IAM personalizzato che contenga l'autorizzazione compute.reservations.list nel progetto 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 progetto del progetto proprietario della prenotazione di capacità.
  2. Concedi all'agente di servizio GKE nel progetto consumer l'accesso per elencare le prenotazioni condivise nel progetto 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 tuo progetto di consumo. Per trovare questo numero, consulta Identificazione dei progetti nella documentazione di Resource Manager.

  3. Salva il seguente manifest come shared-autopilot.yaml. Questo manifest contiene nodeSelector 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: 2
            memory: "4Gi"
    

    Sostituisci quanto segue:

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

    Acceleratori GPU

    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 di capacità di Compute Engine. Deve essere uno dei seguenti valori:
      • nvidia-b200: NVIDIA B200 (180GB)
      • 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 di capacità di Compute Engine.
    • OWNER_PROJECT_ID: l'ID progetto del progetto proprietario della prenotazione di capacità.
    • QUANTITY: il numero di GPU da collegare al container. Deve essere una quantità supportata per la GPU specificata, come descritto in Quantità di GPU supportate.

    Acceleratori TPU

    apiVersion: v1
    kind: Pod
    metadata:
      name: specific-shared-project-pod
    spec:
      nodeSelector:
        cloud.google.com/gke-tpu-accelerator: ACCELERATOR
        cloud.google.com/gke-tpu-topology: TOPOLOGY
        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:
            google.com/tpu: QUANTITY
    

    Sostituisci quanto segue:

    • ACCELERATOR: l'acceleratore che hai prenotato nella prenotazione di capacità di Compute Engine. Deve essere uno dei seguenti valori:
      • tpu-v6e-slice: Sezione TPU v6e
      • tpu-v5p-slice: Sezione TPU v5p
      • tpu-v5-lite-podslice: TPU v5 lite podslice
      • tpu-v5-lite-device: TPU v5 lite device
      • tpu-v4-lite-device: Dispositivo TPU v4 lite
      • tpu-v4-podslice: PodSlice TPU v4
      • tpu-v3-device: dispositivo TPU v3
      • tpu-v3-slice: PodSlice TPU v3
    • TOPOLOGY: la topologia TPU.
    • RESERVATION_NAME: il nome della prenotazione di capacità di Compute Engine.
    • OWNER_PROJECT_ID: l'ID progetto del progetto proprietario della prenotazione di capacità.
    • QUANTITY: il numero di TPU da collegare al container. Deve essere allineato alla topologia TPU.
  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 inserire il pod.

Consuma un blocco di prenotazioni specifico in Autopilot

Questa sezione mostra come utilizzare un blocco di prenotazione della capacità specifico che si trova nello stesso progetto del cluster o in un progetto condiviso. Questa funzionalità è disponibile solo per acceleratori specifici. Puoi utilizzare kubectl per configurare il pod in modo che utilizzi il blocco di prenotazione.

  1. Salva il seguente manifest come reservation-block-autopilot.yaml. Questo manifest contiene selettori di nodi che utilizzano una prenotazione specifica.

    Progetto locale

    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"
        cloud.google.com/reservation-blocks: RESERVATION_BLOCKS_NAME
      
      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 di capacità di Compute Engine. Deve essere uno dei seguenti valori:
      • nvidia-b200: NVIDIA B200 (180GB)
      • nvidia-h200-141gb: NVIDIA H200 (141GB)
    • RESERVATION_NAME: il nome della prenotazione di capacità di Compute Engine.
    • RESERVATION_BLOCKS_NAME: il nome del blocco di prenotazione della capacità di Compute Engine.
    • QUANTITY: il numero di GPU da collegare al container. Deve essere una quantità supportata per la GPU specificata, come descritto in Quantità di GPU supportate.

    Per le prenotazioni di proprietà di un progetto diverso, aggiungi cloud.google.com/reservation-project: OWNER_PROJECT_ID al campo spec.nodeSelector. Sostituisci OWNER_PROJECT_ID con l'ID progetto del progetto proprietario della prenotazione di capacità.

  2. Esegui il deployment del pod:

    kubectl apply -f reservation-block-autopilot.yaml
    

    Autopilot utilizza la capacità riservata nel blocco di prenotazione specificato per eseguire il provisioning di un nuovo nodo in cui inserire il pod.

Consuma un sottoblocco di prenotazione specifico in Autopilot

Questa sezione mostra come utilizzare un blocco secondario di prenotazione della capacità specifico che si trova nello stesso progetto del cluster o in un progetto condiviso.

  1. Salva il seguente manifest ComputeClass come reservation-sub-block-computeclass.yaml:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: specific-reservation-subblock
    spec:
      nodePoolAutoCreation:
        enabled: true
      priorities:
      - gpu:
          type: ACCELERATOR_TYPE
          count: ACCELERATOR_COUNT
        reservations:
          affinity: Specific
          specific:
          - name: RESERVATION_NAME
            project: RESERVATION_PROJECT_ID
            reservationBlock:
              name: RESERVATION_BLOCK_NAME
              reservationSubBlock:
                name: RESERVATION_SUB_BLOCK_NAME
    

    Sostituisci quanto segue:

    • ACCELERATOR_TYPE: l'acceleratore che hai prenotato nella prenotazione di capacità di Compute Engine. Questo valore deve essere nvidia-gb200.
    • ACCELERATOR_COUNT: il numero di acceleratori da collegare a ogni nodo. Questo valore deve essere una quantità supportata per il tipo di acceleratore specificato. Per ulteriori informazioni, vedi Quantità di GPU supportate.
    • RESERVATION_NAME: il nome della prenotazione di capacità di Compute Engine.
    • RESERVATION_PROJECT_ID: l'ID progetto del progetto proprietario della prenotazione di capacità.
    • RESERVATION_BLOCK_NAME: il nome del blocco di prenotazione della capacità di Compute Engine.
    • RESERVATION_SUB_BLOCK_NAME: il nome del sottoblocco di prenotazione di capacità di Compute Engine.
  2. Salva il seguente manifest del pod come reservation-sub-block-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: reservation-sub-block-pod
    spec:
      nodeSelector:
        cloud.google.com/compute-class: specific-reservation-subblock
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 12
            memory: "50Gi"
            ephemeral-storage: "200Gi"
          limits:
            nvidia.com/gpu: CONTAINER_GPU_COUNT
    

    Sostituisci CONTAINER_GPU_COUNT con il numero di GPU da allocare al container. Questo valore deve essere inferiore o uguale al numero di acceleratori che la classe di calcolo collega a ogni nodo.

  3. Esegui il deployment del pod:

    kubectl apply -f reservation-sub-block-pod.yaml
    

    Autopilot utilizza la capacità riservata nel sottoblocco di prenotazione specificato per eseguire il provisioning di un nuovo nodo per eseguire il pod.

Risoluzione dei problemi relativi all'utilizzo delle prenotazioni in Autopilot

  • Assicurati che i tipi di macchine, i tipi di acceleratori, le configurazioni SSD locali e le quantità di acceleratori corrispondano a ciò che i tuoi carichi di lavoro utilizzeranno. Per un elenco completo delle proprietà che devono corrispondere, vedi Proprietà della prenotazione di capacità di Compute Engine.
  • Assicurati che la prenotazione venga creata con un'affinità specifica.
  • Quando utilizzi le prenotazioni condivise, assicurati che l'agente di servizio GKE nel progetto consumer disponga dell'autorizzazione per elencare le prenotazioni condivise nel progetto 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 le 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 completamente il flag di affinità di prenotazione.

Nella modalità di consumo delle prenotazioni any, i nodi utilizzano prima la capacità di tutte le prenotazioni per un singolo progetto prima di utilizzare le prenotazioni condivise, perché le prenotazioni condivise sono più disponibili per altri progetti. Per saperne di più su come vengono consumate automaticamente le istanze, 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, il 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 l'esempio seguente:

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

Per creare un pool di nodi con tre nodi per utilizzare qualsiasi prenotazione corrispondente utilizzando Terraform, consulta l'esempio seguente:

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 Supporto di Terraform per GKE.

Utilizzo di una prenotazione specifica per un singolo progetto

Per utilizzare una prenotazione specifica, imposta il flag di affinità di 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 capacità sufficiente.

Per creare una prenotazione e istanze per consumare una prenotazione specifica, segui questi 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, fai riferimento all'esempio seguente:

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 specifica per un singolo progetto 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 Supporto di Terraform per GKE.

Utilizzo di una prenotazione condivisa specifica

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

  1. Segui i passaggi descritti in Consenti e limita la creazione e la modifica di prenotazioni condivise da parte dei progetti.

gcloud

  1. Crea 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 del progetto in cui vuoi creare questa prenotazione condivisa. Se ometti il flag --project, GKE utilizza il progetto corrente come progetto proprietario per impostazione predefinita.
    • CONSUMER_PROJECT_IDS: un elenco separato da virgole degli ID progetto dei progetti con cui vuoi condividere questa prenotazione. Ad esempio project-1,project-2. Puoi includere da 1 a 100 progetti consumer. Questi progetti devono appartenere alla stessa organizzazione del progetto proprietario. Non includere OWNER_PROJECT_ID, perché può utilizzare 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 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 utilizzare la prenotazione condivisa specifica 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 Supporto di Terraform per GKE.

Considerazioni aggiuntive per l'utilizzo di una prenotazione specifica

Quando viene creato un pool di nodi con un'affinità di prenotazione specifica, 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 estendersi su più zone. Poiché le prenotazioni sono monozonali, sono necessarie più prenotazioni. Per creare un pool di nodi che utilizzi una prenotazione specifica in questi cluster, devi creare una prenotazione specifica con esattamente lo stesso nome e le stesse proprietà della macchina in ogni zona del pool di nodi.
  • Scalabilità automatica del cluster e pool di nodi pool: se non disponi di capacità aggiuntiva nella prenotazione specifica, gli upgrade 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 associate.

Utilizzo delle prenotazioni GPU

Per creare un pool di nodi Standard che utilizza una prenotazione GPU o qualsiasi prenotazione in cui la capacità si trova in una singola zona, devi specificare il flag --node-locations quando aggiungi un pool di nodi. Quando crei un cluster Standard regionale o un cluster Standard multizona, specificare le posizioni dei nodi garantisce che GKE crei nodi solo in una zona in cui hai prenotato capacità GPU.

Per istruzioni dettagliate sulla creazione di un pool di nodi che utilizza le GPU, consulta Crea un node pool GPU.

Utilizzo delle prenotazioni TPU

Per creare un pool di nodi Standard che consumi una prenotazione TPU, devi specificare il flag --node-locations quando aggiungi un pool di nodi. Quando crei un cluster Standard regionale o un cluster Standard multizona, specificare le posizioni dei nodi garantisce che GKE crei nodi solo in una zona in cui hai prenotato capacità TPU.

Le prenotazioni TPU sono diverse da altri tipi di macchine. Di seguito sono riportati gli aspetti specifici delle TPU da considerare quando crei prenotazioni TPU:

  • Quando utilizzi le TPU in GKE, SPECIFIC è l'unico valore supportato per il flag --reservation-affinity.

Per istruzioni dettagliate sulla creazione di un pool di nodi che utilizza le TPU, consulta la sezione Crea un node pool TPU.

Creazione di nodi senza utilizzare le prenotazioni

Per evitare esplicitamente di utilizzare risorse da qualsiasi prenotazione, imposta l'affinità su --reservation-affinity=none.

  1. Crea un cluster che non utilizzerà 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.

Seguendo le prenotazioni disponibili tra le zone

Quando utilizzi i node pool 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, questi vengono creati nella zona che dispone ancora di prenotazioni inutilizzate.

Pulizia

Per evitare che al tuo account di 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 dei cluster:

    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