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 L4nvidia-tesla-t4
: NVIDIA T4
Per creare una prenotazione della capacità, consulta le seguenti risorse. La prenotazione deve soddisfare i seguenti requisiti:
- I tipi di macchine, i tipi di acceleratore e le quantità di acceleratore corrispondono a quanto consumeranno i tuoi carichi di lavoro.
La prenotazione utilizza il tipo di consumo specifico. Ad esempio, nella CLI gcloud, devi specificare il flag
--require-specific-reservation
quando crei la prenotazione.
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
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 riguardac3-standard-4
tipi di macchine, specificaC3
nelMACHINE_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 L4nvidia-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.
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:
Per utilizzare una prenotazione specifica nello stesso progetto con la classe di calcolo Accelerator utilizzando Terraform, consulta il seguente esempio:
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:
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à.
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.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 riguardac3-standard-4
tipi di macchine, specificaC3
nel campoMACHINE_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 L4nvidia-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.
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.
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
.
Verifica che la prenotazione sia stata creata correttamente:
gcloud compute reservations describe RESERVATION_NAME
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.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:
Per creare un cluster con un nodo per utilizzare qualsiasi prenotazione corrispondente utilizzando Terraform, consulta il seguente esempio:
Per creare un pool di nodi con tre nodi per utilizzare qualsiasi prenotazione corrispondente con Terraform, fai riferimento al seguente esempio:
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
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
.
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:
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:
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.
- Segui i passaggi descritti in Consentire e limitare la creazione e la modifica delle prenotazioni condivise da parte dei progetti.
gcloud
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 includereOWNER_PROJECT_ID
, perché può consumare 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_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:
Per utilizzare la prenotazione condivisa specifica con Terraform, consulta il seguente esempio:
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
.
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.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
digcloud 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:
Elimina i cluster che hai creato eseguendo il seguente comando per ciascuno di essi:
gcloud container clusters delete CLUSTER_NAME
Elimina 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 a livello di zona di Compute Engine.
- Scopri di più sui pool di nodi.
- Scopri di più sul gestore della scalabilità automatica dei cluster.
- Scopri di più sulle strategie di upgrade dei nodi.