Neste documento, descrevemos como configurar a flexibilidade de instâncias ao criar máquinas virtuais (VMs) em massa. A flexibilidade de instâncias permite especificar vários tipos de máquina, classificá-los por preferência e substituir as configurações de plataforma de CPU mínima e disco para cada seleção, de modo que o Compute Engine possa provisionar VMs com base na capacidade e na disponibilidade de cotas em uma região.
Para mais informações sobre a flexibilidade de instâncias para VMs criadas em massa, consulte Sobre a flexibilidade de instâncias para VMs criadas em massa.
Antes de começar
- Para VMs e quaisquer recursos relacionados que você planeja criar, verifique se você tem cota suficiente.
- Se você quiser criar VMs spot em massa, confira a disponibilidade de recursos antes de criar as VMs. Verificar a disponibilidade de recursos ajuda a reduzir as chances de encontrar erros de disponibilidade ao criar VMs. Para instruções, consulte Ver a disponibilidade de recursos de VMs spot.
-
Configure a autenticação, caso ainda não tenha feito isso.
Com isso, você confirma sua identidade para acesso a serviços e APIs do Cloud de Confiance by S3NS . Para executar
códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no
Compute Engine selecionando uma das seguintes opções:
Selecione a guia para como planeja usar as amostras nesta página:
gcloud
-
Instale a Google Cloud CLI e faça login na CLI gcloud com sua identidade federada. Depois de fazer login, inicialize a Google Cloud CLI executando o seguinte comando:
gcloud init
-
- Defina uma região e uma zona padrão.
REST
Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para a CLI gcloud.
Instale a Google Cloud CLI e faça login na CLI gcloud com sua identidade federada.
Saiba mais em Autenticar para usar REST na documentação de autenticação do Cloud de Confiance .
Funções exigidas
Para receber as permissões necessárias para criar VMs em massa, peça ao administrador para conceder a você o papel do IAM de Administrador da instância do Compute (v1) (roles/compute.instanceAdmin.v1) no projeto.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esse papel predefinido contém as permissões necessárias para criar VMs em massa. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As seguintes permissões são necessárias para criar VMs em massa:
-
compute.instances.createno projeto -
Usar uma imagem personalizada para criar a VM:
compute.images.useReadOnlyna imagem -
Usar um snapshot para criar a VM:
compute.snapshots.useReadOnlyno snapshot -
Usar um modelo de instância para criar a VM:
compute.instanceTemplates.useReadOnlyno modelo de instância -
Especificar uma sub-rede para a VM:
compute.subnetworks.useno projeto ou na sub-rede escolhida -
Especificar um endereço IP estático para a VM:
compute.addresses.useno projeto -
Atribuir um endereço IP externo à VM ao usar uma rede VPC:
compute.subnetworks.useExternalIpno projeto ou na sub-rede escolhida -
Atribuir uma rede legada à VM:
compute.networks.useno projeto -
Atribuir um endereço IP externo à VM usando uma rede legada:
compute.networks.useExternalIpno projeto -
Definir os metadados da instância de VM para a VM:
compute.instances.setMetadatano projeto -
Definir tags para a VM:
compute.instances.setTagsna VM -
Definir rótulos para a VM:
compute.instances.setLabelsna VM -
Definir uma conta de serviço a ser usada pela VM:
compute.instances.setServiceAccountna VM -
Criar um disco para a VM:
compute.disks.createno projeto -
Anexar um disco atual no modo somente leitura ou de leitura e gravação:
compute.disks.useno disco -
Anexar um disco atual no modo somente leitura:
compute.disks.useReadOnlyno disco
Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.
Criar VMs com vários tipos de máquina de igual preferência
Se a carga de trabalho puder operar em vários tipos de máquinas diferentes, especifique uma lista de todos os tipos de máquinas compatíveis em uma única seleção de instância. Os exemplos a seguir mostram como especificar vários tipos de máquina com a mesma preferência.
gcloud
Para criar VMs em massa com uma única seleção de instância, use o comando gcloud compute instances bulk create com a 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
Substitua:
COUNT: o número de VMs a serem criadasNAME_PATTERN: o padrão de nome das VMs.MACHINE_TYPE_1,MACHINE_TYPE_2: os tipos de máquina a serem usados para as VMsREGION: a região em que as VMs serão criadas.
Exemplo
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
Na API Compute Engine, faça uma solicitação POST para o
método regionInstances.bulkInsert.
No corpo da solicitação, inclua instanceFlexibilityPolicy com uma entrada instanceSelections que liste os tipos de máquina.
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"
]
}
}
}
}
Substitua:
COUNT: o número de VMs a serem criadasNAME_PATTERN: o padrão de nome das VMsMACHINE_TYPE_1,MACHINE_TYPE_2: os tipos de máquina a serem usados para as VMsIMAGE_PROJECT: o projeto que contém a imagem.IMAGE: o nome da imagem ou família de imagens a ser usadaPROJECT_ID: ID do projeto;REGION: a região em que as VMs serão criadas.
Exemplo
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"
]
}
}
}
}
Criar VMs com vários tipos de máquina classificados por preferência
Se você quiser que o Compute Engine escolha os tipos de máquina em uma ordem específica, configure várias seleções de instâncias. Cada seleção de instância inclui uma lista de tipos de máquinas e uma classificação, que é um número inteiro que define a preferência para os tipos de máquinas. Uma classificação mais baixa indica uma preferência maior. O Compute Engine tenta criar VMs usando tipos de máquinas com uma preferência maior (classificação mais baixa). Se esses tipos de máquina não estiverem disponíveis, o Compute Engine usará tipos com uma preferência menor (classificação mais alta).
Os exemplos a seguir mostram como especificar várias seleções de instâncias com classificações.
gcloud
Para criar VMs em massa com várias seleções de instâncias, use o comando gcloud compute instances bulk create e especifique a flag --instance-selection várias vezes.
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"
Substitua:
COUNT: o número de VMs a serem criadas.NAME_PATTERN: o padrão de nome das VMs.INSTANCE_SELECTION_1: o nome da primeira seleção de instânciaINSTANCE_SELECTION_2: o nome da segunda seleção de instânciaMACHINE_TYPE_1,MACHINE_TYPE_2: os tipos de máquina para a primeira seleção de instânciaMACHINE_TYPE_3,MACHINE_TYPE_4: os tipos de máquina para a segunda seleção de instâncias.REGION: a região em que as VMs serão criadas.
Exemplo
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
Na API Compute Engine, faça uma solicitação POST para o
método regionInstances.bulkInsert.
No corpo da solicitação, inclua instanceFlexibilityPolicy e especifique
várias entradas em instanceSelections, cada uma com uma lista de tipos de máquinas
e um 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
}
}
}
}
Substitua:
COUNT: o número de VMs a serem criadasNAME_PATTERN: o padrão de nomenclatura das VMsINSTANCE_SELECTION_1: o nome da primeira seleção de instâncias.INSTANCE_SELECTION_2: o nome da segunda seleção de instânciaMACHINE_TYPE_1,MACHINE_TYPE_2: os tipos de máquina para a primeira seleção de instânciaMACHINE_TYPE_3,MACHINE_TYPE_4: os tipos de máquina para a segunda seleção de instânciasIMAGE_PROJECT: o projeto que contém a imagem.IMAGE: o nome da imagem ou família de imagens a ser usadaPROJECT_ID: ID do projeto;REGION: a região em que as VMs serão criadas.
Exemplo
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
}
}
}
}
Criar VMs com vários tipos de máquina, plataforma de CPU mínima e substituições de disco
Além de especificar tipos e classificações de máquina, é possível substituir a
plataforma de CPU mínima e
substituir ou adicionar às definições de disco em instanceProperties para cada
seleção de instância. Por exemplo, se instanceProperties especificar um Persistent Disk e você selecionar uma série de máquinas N4, será necessário substituir o disco de inicialização por um tipo de Google Cloud Hyperdisk compatível.
Para mais informações sobre os tipos de disco compatíveis e como o Compute Engine aplica substituições, consulte os seguintes recursos:
- Suporte a séries de máquinas para discos permanentes
- Suporte a séries de máquinas para o Hyperdisk
- Substituições de propriedades de instância em seleções de instância
Para criar VMs em massa com vários tipos de máquina, plataforma de CPU mínima e substituições de disco, selecione uma das seguintes opções:
gcloud
Para criar VMs em massa com vários tipos de máquinas, plataforma mínima de CPU e
substituições de disco, use o comando gcloud compute instances bulk create com a
flag --instance-flexibility-policy. Para substituir o disco de inicialização padrão de
instanceProperties, inclua também a flag --boot-disk-device-name e
especifique o mesmo deviceName na seleção de instâncias:
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"}}]}}}'
Como alternativa, para configurar a política de flexibilidade de instâncias usando um arquivo YAML ou JSON, use a flag --flags-file em vez da 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
Substitua:
COUNT: o número de VMs a serem criadasNAME_PATTERN: o padrão de nome das VMsREGION: a região em que as VMs serão criadas.BOOT_DISK_DEVICE_NAME: o nome do dispositivo para o disco de inicialização padrão eminstancePropertiesINSTANCE_SELECTION_1eINSTANCE_SELECTION_2: os nomes das seleções de instânciasRANK_1,RANK_2: números opcionais que representam sua ordem de preferência para cada seleção de instância. Um valor menor indica uma preferência maior.MACHINE_TYPE_1,MACHINE_TYPE_2: os tipos de máquina para a primeira seleção de instânciasMACHINE_TYPE_3: o tipo de máquina da segunda seleção de instânciaMIN_CPU_PLATFORM_1,MIN_CPU_PLATFORM_2: plataformas mínimas de CPU opcionais para as VMs em cada seleção de instânciaBOOT_DISK_DEVICE_NAME_1,BOOT_DISK_DEVICE_NAME_2: os nomes de dispositivos para os discos de inicialização em cada seleção de instância. Para substituir o disco de inicialização padrão, especifique o mesmo nome deBOOT_DISK_DEVICE_NAME.DISK_TYPE_1,DISK_TYPE_2: os tipos de disco para as substituições de disco, comopd-ssdouhyperdisk-balanced.DISK_SIZE_1,DISK_SIZE_2: os tamanhos dos discos para as substituições de disco.IMAGE_PROJECT_1,IMAGE_PROJECT_2: os projetos que contêm as imagens para as substituições de discoIMAGE_1,IMAGE_2: os nomes das imagens ou famílias de imagens para as substituições de disco.FILE_NAME.yaml: o nome do arquivo YAML ou JSON que contém a configuração de--instance-flexibility-policy.
Exemplo
O exemplo a seguir cria 10 VMs usando duas seleções de instâncias que especificam uma plataforma de CPU mínima, substituem o disco de inicialização padrão e anexam discos adicionais:
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}}]}}}'
Como alternativa, se você usar a flag --flags-file, poderá especificar a mesma
política de flexibilidade de instâncias em um arquivo 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
Na API Compute Engine, faça uma solicitação POST para o
método regionInstances.bulkInsert.
Em cada entrada instanceSelections de instanceFlexibilityPolicy, inclua o campo minCpuPlatform para substituir instanceProperties.minCpuPlatform e o campo disks para substituir ou adicionar 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"
}
}
]
}
}
}
}
Substitua:
COUNT: o número de VMs a serem criadas.NAME_PATTERN: o padrão de nomenclatura das VMs.INSTANCE_SELECTION_1: o nome da primeira seleção de instânciaINSTANCE_SELECTION_2: o nome da segunda seleção de instânciaMACHINE_TYPE_1,MACHINE_TYPE_2: os tipos de máquina para a primeira seleção de instânciasMACHINE_TYPE_3: o tipo de máquina para a segunda seleção de instância.MIN_CPU_PLATFORM_1,MIN_CPU_PLATFORM_2: plataformas de CPU mínimas opcionais para as VMs em cada seleção de instância.IMAGE_PROJECT: o projeto que contém a imagem de inicialização padrão eminstancePropertiesIMAGE: o nome da imagem de inicialização ou família de imagens padrão eminstancePropertiesIMAGE_PROJECT_1,IMAGE_PROJECT_2,IMAGE_PROJECT_3: os projetos que contêm as imagens para as substituições de disco.IMAGE_1,IMAGE_2,IMAGE_3: os nomes das imagens para as substituições de disco.PROJECT_ID: ID do projeto;REGION: a região em que as VMs serão criadas.
Exemplo
O exemplo a seguir cria 10 VMs usando duas seleções de instâncias que especificam uma plataforma de CPU mínima, substituem o disco de inicialização padrão e anexam outros discos:
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
}
}
]
}
}
}
}