Neste documento, descrevemos como especificar a flexibilidade da instância ao criar máquinas virtuais (VMs) em massa. Ao fazer essa especificação, você indica uma lista de tipos de máquinas adequados para as VMs, e o Compute Engine provisiona VMs usando qualquer um dos tipos de máquinas especificados com base na capacidade e na disponibilidade de cota 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, verifique a disponibilidade de recursos antes de criar as VMs. Isso ajuda a reduzir as chances de encontrar erros de disponibilidade de recursos ao criar VMs. Para instruções, consulte Ver a disponibilidade de recursos das 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áquinas de preferência igual.
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 VMsMACHINE_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 imagemIMAGE: 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 de máquina 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 criadasNAME_PATTERN: o padrão de nome das VMsINSTANCE_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ânciaREGION: 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áquina 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â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ânciaIMAGE_PROJECT: o projeto que contém a imagemIMAGE: 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
}
}
}
}
Especificar substituições de disco nas seleções de instâncias
Por padrão, as VMs criadas por uma solicitação em massa usam a configuração de disco de
instanceProperties. No entanto, é possível especificar configurações de disco em uma seleção de instância. Se você especificar discos em uma seleção de instâncias, essa configuração vai substituir a configuração de disco em instanceProperties para VMs que usam essa seleção.
O exemplo a seguir mostra como especificar discos em seleções de instâncias.
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, para qualquer entrada
instanceSelections, inclua o campo disks para substituir
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,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"INSTANCE_SELECTION_1": {
"machineTypes": [
"MACHINE_TYPE_1",
"MACHINE_TYPE_2"
],
"disks": [
{
"type": "PERSISTENT",
"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"
],
"disks": [
{
"type": "PERSISTENT",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 50,
"sourceImage": "projects/IMAGE_PROJECT_2/global/images/IMAGE_2"
},
"boot": true
},
{
"type": "PERSISTENT",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 128,
"sourceImage": "projects/IMAGE_PROJECT_3/global/images/IMAGE_1"
}
}
]
}
}
}
}
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ânciaINSTANCE_SELECTION_2: o nome da segunda seleção de instânciaMACHINE_TYPE_1,MACHINE_TYPE_2,MACHINE_TYPE_3: os tipos de máquina a serem usados para as VMsIMAGE_PROJECT: o projeto que contém a imagemIMAGE: 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.