Criar VMs em massa com flexibilidade de instância

Este documento descreve 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

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.create no projeto
  • Usar uma imagem personalizada para criar a VM: compute.images.useReadOnly na imagem
  • Usar um snapshot para criar a VM: compute.snapshots.useReadOnly no snapshot
  • Usar um modelo de instância para criar a VM: compute.instanceTemplates.useReadOnly no modelo de instância
  • Especificar uma sub-rede para a VM: compute.subnetworks.use no projeto ou na sub-rede escolhida
  • Especificar um endereço IP estático para a VM: compute.addresses.use no projeto
  • Atribuir um endereço IP externo à VM ao usar uma rede VPC: compute.subnetworks.useExternalIp no projeto ou na sub-rede escolhida
  • Atribuir uma rede legada à VM: compute.networks.use no projeto
  • Atribuir um endereço IP externo à VM usando uma rede legada: compute.networks.useExternalIp no projeto
  • Definir os metadados da instância de VM para a VM: compute.instances.setMetadata no projeto
  • Definir tags para a VM: compute.instances.setTags na VM
  • Definir rótulos para a VM: compute.instances.setLabels na VM
  • Definir uma conta de serviço a ser usada pela VM: compute.instances.setServiceAccount na VM
  • Criar um disco para a VM: compute.disks.create no projeto
  • Anexar um disco atual no modo somente leitura ou de leitura e gravação: compute.disks.use no disco
  • Anexar um disco atual no modo somente leitura: compute.disks.useReadOnly no 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 criadas
  • NAME_PATTERN: o padrão de nome das VMs
  • MACHINE_TYPE_1, MACHINE_TYPE_2: os tipos de máquina a serem usados para as VMs
  • 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-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 criadas
  • NAME_PATTERN: o padrão de nome das VMs
  • MACHINE_TYPE_1, MACHINE_TYPE_2: os tipos de máquina a serem usados para as VMs
  • IMAGE_PROJECT: o projeto que contém a imagem
  • IMAGE: o nome da imagem ou família de imagens a ser usada
  • PROJECT_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áquinas não estiverem disponíveis, o Compute Engine usará tipos de máquinas 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ância
  • INSTANCE_SELECTION_2: o nome da segunda seleção de instância
  • MACHINE_TYPE_1, MACHINE_TYPE_2: os tipos de máquina para a primeira seleção de instância
  • MACHINE_TYPE_3, MACHINE_TYPE_4: os tipos de máquina para a segunda seleção de instância
  • 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á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 criadas
  • NAME_PATTERN: o padrão de nomenclatura das VMs
  • INSTANCE_SELECTION_1: o nome da primeira seleção de instância
  • INSTANCE_SELECTION_2: o nome da segunda seleção de instância
  • MACHINE_TYPE_1, MACHINE_TYPE_2: os tipos de máquina para a primeira seleção de instância
  • MACHINE_TYPE_3, MACHINE_TYPE_4: os tipos de máquina para a segunda seleção de instância
  • IMAGE_PROJECT: o projeto que contém a imagem
  • IMAGE: o nome da imagem ou família de imagens a ser usada
  • PROJECT_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 de disco vai substituir a configuração de disco em instanceProperties para VMs que usam essa seleção de instâncias.

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 criadas
  • NAME_PATTERN: o padrão de nomenclatura das VMs
  • INSTANCE_SELECTION_1: o nome da primeira seleção de instância
  • INSTANCE_SELECTION_2: o nome da segunda seleção de instância
  • MACHINE_TYPE_1, MACHINE_TYPE_2, MACHINE_TYPE_3: os tipos de máquina a serem usados para as VMs
  • IMAGE_PROJECT: o projeto que contém a imagem
  • IMAGE: o nome da imagem ou família de imagens a ser usada
  • PROJECT_ID: ID do projeto;
  • REGION: a região em que as VMs serão criadas.