Questa pagina mostra come utilizzare le risorse di zona di Compute Engine riservate in carichi di lavoro GKE specifici. Queste prenotazioni di capacità ti offrono un alto livello di garanzia che l'hardware specifico sia disponibile per i tuoi workload.
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, consulta 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, 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 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: prenotazioni specifiche o qualsiasi prenotazione corrispondente utilizzando ComputeClasses personalizzate.
- Modalità standard: prenotazioni specifiche o qualsiasi prenotazione corrispondente.
Per any prenotazione corrispondente, puoi scegliere tra due comportamenti:
- Qualsiasi prenotazione corrispondente con fallback:tenta di utilizzare qualsiasi prenotazione corrispondente. Se non sono disponibili, viene eseguito il provisioning della capacità on demand standard.
- Qualsiasi prenotazione corrispondente senza riserva:tenta di utilizzare qualsiasi prenotazione corrispondente. Se non sono disponibili, il provisioning non va a buon fine senza eseguire il fallback alla capacità on demand.
Per attivare l'utilizzo delle prenotazioni per creare le risorse, devi specificare un'affinità di prenotazione, ad esempio any, any-reservation-then-fail 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 classi di computing personalizzate. Le classi di computing personalizzate consentono agli amministratori della piattaforma di definire una gerarchia di configurazioni dei nodi a cui GKE deve 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 computing personalizzata in modo che qualsiasi workload GKE che utilizza questa classe di computing personalizzata indichi a GKE di utilizzare le prenotazioni specificate per quella classe di computing.
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:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Per utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza
gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il comando
gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
Consuma 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. Puoi impostare la proprietà del tipo di consumo della prenotazione
di destinazione su specifico e selezionare esplicitamente la prenotazione nel
manifest. In alternativa, puoi utilizzare qualsiasi prenotazione corrispondente utilizzando ComputeClass personalizzate con l'affinità di prenotazione AnyBestEffort. Se non specifichi
esplicitamente una prenotazione o non configuri una ComputeClass personalizzata per utilizzarne una, i cluster Autopilot non utilizzeranno le prenotazioni. 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
Performance ComputeClass o Pod che richiedono acceleratori per utilizzare
le prenotazioni di capacità.
Per utilizzare qualsiasi prenotazione disponibile senza ricorrere alla capacità on demand, il cluster deve eseguire GKE 1.36.0-gke.3204000 o 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 o puoi utilizzare qualsiasi prenotazione corrispondente utilizzando ComputeClass personalizzate. Puoi utilizzare le prenotazioni in Autopilot per i seguenti tipi di hardware:
Uno dei seguenti tipi di GPU:
nvidia-gb200: NVIDIA GB200 (anteprima)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-rtx-pro-6000: NVIDIA RTX PRO 6000nvidia-l4: NVIDIA L4nvidia-tesla-t4: NVIDIA T4
Uno qualsiasi dei seguenti tipi di TPU:
tpu7x: Ironwood (TPU7x)tpu-v6e-slice: sezione TPU v6etpu-v5p-slice: sezione TPU v5ptpu-v5-lite-podslice: TPU v5 lite podslicetpu-v4-lite-device: Dispositivo TPU v4 litetpu-v4-podslice: PodSlice TPU v4tpu-v3-device: dispositivo TPU v3tpu-v3-slice: pod di pod TPU v3
Per creare una prenotazione di capacità, consulta le seguenti risorse. La prenotazione deve soddisfare i seguenti requisiti:
- I tipi di macchine, i tipi di acceleratori e le quantità di acceleratori corrispondono a ciò che i tuoi carichi di lavoro utilizzeranno.
La prenotazione utilizza il tipo di utilizzo specifico, a meno che tu non stia utilizzando una ComputeClass personalizzata per utilizzare qualsiasi prenotazione corrispondente. Ad esempio, in gcloud CLI, devi specificare il flag
--require-specific-reservationquando crei una prenotazione specifica.
GKE collega automaticamente al nodo le unità SSD locali della prenotazione specifica selezionata. Non è necessario selezionare singole unità SSD locali nel manifest del workload. Ad esempio, se la prenotazione selezionata include due SSD locali, i nodi creati da GKE da quella prenotazione avranno due SSD locali collegati.
Utilizza qualsiasi prenotazione corrispondente con fallback in Autopilot
Questa sezione mostra come configurare i workload Autopilot in modo da utilizzare qualsiasi prenotazione corrispondente con un fallback alla capacità on demand. A questo scopo, crea una ComputeClass personalizzata che specifichi l'affinità di prenotazione AnyBestEffort.
Salva il seguente manifest ComputeClass personalizzato come
any-reservation-cc.yaml:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: any-reservation spec: priorities: - reservations: affinity: AnyBestEffortCrea ComputeClass personalizzata:
kubectl apply -f any-reservation-cc.yamlSalva il seguente manifest del pod come
any-reservation-pod.yaml:apiVersion: v1 kind: Pod metadata: name: any-reservation-pod spec: nodeSelector: cloud.google.com/compute-class: any-reservation containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 2 memory: "4Gi"Esegui il deployment del pod:
kubectl apply -f any-reservation-pod.yaml
Consuma qualsiasi prenotazione corrispondente senza fallback in Autopilot
Questa sezione mostra come configurare i carichi di lavoro Autopilot in modo che utilizzino qualsiasi prenotazione corrispondente senza ricorrere alla capacità on demand se la prenotazione è esaurita. A questo scopo, crea una ComputeClass personalizzata che
specifichi l'affinità di prenotazione AnyThenFail e imposti il valore del
campo whenUnsatisfiable su DoNotScaleUp. Questa affinità di prenotazione richiede
GKE 1.36.0-gke.3204000 o versioni successive.
Salva il seguente manifest ComputeClass personalizzato come
any-then-fail-cc.yaml:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: any-then-fail spec: priorities: - reservations: affinity: AnyThenFail whenUnsatisfiable: DoNotScaleUpCrea ComputeClass personalizzata:
kubectl apply -f any-then-fail-cc.yamlSalva il seguente manifest del pod come
any-then-fail-pod.yaml:apiVersion: v1 kind: Pod metadata: name: any-then-fail-pod spec: nodeSelector: cloud.google.com/compute-class: any-then-fail containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 2 memory: "4Gi"Esegui il deployment del pod:
kubectl apply -f any-then-fail-pod.yaml
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
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 riguarda i tipi di macchinac3-standard-4, specificac3nel campoMACHINE_SERIES.RESERVATION_NAME: il nome della prenotazione della 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: QUANTITYSostituisci quanto segue:
ACCELERATOR: l'acceleratore che hai prenotato nella prenotazione di capacità di Compute Engine. Deve essere uno dei seguenti valori:nvidia-gb200: NVIDIA GB200 (anteprima)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-rtx-pro-6000: NVIDIA RTX PRO 6000nvidia-l4: NVIDIA L4nvidia-tesla-t4: NVIDIA T4
RESERVATION_NAME: il nome della 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.
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: QUANTITYSostituisci quanto segue:
ACCELERATOR: l'acceleratore che hai prenotato nella prenotazione di capacità di Compute Engine. Deve essere uno dei seguenti valori:tpu7x: Ironwood (TPU7x)tpu-v6e-slice: sezione TPU v6etpu-v5p-slice: sezione TPU v5ptpu-v5-lite-podslice: TPU v5 lite podslicetpu-v4-lite-device: Dispositivo TPU v4 litetpu-v4-podslice: PodSlice TPU v4tpu-v3-device: dispositivo TPU v3tpu-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.
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, consulta il seguente esempio:
Per utilizzare una prenotazione specifica nello stesso progetto utilizzando Terraform, consulta il seguente esempio:
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 che possiede la prenotazione e 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 specifica, configura le autorizzazioni di Identity and Access Management (IAM) in modo da consentire al service agent GKE del progetto consumer di accedere alla prenotazione nel progetto proprietario.
Completa i seguenti passaggi nel progetto proprietario della prenotazione condivisa:
Crea un ruolo IAM personalizzato che contenga l'autorizzazione
compute.reservations.listnel 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à.
Concedi al service agent 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_NUMBERcon il numero numerico del tuo progetto consumer. Per trovare questo numero, consulta Identifica i progetti nella documentazione di Resource Manager.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 macchinac3-standard-4, specificac3nel campoMACHINE_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: QUANTITYSostituisci quanto segue:
ACCELERATOR: l'acceleratore che hai prenotato nella prenotazione della capacità di Compute Engine. Deve essere uno dei seguenti valori:nvidia-gb200: NVIDIA GB200 (anteprima)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-rtx-pro-6000: NVIDIA RTX PRO 6000nvidia-l4: NVIDIA L4nvidia-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 della 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: QUANTITYSostituisci quanto segue:
ACCELERATOR: l'acceleratore che hai prenotato nella prenotazione di capacità di Compute Engine. Deve essere uno dei seguenti valori:tpu7x: Ironwood (TPU7x)tpu-v6e-slice: sezione TPU v6etpu-v5p-slice: sezione TPU v5ptpu-v5-lite-podslice: TPU v5 lite podslicetpu-v4-lite-device: Dispositivo TPU v4 litetpu-v4-podslice: PodSlice TPU v4tpu-v3-device: dispositivo TPU v3tpu-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 della capacità.QUANTITY: il numero di TPU da collegare al container. Deve essere allineato alla topologia TPU.
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.
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.
Salva il seguente manifest come
reservation-block-autopilot.yaml. Questo manifest contiene selettori di nodi che utilizzano una prenotazione specifica.Local Project
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: QUANTITYSostituisci 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. SostituisciOWNER_PROJECT_IDcon l'ID progetto del progetto proprietario della prenotazione di capacità.Esegui il deployment del pod:
kubectl apply -f reservation-block-autopilot.yamlAutopilot utilizza la capacità riservata nel blocco di prenotazione specificato per eseguire il provisioning di un nuovo nodo in cui inserire il pod.
Consuma un blocco secondario 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.
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_NAMESostituisci quanto segue:
ACCELERATOR_TYPE: l'acceleratore che hai prenotato nella prenotazione di capacità di Compute Engine. Questo valore deve esserenvidia-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 saperne di più, consulta Quantità di GPU supportate.RESERVATION_NAME: il nome della prenotazione della capacità di Compute Engine.RESERVATION_PROJECT_ID: l'ID progetto del progetto proprietario della prenotazione della 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.
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_COUNTSostituisci
CONTAINER_GPU_COUNTcon il numero di GPU da allocare al container. Questo valore deve essere inferiore o uguale al numero di acceleratori che la classe di computing collega a ogni nodo.Esegui il deployment del pod:
kubectl apply -f reservation-sub-block-pod.yamlAutopilot utilizza la capacità riservata nel blocco secondario di prenotazione specificato per eseguire il provisioning di un nuovo nodo per l'esecuzione del pod.
Risoluzione dei problemi relativi al consumo delle prenotazioni in Autopilot
- Assicurati che i tipi di macchine, i tipi di acceleratori, le configurazioni degli SSD locali e le quantità di acceleratori corrispondano a ciò che verrà utilizzato dai tuoi workload. 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, a meno che tu non stia utilizzando ComputeClasses personalizzate per utilizzare qualsiasi prenotazione corrispondente.
- Se hai utilizzato l'affinità di prenotazione
AnyBestEfforte la prenotazione non è stata utilizzata, GKE potrebbe aver eseguito il provisioning della capacità on demand in una zona diversa all'interno della regione. Per assicurarti di utilizzare la capacità prenotata, utilizza una prenotazione specifica. - Quando utilizzi le prenotazioni condivise, assicurati che il service agent GKE nel progetto consumer disponga dell'autorizzazione per elencare le prenotazioni condivise nel progetto proprietario.
Utilizzo delle istanze dedicate in GKE Standard
Quando crei un cluster o pool di nodi, puoi indicare la modalità di consumo della prenotazione specificando il flag --reservation-affinity.
Utilizzo di tutte le prenotazioni corrispondenti con fallback
Puoi creare una prenotazione e istanze per utilizzare qualsiasi prenotazione con un fallback alla capacità on demand 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à della prenotazione.
Nella modalità di utilizzo 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.
Crea una prenotazione di tre istanze VM:
gcloud compute reservations create RESERVATION_NAME \ --machine-type=MACHINE_TYPE --vm-count=3Sostituisci 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.
Verifica che la prenotazione sia stata creata correttamente:
gcloud compute reservations describe RESERVATION_NAMECrea 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=anySostituisci
CLUSTER_NAMEcon il nome del cluster da creare.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=anySostituisci
NODEPOOL_NAMEcon 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 prende la capacità dal pool di risorse generale di Compute Engine.
Terraform
Per creare una prenotazione di tre istanze VM utilizzando Terraform, consulta l'esempio seguente:
Per creare un cluster con un nodo per utilizzare qualsiasi prenotazione corrispondente utilizzando Terraform, consulta l'esempio seguente:
Per creare un pool di nodi con tre nodi per utilizzare qualsiasi prenotazione corrispondente utilizzando Terraform, consulta il seguente esempio:
Per scoprire di più sull'utilizzo di Terraform, consulta Supporto di Terraform per GKE.
Utilizzo di tutte le prenotazioni corrispondenti senza riserva
Per utilizzare qualsiasi prenotazione corrispondente senza ricorrere alla capacità on demand quando le prenotazioni sono esaurite, imposta il flag di affinità di prenotazione su --reservation-affinity=any-reservation-then-fail. Questa affinità di prenotazione
richiede GKE 1.36.0-gke.3204000 o
versioni successive.*
Crea una prenotazione di tre istanze VM:
gcloud compute reservations create RESERVATION_NAME \ --machine-type=MACHINE_TYPE --vm-count=3Sostituisci quanto segue:
RESERVATION_NAME: il nome della prenotazione da creare.MACHINE_TYPE: il tipo di macchina (solo nome) da utilizzare per la prenotazione, ad esempion1-standard-2.
Verifica che la prenotazione sia stata creata correttamente:
gcloud compute reservations describe RESERVATION_NAMECrea un cluster con un nodo e configura il nodo in modo che utilizzi qualsiasi prenotazione corrispondente senza fallback:
gcloud container clusters create CLUSTER_NAME \ --machine-type=MACHINE_TYPE --num-nodes=1 \ --reservation-affinity=any-reservation-then-failSostituisci
CLUSTER_NAMEcon il nome del cluster da creare.Crea un pool di nodi con tre nodi e configura questi nodi in modo che utilizzino qualsiasi prenotazione corrispondente senza fallback:
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME --num-nodes=3 \ --machine-type=MACHINE_TYPE \ --reservation-affinity=any-reservation-then-failSostituisci
NODEPOOL_NAMEcon il nome del node pool 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 non viene sottoposto al provisioning. GKE riconcilierà il pool di nodi per eseguire il provisioning dell'ultimo nodo finché non viene visualizzata una nuova capacità riservata o finché la capacità esistente non viene liberata.
Utilizzo di una prenotazione per un singolo progetto specifica
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 le istanze per consumare una prenotazione specifica, segui questi passaggi. Puoi utilizzare gcloud CLI o Terraform.
gcloud
Crea una prenotazione specifica per tre istanze VM:
gcloud compute reservations create RESERVATION_NAME \ --machine-type=MACHINE_TYPE --vm-count=3 \ --require-specific-reservationSostituisci 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.
Crea un pool di nodi con un singolo nodo per utilizzare una prenotazione per singolo progetto specifica:
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME \ --machine-type=MACHINE_TYPE --num-nodes=1 \ --reservation-affinity=specific --reservation=RESERVATION_NAMESostituisci 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 al seguente esempio:
Per creare un pool di nodi con un singolo nodo per utilizzare una prenotazione per singolo progetto specifica utilizzando Terraform, consulta il seguente esempio:
Per scoprire di più sull'utilizzo di Terraform, consulta Supporto di Terraform per GKE.
Utilizzo di una prenotazione condivisa specifica
Per utilizzare una prenotazione condivisa specifica, configura le autorizzazioni Identity and Access Management (IAM) per consentire all'agente di servizio GKE del progetto consumer di accedere alla prenotazione nel progetto proprietario.
Completa i seguenti passaggi nel progetto proprietario della prenotazione condivisa:
Crea un ruolo IAM personalizzato che contenga l'autorizzazione
compute.reservations.listnel 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à.
Concedi al service agent 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_NUMBERcon il numero numerico del tuo progetto consumer. Per trovare questo numero, consulta Identificazione dei progetti.
Per creare una prenotazione condivisa specifica e consumarla, segui questi passaggi. Puoi utilizzare gcloud CLI o Terraform.
- Segui i passaggi descritti in Gestire la creazione di prenotazioni condivise.
gcloud
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_IDSSostituisci 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 esempioproject-1,project-2. Puoi includere da 1 a 100 progetti consumer. Questi progetti devono appartenere alla stessa organizzazione del progetto proprietario. Non includereOWNER_PROJECT_ID, perché può utilizzare questa prenotazione per impostazione predefinita.
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_NAMESostituisci 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:
Per utilizzare la prenotazione condivisa specifica utilizzando Terraform, consulta il seguente esempio:
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 a zona singola, sono necessarie più prenotazioni. Per creare un pool di nodi che utilizzi 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 dei cluster e pool di nodi pool: se non hai capacità aggiuntiva nella prenotazione specifica, gli upgrade 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.
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, la specifica delle località dei nodi aiuta a garantire che GKE crei nodi solo in una zona in cui hai prenotato la capacità della GPU.
Per istruzioni dettagliate sulla creazione di un pool di nodi che utilizza GPU, consulta Crea un node pool GPU.
Utilizzo delle prenotazioni TPU
Per creare un pool di nodi Standard che utilizza una prenotazione TPU, devi specificare il flag --node-locations quando aggiungi un pool di nodi. Quando crei un cluster regionale Standard o un cluster multizona Standard, specificare le posizioni dei nodi consente di garantire che GKE crei nodi solo in una zona in cui hai riservato capacità TPU.
Le prenotazioni di TPU differiscono 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 Crea un pool di nodi TPU.
Creazione di nodi senza consumare prenotazioni
Per evitare esplicitamente di utilizzare risorse di qualsiasi prenotazione, imposta l'affinità
su --reservation-affinity=none.
Crea un cluster che non utilizzerà alcuna prenotazione:
gcloud container clusters create CLUSTER_NAME --reservation-affinity=noneSostituisci
CLUSTER_NAMEcon il nome del cluster da creare.Crea un pool di nodi che non utilizzi alcuna prenotazione:
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME \ --reservation-affinity=noneSostituisci
NODEPOOL_NAMEcon il nome del pool di nodi da creare.
Prenotazioni disponibili tra le zone
Quando utilizzi pool di nodi in esecuzione in più zone con prenotazioni non uguali tra le zone, puoi utilizzare il flag --location_policy=ANY. Questo
approccio contribuisce a garantire che quando vengono aggiunti nuovi nodi al cluster, questi vengano
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:
Elimina i cluster che hai creato eseguendo il seguente comando per ciascuno dei cluster:
gcloud container clusters delete CLUSTER_NAMEElimina le prenotazioni che hai creato eseguendo il seguente comando per ciascuna prenotazione:
gcloud compute reservations delete RESERVATION_NAME
Passaggi successivi
- Scopri di più sulla prenotazione delle risorse di zona di Compute Engine.
- Scopri di più sui node pool.
- Scopri di più sul gestore della scalabilità automatica dei cluster.
- Scopri di più sulle strategie di upgrade dei nodi.