Questo documento spiega come creare un gruppo di istanze gestite (MIG) che utilizza VM spot.
Le VM spot sono istanze di macchina virtuale (VM) che puoi ottenere a un prezzo molto scontato. Tuttavia, Compute Engine può arrestare o eliminare le VM spot in qualsiasi momento per recuperare capacità. Utilizza le VM spot per eseguire carichi di lavoro a tolleranza di errore, come job di elaborazione batch o applicazioni stateless, a un costo ridotto.
Per altri metodi che puoi utilizzare per creare i MIG, vedi Scenari di base per la creazione di un gruppo di istanze gestite.
Prima di iniziare
- Scopri di più sulle VM spot, in particolare sulle limitazioni.
- Verifica di disporre di una quota sufficiente per le risorse che vuoi richiedere. Per ulteriori informazioni, consulta Quote di allocazione.
-
Prima di creare VM spot per un carico di lavoro, completa i seguenti passaggi:
Configura il workload per gestire la preemption. In particolare, ti consigliamo di preparare uno script per gestire il prerilascio che viene eseguito nell'ambito del carico di lavoro o che è un file che puoi aggiungere nei metadati della VM per l'esecuzione durante l'arresto. Per istruzioni, consulta Gestire il prerilascio delle VM spot.
Ti consigliamo vivamente di visualizzare i dati per le VM spot per scegliere un tipo di macchina e una località. Se selezioni un tipo di macchina e una località con una maggiore disponibilità di risorse, puoi aumentare le probabilità di evitare errori di disponibilità delle risorse e di avere un uptime più lungo prima del preempt.
Per i dati storici sui prezzi e sul prerilascio, particolarmente utili per la pianificazione dei workload a lungo termine, consulta Visualizzare il tasso di prerilascio e i dati sui prezzi per le VM spot.
Per i dati di disponibilità attuali, particolarmente utili immediatamente prima di creare VM spot per carichi di lavoro a breve termine, consulta Visualizzare la disponibilità delle VM spot.
-
Se non l'hai ancora fatto, configura l'autenticazione.
L'autenticazione verifica la tua identità per l'accesso ad API e servizi Google Cloud . Per eseguire
codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su
Compute Engine selezionando una delle seguenti opzioni:
Seleziona la scheda relativa a come prevedi di utilizzare i campioni in questa pagina:
Console
Quando utilizzi la console Google Cloud per accedere ai servizi Google Cloud e alle API, non devi configurare l'autenticazione.
gcloud
-
Installa Google Cloud CLI. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il comando seguente:
gcloud initSe utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
- Imposta una regione e una zona predefinite.
REST
Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.
Installa Google Cloud CLI.
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
Per saperne di più, consulta Autenticati per usare REST nella documentazione sull'autenticazione di Google Cloud .
Ruoli obbligatori
Per ottenere le autorizzazioni
necessarie per creare gruppi di istanze gestite che utilizzano VM spot,
chiedi all'amministratore di concederti il ruolo IAM Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) sul progetto.
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Questo ruolo predefinito contiene le autorizzazioni necessarie per creare gruppi di istanze gestite che utilizzano VM spot. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
Per creare gruppi di istanze gestite che utilizzano VM spot sono necessarie le seguenti autorizzazioni:
-
Per creare un template di istanza:
compute.instanceTemplates.createsul progetto -
Per creare un MIG:
compute.instanceGroupManagers.createsul progetto
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Crea un MIG che utilizza VM spot
Per creare un MIG che utilizza VM spot, devi completare i seguenti passaggi:
Crea un modello di istanza configurato per la creazione di VM spot
Per creare un template di istanza configurato per la creazione di VM spot, seleziona una delle seguenti opzioni:
Console
Nella console Google Cloud , vai alla pagina Template di istanza.
Fai clic su Crea template di istanza. Viene visualizzata la pagina Crea un template di istanza.
Nel campo Nome, inserisci un nome per il template di istanza.
Nella sezione Località, seleziona il tipo di template di istanza da creare:
Per un template di istanza regionale, seleziona Regionale e poi la regione in cui creare il template. In base al tipo di macchina che vuoi che utilizzino le tue VM spot, specifica una regione supportata.
Per un template di istanza globale, seleziona Globale.
Nella sezione Configurazione macchina, seleziona una serie di macchine supportata per le VM Spot.
Nella sezione Modello di provisioning, segui questi passaggi:
Nell'elenco Modello di provisioning delle VM, seleziona Spot. La sezione Impostazioni avanzate del modello di provisioning delle VM si espande.
Nell'elenco Durata avviso di preemption, seleziona un'opzione in base a come vuoi gestire la preemption.
Se selezioni 120 secondi (opzione consigliata), assicurati di gestire il prerilascio all'interno del tuo workload prima di creare una VM spot. Ad esempio, verifica che il tuo workload includa uno script per salvare i progressi che attende l'esecuzione fino al rilevamento del preempt.
Se selezioni 0 secondi (valore predefinito), assicurati di gestire il prerilascio utilizzando uno script di arresto. Prima di creare una VM spott, crea un file che contenga uno script di arresto che salvi i tuoi progressi quando l'arresto è causato da preemption. Allega questo script di arresto come spiegato in un passaggio successivo.
Per specificare se arrestare o eliminare le VM spot in caso di prerilascio, seleziona una delle seguenti opzioni nell'elenco Alla terminazione della VM:
Per arrestare le VM spot, seleziona Arresta.
Per eliminare le VM spot, seleziona Elimina.
Per aggiungere uno script di arresto, completa i seguenti passaggi. Se hai selezionato 0 secondi (impostazione predefinita) per la Durata della notifica di prerilascio, questo passaggio è necessario per gestire il prerilascio. In caso contrario, se hai selezionato 120 secondi, questo passaggio è facoltativo.
- Espandi la sezione Opzioni avanzate.
- Espandi la sezione Gestione.
- Nella sezione Metadati, fai clic su Aggiungi elemento.
- Nel campo Chiave, inserisci
shutdown-scriptper la chiave dei metadati. - Nel campo Valore, aggiungi i contenuti di uno script di arresto che gestisce la preemption.
(Facoltativo) Per modificare il tipo o l'immagine del disco di avvio predefinito, fai clic su Modifica nella sezione Disco di avvio. Dopodiché, segui le istruzioni per modificare il disco di avvio.
Fai clic su Crea.
gcloud
Per creare un template di istanza configurato per la creazione di
VM spot, utilizza il
comando gcloud compute instance-templates create.
Il seguente comando crea un template di istanza regionale. Se vuoi
creare un template di istanza globale, utilizza lo stesso comando senza il
flag --instance-template-region.
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
--image-project=IMAGE_PROJECT \
--image-family=IMAGE_FAMILY \
--instance-template-region=REGION \
--instance-termination-action=TERMINATION_ACTION \
--machine-type=MACHINE_TYPE \
--provisioning-model=SPOT \
--preemption-notice-duration=PREEMPTION_NOTICE_DURATION \
--metadata shutdown-script=SHUTDOWN_SCRIPT
Sostituisci quanto segue:
INSTANCE_TEMPLATE_NAME: il nome del template di istanza da creareIMAGE_PROJECT: il progetto immagine che contiene l'immagine, ad esempiodebian-cloud. Per saperne di più sui progetti di immagini supportati, vedi Immagini pubbliche.IMAGE_FAMILY: una famiglia di immagini. In questo modo, viene specificata l'immagine del sistema operativo più recente e non deprecata. Ad esempio, se specifichidebian-12, viene utilizzata l'ultima versione della famiglia di immagini Debian 12. Per ulteriori informazioni sull'utilizzo delle famiglie di immagini, consulta le rispettive best practice.REGION: la regione in cui creare il template di istanza. In base al tipo di macchina che vuoi che utilizzino le VM spot, specifica una regione supportata.TERMINATION_ACTION: indica se Compute Engine interrompe o elimina le VM spot al prerilascio. Devi specificare se arrestare (STOP) o eliminare (DELETE) le VM.MACHINE_TYPE: un tipo di macchina supportato per le VM spot. Se specifichi un tipo di macchina N1, devi includere il flag--acceleratorper definire il numero e il tipo di GPU da collegare alle VM.PREEMPTION_NOTICE_DURATION: se abilitare una durata della notifica di preemption. Per gcloud CLI, il valore deve essere120so0s.Se specifichi
120s(opzione consigliata), gestisci la preemption all'interno del tuo workload. (Facoltativamente, puoi anche specificare uno script di arresto.)Se specifichi
0s(impostazione predefinita), gestisci il prerilascio all'interno di uno script di arresto.
SHUTDOWN_SCRIPT: uno script di arresto.Se imposti
PREEMPTION_NOTICE_DURATIONsu0s(impostazione predefinita), per gestire il prerilascio devi specificare uno script di arresto. Per saperne di più su come formattare e specificare uno script di arresto, consulta Esecuzione di script di arresto.Altrimenti, se non vuoi specificare uno script di arresto, puoi rimuovere il flag
--metadata shutdown-script.
REST
Per creare un template di istanza configurato per la creazione di
VM spot, effettua una delle seguenti richieste POST:
Per creare un template di istanza regionale: metodo
regionInstanceTemplates.insertPer creare un template di istanza globale: metodo
instanceTemplates.insert
Ad esempio, per creare un template di istanza regionale, effettua una richiesta come segue:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceTemplates
{
"name": "INSTANCE_TEMPLATE_NAME",
"properties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"machineType": "MACHINE_TYPE",
"networkInterfaces": [
{
"network": "global/networks/default"
}
],
"scheduling": {
"instanceTerminationAction": "TERMINATION_ACTION",
"provisioningModel": "SPOT",
"preemptionNoticeDuration": { "seconds": PREEMPTION_NOTICE_DURATION }
},
"metadata": {
"items": [
{
"key": "shutdown-script",
"value": "SHUTDOWN_SCRIPT"
}
]
}
}
}
Sostituisci quanto segue:
PROJECT_ID: l'ID del progetto in cui creare il template di istanza.REGION: la regione in cui creare il template di istanza. In base al tipo di macchina che vuoi che utilizzino le VM spot, specifica una regione supportata.INSTANCE_TEMPLATE_NAME: il nome del template di istanza.IMAGE_PROJECT: il progetto immagine che contiene l'immagine, ad esempiodebian-cloud. Per saperne di più sui progetti di immagini supportati, vedi Immagini pubbliche.IMAGE: specifica una delle seguenti opzioni:Una versione specifica dell'immagine sistema operativo, ad esempio
debian-12-bookworm-v20240617.Una famiglia di immagini, che deve essere formattata come
family/IMAGE_FAMILY. In questo modo, viene specificata l'immagine sistema operativo più recente e non deprecata. Ad esempio, se specifichifamily/debian-12, viene utilizzata l'ultima versione della famiglia di immagini Debian 12. Per saperne di più sull'utilizzo delle famiglie di immagini, consulta le best practice per le famiglie di immagini.
MACHINE_TYPE: un tipo di macchina supportato per le VM spot. Se specifichi un tipo di macchina N1, devi includere il campoguestAcceleratorsper definire il numero e il tipo di GPU da collegare alle VM.TERMINATION_ACTION: indica se Compute Engine interrompe o elimina le VM spot al prerilascio. Devi specificare di arrestare (STOP) o eliminare (DELETE) le VM.PREEMPTION_NOTICE_DURATION: se abilitare una durata della notifica di preemption. Per REST, il valore deve essere120o0.Se specifichi
120(opzione consigliata), gestisci la preemption all'interno del tuo workload. (Facoltativamente, puoi anche specificare uno script di arresto.)Se specifichi
0(impostazione predefinita), gestisci il prerilascio all'interno di uno script di arresto.
SHUTDOWN_SCRIPT: uno script di arresto.Se imposti
PREEMPTION_NOTICE_DURATIONsu0s(impostazione predefinita), per gestire la preemption devi specificare uno script di arresto. Per saperne di più su come formattare e specificare uno script di arresto, consulta Esecuzione di script di arresto.Altrimenti, se non vuoi specificare uno script di arresto, puoi rimuovere il campo
metadatae i relativi campi secondari.
TERMINATION_ACTION: (facoltativo) specifica l'azione di terminazione da intraprendere quando Compute Engine esegue il prerilascio della VM,STOP(comportamento predefinito) oDELETE.
Dopo aver creato il modello di istanza, puoi visualizzare i dettagli del modello per esaminarne le proprietà.
Crea un MIG regionale o di zona
Per creare un MIG a livello di regione o di zona, seleziona una delle seguenti opzioni:
Console
Nella console Google Cloud , vai alla pagina Gruppi di istanze.
Fai clic su Crea gruppo di istanze. Viene visualizzata la pagina Crea gruppo di istanze.
Nel campo Nome, inserisci un nome per il gruppo di istanze gestite.
Nell'elenco Template di istanza, seleziona il template di istanza creato nella sezione precedente.
Nel campo Numero di istanze, inserisci il numero di VM spot da creare nel gruppo di istanze gestite. Se il tuo workload richiede VM con nomi specifici, inserisci
0per saltare la creazione di VM in questa fase. Dopo aver creato il MIG, aggiungi VM con nomi specifici.Nella sezione Località, specifica se vuoi creare un gruppo di istanze gestite a livello di zona o di regione come segue:
Per creare un gruppo di istanze gestite a livello di zona, seleziona Zona singola. In alternativa, per creare un gruppo di istanze gestite a livello di regione, seleziona Più zone.
Seleziona la regione e le zone per il gruppo di istanze gestite.
Fai clic su Crea.
gcloud
Per creare un MIG, utilizza il
comando gcloud compute instance-groups managed create.
In base al tipo di MIG che vuoi creare, includi i seguenti flag nel comando:
Per creare un MIG a livello di zona, includi il flag
--zone:gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \ --size=SIZE \ --template=INSTANCE_TEMPLATE_URL \ --zone=ZONEPer creare un MIG a livello di regione, includi il flag
--region:gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \ --size=SIZE \ --template=INSTANCE_TEMPLATE_URL \ --region=REGION
Sostituisci quanto segue:
INSTANCE_GROUP_NAME: il nome del MIG.INSTANCE_TEMPLATE_URL: l'URL del template di istanza che hai creato nella sezione precedente. L'URL può contenere l'ID o il nome del template di istanza. Specifica uno dei seguenti valori:Per un template di istanza regionale:
projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_IDPer un template di istanza globale:
INSTANCE_TEMPLATE_ID
SIZE: il numero di VM spot da creare nel MIG. Se il tuo workload richiede nomi VM specifici, specifica0per ignorare la creazione di VM in questa fase. Dopo aver creato il MIG, aggiungi VM con nomi specifici.ZONE: la zona in cui creare il MIG a livello di zona. Se utilizzi un template di istanza regionale per creare il gruppo di istanze gestite, devi specificare una zona all'interno della stessa regione del template.REGION: la regione in cui creare il MIG regionale. Se utilizzi un template di istanza regionale per creare il MIG, devi specificare la stessa regione del template.
REST
Per creare un MIG, invia una richiesta POST a uno dei seguenti metodi:
Per creare un gruppo di istanze gestite a livello di zona, invia una richiesta
POSTal metodoinstanceGroupManagers.insert:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers { "name": "INSTANCE_GROUP_NAME", "versions": [ { "instanceTemplate": "INSTANCE_TEMPLATE_URL" } ], "targetSize": SIZE }Per creare un MIG a livello di regione, invia una richiesta
POSTal metodoregionInstanceGroupManagers.insert:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers { "name": "INSTANCE_GROUP_NAME", "instanceTemplate": "INSTANCE_TEMPLATE_URL", "targetSize": SIZE }
Sostituisci quanto segue:
PROJECT_ID: l'ID del progetto in cui creare il MIG regionale o zonale.ZONE: la zona in cui creare il MIG a livello di zona. Se utilizzi un template di istanza regionale per creare il gruppo di istanze gestite, devi specificare una zona all'interno della stessa regione del template.REGION: la regione in cui creare il MIG regionale. Se utilizzi un template di istanza regionale per creare il MIG, devi specificare la stessa regione del template.INSTANCE_GROUP_NAME: il nome del MIG.INSTANCE_TEMPLATE_URL: l'URL del template di istanza che hai creato nella sezione precedente. L'URL può contenere l'ID o il nome del template di istanza. Specifica uno dei seguenti valori:Per un template di istanza regionale:
projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_IDPer un template di istanza globale:
INSTANCE_TEMPLATE_ID
SIZE: il numero di VM spot da creare nel MIG. Se il tuo workload richiede nomi VM specifici, specifica0per saltare la creazione di VM in questa fase. Dopo aver creato il MIG, aggiungi VM con nomi specifici.
Dopo aver creato il MIG, puoi visualizzarne i dettagli per esaminarne le proprietà.
Passaggi successivi
Scopri di più sulle best practice per le VM spot.
Scopri di più sulla riparazione delle VM per l'alta affidabilità nei MIG.
Scopri di più sulla scalabilità automatica delle VM nei MIG.
Scopri di più sui MIG stateful.