Questo documento descrive come configurare la flessibilità dell'istanza quando crei macchine virtuali (VM) in blocco. La flessibilità delle istanze ti consente di specificare più tipi di macchina, classificarli in base alle preferenze e sostituire le impostazioni della piattaforma CPU minima e del disco per ogni selezione, in modo che Compute Engine possa eseguire il provisioning delle VM in base alla capacità e alla disponibilità della quota in una regione.
Per saperne di più sulla flessibilità delle istanze per le VM create in blocco, consulta Informazioni sulla flessibilità delle istanze per le VM create in blocco.
Prima di iniziare
- Per le VM e le eventuali risorse correlate che intendi creare, assicurati di disporre di una quota sufficiente.
- Se vuoi creare VM spot in blocco, visualizza la disponibilità delle risorse prima di creare le VM. Il controllo della disponibilità delle risorse contribuisce a ridurre le probabilità di riscontrare errori di disponibilità delle risorse durante la creazione delle VM. Per istruzioni, consulta Visualizzare la disponibilità delle risorse 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 Cloud de Confiance by S3NS . 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:
gcloud
-
Installa Google Cloud CLI, quindi accedi a gcloud CLI con la tua identità federata. Dopo aver eseguito l'accesso, inizializza Google Cloud CLI eseguendo il comando seguente:
gcloud init
-
- 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, quindi accedi a gcloud CLI con la tua identità federata.
Per saperne di più, consulta Autenticati per usare REST nella documentazione sull'autenticazione di Cloud de Confiance .
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie
per creare più VM contemporaneamente,
chiedi all'amministratore di concederti
il ruolo IAM Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) nel progetto.
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Questo ruolo predefinito include le autorizzazioni necessarie per creare più VM contemporaneamente. Per visualizzare le autorizzazioni obbligatorie corrette, espandi l'omonima sezione:
Autorizzazioni obbligatorie
Per creare più VM contemporaneamente, sono necessarie le seguenti autorizzazioni:
-
compute.instances.createsul progetto -
Per utilizzare un'immagine personalizzata per creare la VM:
compute.images.useReadOnlysull'immagine -
Per utilizzare uno snapshot per creare la VM:
compute.snapshots.useReadOnlysullo snapshot -
Per utilizzare un template di istanza per creare la VM:
compute.instanceTemplates.useReadOnlysul template di istanza -
Per specificare una subnet per la VM:
compute.subnetworks.usesul progetto o sulla subnet scelta -
Per specificare un indirizzo IP statico per la VM:
compute.addresses.usesul progetto -
Per assegnare un indirizzo IP esterno alla VM quando utilizzi una rete VPC:
compute.subnetworks.useExternalIpsul progetto o sulla subnet scelta -
Per assegnare una rete legacy alla VM:
compute.networks.usesul progetto -
Per assegnare un indirizzo IP esterno alla VM quando utilizzi una rete legacy:
compute.networks.useExternalIpsul progetto -
Per impostare i metadati dell'istanza VM per la VM:
compute.instances.setMetadatasul progetto -
Per impostare i tag per la VM:
compute.instances.setTagssulla VM -
Per impostare le etichette per la VM:
compute.instances.setLabelssulla VM -
Per impostare un service account che la VM possa utilizzare:
compute.instances.setServiceAccountsulla VM -
Per creare un nuovo disco per la VM:
compute.disks.createsul progetto -
Per collegare un disco esistente in modalità di sola lettura o di lettura e scrittura:
compute.disks.usesul disco -
Per collegare un disco esistente in modalità di sola lettura:
compute.disks.useReadOnlysul disco
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Crea VM con più tipi di macchine con la stessa preferenza
Se il tuo workload può funzionare su diversi tipi di macchine, puoi specificare un elenco di tutti i tipi di macchine compatibili in una singola selezione di istanze. Gli esempi seguenti mostrano come specificare più tipi di macchine con la stessa preferenza.
gcloud
Per creare più VM contemporaneamente con una singola selezione di istanze, utilizza il comando gcloud compute instances bulk create con il flag --instance-selection-machine-types.
gcloud compute instances bulk create \
--name-pattern=NAME_PATTERN \
--region=REGION \
--count=COUNT \
--instance-selection-machine-types=MACHINE_TYPE_1,MACHINE_TYPE_2
Sostituisci quanto segue:
COUNT: il numero di VM da creareNAME_PATTERN: il pattern del nome delle VMMACHINE_TYPE_1,MACHINE_TYPE_2: i tipi di macchina da utilizzare per le VMREGION: la regione in cui creare le VM
Esempio
gcloud compute instances bulk create \
--name-pattern=test-bulk-# \
--region=us-central1 \
--count=10 \
--instance-selection-machine-types=c3-standard-8,n2-standard-8,c2-standard-8
REST
Nell'API Compute Engine, invia una richiesta POST al metodo regionInstances.bulkInsert.
Nel corpo della richiesta, includi instanceFlexibilityPolicy con una voce
instanceSelections che elenca i tipi di macchina.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
"count": COUNT,
"namePattern": "NAME_PATTERN",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"selection-1": {
"machineTypes": [
"MACHINE_TYPE_1",
"MACHINE_TYPE_2"
]
}
}
}
}
Sostituisci quanto segue:
COUNT: il numero di VM da creareNAME_PATTERN: il pattern del nome delle VMMACHINE_TYPE_1,MACHINE_TYPE_2: i tipi di macchina da utilizzare per le VMIMAGE_PROJECT: il progetto che contiene l'immagineIMAGE: il nome dell'immagine o della famiglia di immagini da utilizzarePROJECT_ID: il tuo ID progettoREGION: la regione in cui creare le VM
Esempio
POST https://compute.googleapis.com/compute/v1/projects/my-project/regions/us-central1/instances/bulkInsert
{
"count": 10,
"namePattern": "test-bulk-#",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/debian-12"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"selection-1": {
"machineTypes": [
"c3-standard-8",
"n2-standard-8",
"c2-standard-8"
]
}
}
}
}
Crea VM con più tipi di macchine classificati in base alle preferenze
Se vuoi che Compute Engine scelga i tipi di macchine in un ordine specifico, puoi configurare più selezioni di istanze. Ogni selezione di istanze include un elenco di tipi di macchine e un ranking, ovvero un numero intero che definisce la preferenza per i tipi di macchine. Un ranking più basso indica una preferenza più elevata. Compute Engine tenta di creare VM utilizzando tipi di macchine con una preferenza più alta (classifica inferiore). Se questi tipi di macchine non sono disponibili, Compute Engine utilizza tipi di macchine con una preferenza inferiore (ranking più alto).
Gli esempi seguenti mostrano come specificare più selezioni di istanze con ranghi.
gcloud
Per creare più VM in blocco con più selezioni di istanze, utilizza il comando gcloud compute instances bulk create e specifica il flag --instance-selection più volte.
gcloud compute instances bulk create \
--name-pattern=NAME_PATTERN \
--region=REGION \
--count=COUNT \
--instance-selection "name=INSTANCE_SELECTION_1,rank=0,machine-type=MACHINE_TYPE_1,machine-type=MACHINE_TYPE_2" \
--instance-selection "name=INSTANCE_SELECTION_2,rank=1,machine-type=MACHINE_TYPE_3,machine-type=MACHINE_TYPE_4"
Sostituisci quanto segue:
COUNT: il numero di VM da creareNAME_PATTERN: il pattern del nome delle VMINSTANCE_SELECTION_1: il nome della prima selezione di istanzeINSTANCE_SELECTION_2: il nome della seconda selezione di istanzeMACHINE_TYPE_1,MACHINE_TYPE_2: i tipi di macchina per la prima selezione di istanzeMACHINE_TYPE_3,MACHINE_TYPE_4: i tipi di macchina per la seconda selezione di istanzeREGION: la regione in cui creare le VM
Esempio
gcloud compute instances bulk create \
--name-pattern=test-bulk-# \
--region=us-central1 \
--count=10 \
--instance-selection "name=most-preferred,rank=0,machine-type=c3-standard-16,machine-type=n2-standard-16,machine-type=c2-standard-16" \
--instance-selection "name=least-preferred,rank=1,machine-type=c3-standard-8,machine-type=n2-standard-8,machine-type=c2-standard-8"
REST
Nell'API Compute Engine, invia una richiesta POST al metodo regionInstances.bulkInsert.
Nel corpo della richiesta, includi instanceFlexibilityPolicy e specifica più voci in instanceSelections, ognuna con un elenco di tipi di macchine e un rank.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
"count": COUNT,
"namePattern": "NAME_PATTERN",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"INSTANCE_SELECTION_1": {
"machineTypes": [
"MACHINE_TYPE_1",
"MACHINE_TYPE_2"
],
"rank": 1
},
"INSTANCE_SELECTION_2": {
"machineTypes": [
"MACHINE_TYPE_3",
"MACHINE_TYPE_4"
],
"rank": 2
}
}
}
}
Sostituisci quanto segue:
COUNT: il numero di VM da creareNAME_PATTERN: il pattern di denominazione per le VMINSTANCE_SELECTION_1: il nome della prima selezione di istanzeINSTANCE_SELECTION_2: il nome della seconda selezione di istanzeMACHINE_TYPE_1,MACHINE_TYPE_2: i tipi di macchina per la prima selezione di istanzeMACHINE_TYPE_3,MACHINE_TYPE_4: i tipi di macchina per la seconda selezione di istanzeIMAGE_PROJECT: il progetto che contiene l'immagineIMAGE: il nome dell'immagine o della famiglia di immagini da utilizzarePROJECT_ID: il tuo ID progettoREGION: la regione in cui creare le VM
Esempio
POST https://compute.googleapis.com/compute/v1/projects/my-project/regions/us-central1/instances/bulkInsert
{
"count": 10,
"namePattern": "test-bulk-#",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/debian-12"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"most-preferred": {
"machineTypes": [
"c3-standard-16",
"c2-standard-16"
],
"rank": 1
},
"least-preferred": {
"machineTypes": [
"n2-standard-16",
"c3-standard-8",
"n2-standard-8",
"c2-standard-8"
],
"rank": 2
}
}
}
}
Crea VM con più tipi di macchina, piattaforma CPU minima e override dei dischi
Oltre a specificare i tipi e i ranghi di macchine, puoi eseguire l'override della piattaforma CPU minima ed eseguire l'override o aggiungere alle definizioni dei dischi in instanceProperties per ogni selezione dell'istanza. Ad esempio, se instanceProperties specifica un Persistent Disk
e selezioni una serie di macchine N4, devi eseguire l'override del disco di avvio con un
tipo di Google Cloud Hyperdisk supportato.
Per saperne di più sui tipi di dischi supportati e su come Compute Engine applica gli override, consulta le seguenti risorse:
- Supporto delle serie di macchine per Persistent Disk
- Supporto delle serie di macchine per Hyperdisk
- Override delle proprietà dell'istanza nelle selezioni dell'istanza
Per creare in blocco VM con più tipi di macchine, piattaforma CPU minima e override dei dischi, seleziona una delle seguenti opzioni:
gcloud
Per creare in blocco VM con più tipi di macchina, piattaforma CPU minima e override del disco, utilizza il comando
gcloud compute instances bulk create con il flag
--instance-flexibility-policy. Per eseguire l'override del disco di avvio predefinito da
instanceProperties, includi anche il flag --boot-disk-device-name e
specifica lo stesso deviceName nella selezione dell'istanza:
gcloud compute instances bulk create \
--name-pattern=NAME_PATTERN \
--region=REGION \
--count=COUNT \
--boot-disk-device-name=BOOT_DISK_DEVICE_NAME \
--instance-flexibility-policy='{"instanceSelections":
{"INSTANCE_SELECTION_1":{"rank":RANK_1,"machineTypes":["MACHINE_TYPE_1","MACHINE_TYPE_2"],"minCpuPlatform":"MIN_CPU_PLATFORM_1","disks":[{"deviceName":"BOOT_DISK_DEVICE_NAME_1","boot":true,"initializeParams":{"diskType":"DISK_TYPE_1","diskSizeGb":DISK_SIZE_1,"sourceImage":"projects/IMAGE_PROJECT_1/global/images/IMAGE_1"}}]},
"INSTANCE_SELECTION_2":{"rank":RANK_2,"machineTypes":["MACHINE_TYPE_3"],"minCpuPlatform":"MIN_CPU_PLATFORM_2","disks":[{"deviceName":"BOOT_DISK_DEVICE_NAME_2","boot":true,"initializeParams":{"diskType":"DISK_TYPE_2","diskSizeGb":DISK_SIZE_2,"sourceImage":"projects/IMAGE_PROJECT_2/global/images/IMAGE_2"}}]}}}'
In alternativa, per configurare la policy di flessibilità dell'istanza utilizzando un file YAML o JSON, utilizza il flag --flags-file anziché il flag --instance-flexibility-policy:
gcloud compute instances bulk create \
--name-pattern=NAME_PATTERN \
--region=REGION \
--count=COUNT \
--boot-disk-device-name=BOOT_DISK_DEVICE_NAME \
--flags-file=FILE_NAME.yaml
Sostituisci quanto segue:
COUNT: il numero di VM da creareNAME_PATTERN: il pattern del nome delle VMREGION: la regione in cui creare le VMBOOT_DISK_DEVICE_NAME: il nome del dispositivo per il disco di avvio predefinito ininstancePropertiesINSTANCE_SELECTION_1,INSTANCE_SELECTION_2: i nomi delle selezioni delle istanzeRANK_1,RANK_2: numeri facoltativi che rappresentano l'ordine di preferenza per ogni selezione di istanza; un valore inferiore indica una preferenza maggioreMACHINE_TYPE_1,MACHINE_TYPE_2: i tipi di macchina per la prima selezione di istanzeMACHINE_TYPE_3: il tipo di macchina per la seconda selezione dell'istanzaMIN_CPU_PLATFORM_1,MIN_CPU_PLATFORM_2: piattaforme CPU minime facoltative per le VM in ogni selezione di istanzeBOOT_DISK_DEVICE_NAME_1,BOOT_DISK_DEVICE_NAME_2: i nomi dei dispositivi per i dischi di avvio in ogni selezione di istanze; per ignorare il disco di avvio predefinito, specifica lo stesso nome diBOOT_DISK_DEVICE_NAMEDISK_TYPE_1,DISK_TYPE_2: i tipi di disco per gli override del disco, ad esempiopd-ssdohyperdisk-balanced.DISK_SIZE_1,DISK_SIZE_2: le dimensioni del disco per gli override del discoIMAGE_PROJECT_1,IMAGE_PROJECT_2: i progetti che contengono le immagini per gli override del discoIMAGE_1,IMAGE_2: i nomi delle immagini o delle famiglie di immagini per gli override del discoFILE_NAME.yaml: il nome del file YAML o JSON che contiene la configurazione di--instance-flexibility-policy
Esempio
L'esempio seguente crea 10 VM utilizzando due selezioni di istanze che specificano una piattaforma CPU minima, sostituiscono il disco di avvio predefinito e collegano dischi aggiuntivi:
gcloud compute instances bulk create \
--name-pattern=test-bulk-# \
--region=us-central1 \
--count=10 \
--boot-disk-device-name=boot-disk \
--instance-flexibility-policy='{"instanceSelections":
{"selection-1":{"machineTypes":["n2-standard-8","c2-standard-8"],"minCpuPlatform":"Intel Cascade Lake","disks":[{"type":"PERSISTENT","deviceName":"boot-disk","boot":true,"initializeParams":{"diskType":"pd-ssd","diskSizeGb":50,"sourceImage":"projects/debian-cloud/global/images/family/debian-12"}},{"type":"SCRATCH","initializeParams":{"diskType":"local-ssd"}}]},
"selection-2":{"machineTypes":["c4a-standard-8"],"disks":[{"type":"PERSISTENT","deviceName":"boot-disk","boot":true,"initializeParams":{"diskType":"hyperdisk-balanced","diskSizeGb":50,"sourceImage":"projects/debian-cloud/global/images/family/debian-12-arm64"}},{"type":"PERSISTENT","deviceName":"data-disk","initializeParams":{"diskType":"hyperdisk-balanced","diskSizeGb":128}}]}}}'
In alternativa, se utilizzi il flag --flags-file, puoi specificare la stessa
policy di flessibilità delle istanze in un file YAML:
--instance-flexibility-policy:
instanceSelections:
selection-1:
machineTypes:
- n2-standard-8
- c2-standard-8
minCpuPlatform: Intel Cascade Lake
disks:
- type: PERSISTENT
deviceName: boot-disk
boot: true
initializeParams:
diskType: pd-ssd
diskSizeGb: 50
sourceImage: projects/debian-cloud/global/images/family/debian-12
- type: SCRATCH
initializeParams:
diskType: local-ssd
selection-2:
machineTypes:
- c4a-standard-8
disks:
- type: PERSISTENT
deviceName: boot-disk
boot: true
initializeParams:
diskType: hyperdisk-balanced
diskSizeGb: 50
sourceImage: projects/debian-cloud/global/images/family/debian-12-arm64
- type: PERSISTENT
deviceName: data-disk
initializeParams:
diskType: hyperdisk-balanced
diskSizeGb: 128
REST
Nell'API Compute Engine, invia una richiesta POST al metodo regionInstances.bulkInsert.
In ogni voce instanceSelections di instanceFlexibilityPolicy, includi il campo minCpuPlatform per eseguire l'override di instanceProperties.minCpuPlatform e il campo disks per eseguire l'override o aggiungere a instanceProperties.disks:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
"count": COUNT,
"namePattern": "NAME_PATTERN",
"instanceProperties": {
"disks": [
{
"boot": true,
"deviceName": "boot-disk",
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"INSTANCE_SELECTION_1": {
"machineTypes": [
"MACHINE_TYPE_1",
"MACHINE_TYPE_2"
],
"minCpuPlatform": "MIN_CPU_PLATFORM_1",
"disks": [
{
"type": "PERSISTENT",
"deviceName": "boot-disk",
"initializeParams": {
"diskType": "pd-ssd",
"diskSizeGb": 50,
"sourceImage": "projects/IMAGE_PROJECT_1/global/images/IMAGE_1"
},
"boot": true
},
{
"type": "SCRATCH",
"initializeParams": {
"diskType": "local-ssd"
}
}
]
},
"INSTANCE_SELECTION_2": {
"machineTypes": [
"MACHINE_TYPE_3"
],
"minCpuPlatform": "MIN_CPU_PLATFORM_2",
"disks": [
{
"type": "PERSISTENT",
"deviceName": "boot-disk",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 50,
"sourceImage": "projects/IMAGE_PROJECT_2/global/images/IMAGE_2"
},
"boot": true
},
{
"type": "PERSISTENT",
"deviceName": "data-disk",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 128,
"sourceImage": "projects/IMAGE_PROJECT_3/global/images/IMAGE_3"
}
}
]
}
}
}
}
Sostituisci quanto segue:
COUNT: il numero di VM da creareNAME_PATTERN: il pattern di denominazione per le VMINSTANCE_SELECTION_1: il nome della prima selezione di istanzeINSTANCE_SELECTION_2: il nome della seconda selezione di istanzeMACHINE_TYPE_1,MACHINE_TYPE_2: i tipi di macchina per la prima selezione di istanzeMACHINE_TYPE_3: il tipo di macchina per la seconda selezione dell'istanzaMIN_CPU_PLATFORM_1,MIN_CPU_PLATFORM_2: piattaforme CPU minime facoltative per le VM in ogni selezione di istanzeIMAGE_PROJECT: il progetto che contiene l'immagine di avvio predefinita ininstancePropertiesIMAGE: il nome dell'immagine di avvio o della famiglia di immagini predefinita ininstancePropertiesIMAGE_PROJECT_1,IMAGE_PROJECT_2,IMAGE_PROJECT_3: i progetti che contengono le immagini per gli override del discoIMAGE_1,IMAGE_2,IMAGE_3: i nomi delle immagini per gli override del discoPROJECT_ID: il tuo ID progettoREGION: la regione in cui creare le VM
Esempio
L'esempio seguente crea 10 VM utilizzando due selezioni di istanze che specificano una piattaforma CPU minima, sostituiscono il disco di avvio predefinito e collegano dischi aggiuntivi:
POST https://compute.googleapis.com/compute/v1/projects/my-project/regions/us-central1/instances/bulkInsert
{
"count": 10,
"namePattern": "test-bulk-#",
"instanceProperties": {
"disks": [
{
"boot": true,
"deviceName": "boot-disk",
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/family/debian-12"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"selection-1": {
"machineTypes": [
"n2-standard-8",
"c2-standard-8"
],
"minCpuPlatform": "Intel Cascade Lake",
"disks": [
{
"type": "PERSISTENT",
"deviceName": "boot-disk",
"initializeParams": {
"diskType": "pd-ssd",
"diskSizeGb": 50,
"sourceImage": "projects/debian-cloud/global/images/family/debian-12"
},
"boot": true
},
{
"type": "SCRATCH",
"initializeParams": {
"diskType": "local-ssd"
}
}
]
},
"selection-2": {
"machineTypes": [
"c4a-standard-8"
],
"disks": [
{
"type": "PERSISTENT",
"deviceName": "boot-disk",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 50,
"sourceImage": "projects/debian-cloud/global/images/family/debian-12-arm64"
},
"boot": true
},
{
"type": "PERSISTENT",
"deviceName": "data-disk",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 128
}
}
]
}
}
}
}