Como consumir e gerenciar reservas

Neste documento, você verá como consumir e gerenciar reservas de recursos zonais do Compute Engine. As reservas fornecem um nível de garantia muito alto para conseguir capacidade para recursos zonais do Compute Engine. Para saber mais sobre reservas, consulte Reservas para recursos zonais do Compute Engine. Para saber como criar reservas, consulte Como criar uma reserva para um único projeto ou Como criar uma reserva compartilhada.

Antes de começar

Como consumir instâncias reservadas

Ao criar uma instância de máquina virtual (VM), defina a sinalização de afinidade de reserva dela para escolher se a instância pode usar qualquer reserva correspondente disponível (padrão), usar uma reserva específica ou não fazer reservas. Para uma instância consumir a partir de uma reserva específica, essa reserva precisa ser criada com a sinalização de necessidade de reserva específica correspondente.

Em todos os casos, uma instância de VM só poderá consumir uma reserva se as propriedades dela corresponderem exatamente às propriedades da instância da reserva:

  • Zona
  • Tipo de máquina (família de máquinas, vCPUs e memória)
  • Plataforma mínima de CPU
  • Tipo de GPU
  • Contagem de GPUs
  • Interface SSD local
  • Contagem de SSD local

Para mais informações, consulte Como as reservas funcionam.

Como consumir instâncias de qualquer reserva correspondente

Nesse modelo, as instâncias existentes e novas serão contabilizadas automaticamente na reserva se as propriedades dessa instância corresponderem às propriedades da instância reservada. Esse modelo é útil quando você cria e exclui muitas VMs e quer que as reservas sejam usadas sempre que possível.

Ao usar esse modelo de consumo, as instâncias priorizam o consumo de qualquer reserva de projeto único correspondente antes de consumir qualquer reserva compartilhada correspondente, uma vez que as reservas posteriores estão mais amplamente disponíveis. Para mais informações sobre como as instâncias são consumidas automaticamente, consulte a ordem de consumo.

Para usar esse modelo, exclua a sinalização --require-specific-reservation ao criar suas reservas, para que as instâncias correspondentes possam consumir essas reservas automaticamente.

Console

  1. Crie uma reserva aberta.

    1. No Console do Cloud, acesse a página Descontos por uso contínuo.

      Acesse "Descontos por uso contínuo"

    2. Para criar uma reserva autônoma sem compromisso pai, clique em Criar reserva.

    3. Nomeie sua reserva, por exemplo: reservation-01.

    4. Em Usar com instância de VM, selecione Usar reserva automaticamente para que qualquer instância correspondente possa usar essa reserva automaticamente.

    5. Escolha a Região e a Zona em que você quer reservar recursos.

    6. Especifique o Número de instâncias de VM que você quer reservar.

    7. Especifique os recursos que você quer que cada instância tenha:

      • Número de vCPUs
      • Plataforma mínima de CPU
      • Quantidade de memória
      • GPUs
      • SSD local (conforme necessário)
    8. Clique no botão Criar para criar a reserva.

  2. Crie uma instância de VM que vise qualquer reserva aberta e que corresponda às propriedades da instância em reservation-01, incluindo a zona, tipo de máquina (família de máquinas, vCPUs e memória), plataforma mínima de CPU, quantidade e tipo de GPU e quantidade e interface de SSD local

    1. No Console do Google Cloud, acesse a página Criar uma instância.

      Acesse "Criar uma instância"

    2. Especifique um nome para sua VM.

    3. Na seção Tipo de máquina, especifique uma máquina que corresponda às propriedades de reservation-01. Por exemplo, para consumir uma reserva com especificação de uma plataforma de CPU mínima ou GPUs, personalize esta VM para corresponder à reserva.

    4. Expanda a seção Rede, discos, segurança, gerenciamento, locatário único e faça o seguinte:

      1. Expanda a seção Discos.
      2. Se sua reserva incluir SSDs locais, para adicionar SSDs locais que correspondam à interface e quantidade de SSDs locais da reserva, clique em Adicionar SSDs locais.
      3. Expanda a seção Gerenciamento.
      4. Na lista Reservas, clique em Usar automaticamente a reserva criada.
    5. Clique em Criar.

gcloud

  1. Crie uma reserva aberta chamada reservation-01.

    gcloud compute reservations create reservation-01 \
        --machine-type=n2-standard-32 \
        --min-cpu-platform "Intel Cascade Lake" \
        --vm-count=2 \
        --zone=us-central1-a
    
  2. Crie uma instância de VM que vise qualquer reserva aberta e que corresponda às propriedades da instância em reservation-01, incluindo a zona, tipo de máquina (família de máquinas, vCPUs e memória), plataforma mínima de CPU, quantidade e tipo de GPU e quantidade e interface de SSD local

    gcloud compute instances create instance-1 \
        --machine-type=n2-standard-32 \
        --min-cpu-platform "Intel Cascade Lake" \
        --zone=us-central1-a \
        --reservation-affinity=any
    

API

  1. Crie uma reserva aberta chamada reservation-01.

    POST https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/reservations
    
    {
      "name":"reservation-01",
      "specificReservation":{
        "count":"2",
        "instanceProperties":{
          "machineType":"n2-standard-32",
          "minCpuPlatform": "Intel Cascade Lake",
        }
      },
      "specificReservationRequired": false
    }
    
  2. Crie uma instância de VM que vise qualquer reserva aberta e que corresponda às propriedades da instância em reservation-01, incluindo a zona, tipo de máquina (família de máquinas, vCPUs e memória), plataforma mínima de CPU, quantidade e tipo de GPU e quantidade e interface de SSD local

    POST https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/instances
    
    {
      "name": "instance-1",
      "machineType": "zones/us-central1-a/machineTypes/n2-standard-32",
      "minCpuPlatform": "Intel Cascade Lake",
      "reservationAffinity":
      {
        "consumeReservationType": "ANY_RESERVATION"
      },
      ...
    }
    

Como consumir instâncias de uma reserva específica

Neste modelo, apenas novas instâncias que visam uma reserva específica pelo nome consomem essa reserva, e a reserva não é consumida automaticamente. Este modelo é útil quando você quer manter uma certa quantidade de capacidade como backup para eventos especiais.

Ao criar a reserva, especifique que as instâncias precisam segmentar a reserva específica usando um dos métodos a seguir:

  • No Console do Cloud, marque a caixa de seleção Selecionar reserva específica.
  • Na ferramenta gcloud, inclua a sinalização --require-specific-reservation.
  • Na API Compute Engine, defina o campo specificReservationRequired como true.

Em seguida, crie VMs que tenham como alvo específico essa reserva, e que correspondam às propriedades dela.

Se você estiver usando um modelo de instância para criar VMs em um grupo de instâncias gerenciado e regional, crie reservas idênticas com o mesmo nome em cada zona aplicável. Em seguida, escolha as reservas mencionando-as por nome no modelo de instância do grupo.

Por exemplo, crie uma reserva específica chamada reservation-02 e, em seguida, crie uma instância correspondente que vise essa reserva e que corresponda às propriedades da instância da reserva.

Dependendo do tipo de instância que você quer consumir, siga as etapas em Como consumir uma reserva específica de projeto única ou Como consumir uma reserva compartilhada específica.

Como consumir uma reserva específica de projeto único

Para consumir uma reserva específica de projeto único, use o Console do Cloud, a ferramenta gcloud ou a API Compute Engine.

Console

  1. Crie uma reserva com recursos que só podem ser usados por instâncias que visam especificamente essa reserva por nome.

    1. No Console do Cloud, acesse a página Descontos por uso contínuo.

      Acesse "Descontos por uso contínuo"

    2. Clique em Criar reserva para criar uma reserva autônoma sem compromisso pai.

    3. Nomeie sua reserva, por exemplo: reservation-02.

    4. Em Usar com instância da VM, marque Selecionar reserva específica para que apenas instâncias correspondentes que visam especificamente essa reserva por nome possam usá-la.

    5. Escolha a Região e a Zona em que você quer reservar recursos.

    6. Especifique o Número de instâncias de VM que você quer reservar.

    7. Especifique os recursos que você quer que cada instância tenha:

      • Número de vCPUs
      • Plataforma mínima de CPU
      • Quantidade de memória
      • GPUs
      • SSD local
    8. Clique em Criar.

  2. Crie uma instância de VM que vise essa reserva específica pelo nome.

    Certifique-se de que as propriedades da instância correspondam às propriedades dessa reserva específica, incluindo zona, tipo de máquina (família de máquinas, vCPUs e memória), plataforma mínima de CPU, quantidade e tipo de GPU e interface e tamanho da SSD local.

    1. No Console do Google Cloud, acesse a página Criar uma instância.

      Acesse "Criar uma instância"

    2. Especifique um nome para sua VM.

    3. Na seção Tipo de máquina, selecione uma máquina que corresponda às propriedades de reservation-01. Por exemplo, para consumir uma reserva com especificação de uma plataforma de CPU mínima, personalize esta instância para corresponder a ela.

    4. Expanda a seção Rede, discos, segurança, gerenciamento, locatário único e faça o seguinte:

      1. Expanda a seção Discos.
      2. Se sua reserva incluir SSDs locais, para adicionar SSDs locais que correspondam à interface e quantidade de SSDs locais da reserva, clique em Adicionar SSDs locais.
      3. Expanda a seção Gerenciamento.
      4. Na lista Reservas, selecione uma reserva disponível com propriedades correspondentes, por exemplo, reservation-02.
    5. Para criar a VM, clique em Criar.

gcloud

  1. Crie uma reserva com o nome reservation-02 com a sinalização --require-specific-reservation. Esses recursos reservados só podem ser usados por instâncias que visem especificamente essa reserva pelo nome.

    gcloud compute reservations create reservation-02 \
        --machine-type=n2-standard-32 \
        --min-cpu-platform "Intel Cascade Lake" \
        --vm-count=10 \
        --zone=us-central1-a \
        --require-specific-reservation
    
  2. Crie uma instância de VM que vise reservation-02 pelo nome usando as sinalizações --reservation-affinity e --reservation.

    Certifique-se de que as propriedades da instância correspondam às propriedades da instância da reserva, incluindo a zona, tipo de máquina (família de máquinas, vCPUs e memória), plataforma mínima de CPU, quantidade e tipo de GPU e tamanho e interface da SSD local.

    gcloud compute instances create instance-2 \
        --machine-type=n2-standard-32 \
        --min-cpu-platform "Intel Cascade Lake" \
        --zone=us-central1-a \
        --reservation-affinity=specific \
        --reservation=reservation-02
    

API

  1. Crie uma reserva chamada reservation-02 com o campo specificReservationRequired definido como true.

    POST https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/reservations
    
    {
      "name":"reservation-02",
      "specificReservation":{
        "count":"10",
        "instanceProperties":{
          "machineType":"n2-standard-32",
          "minCpuPlatform": "Intel Cascade Lake",
        }
      },
      "specificReservationRequired": true
    }
  2. Crie uma instância de VM que vise reservation-02 pelo nome usando o campo reservationAffinity.

    Certifique-se de que as propriedades da instância correspondam às propriedades da instância da reserva, incluindo a zona, tipo de máquina (família de máquinas, vCPUs e memória), plataforma mínima de CPU, quantidade e tipo de GPU e tamanho e interface da SSD local.

    POST https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/instances
    
    {
      "name": "instance-2",
      "machineType": "zones/us-central1-a/machineTypes/n2-standard-32",
      "minCpuPlatform": "Intel Cascade Lake",
      "reservationAffinity":
      {
        "consumeReservationType": "SPECIFIC_RESERVATION",
        "key": "compute.googleapis.com/reservation-name",
        "values":
        ["reservations/reservation-02"
        ]
      },
      ...
    }

Como consumir uma reserva compartilhada específica

Para consumir uma reserva específica de projeto único, use a ferramenta gcloud ou a API Compute Engine.

gcloud

  1. Crie uma reserva com o nome reservation-02 com a sinalização --require-specific-reservation. Esses recursos reservados só podem ser usados por instâncias que visem especificamente essa reserva pelo nome.

    gcloud compute reservations create reservation-02 \
        --machine-type=n2-standard-32 \
        --min-cpu-platform "Intel Cascade Lake" \
        --vm-count=10 \
        --zone=us-central1-a \
        --project=my-owner-project \
        --share-setting=projects \
        --share-with=project-1,project-2 \
        --require-specific-reservation
    
  2. Crie uma instância de VM que vise reservation-02 pelo nome usando as sinalizações --reservation-affinity e --reservation. Para consumir essa reserva de qualquer projeto de consumidor com que essa reserva seja compartilhada, você também precisa especificar o projeto que criou a reserva, my-owner-project.

    Certifique-se de que as propriedades da instância correspondam às propriedades da instância da reserva, incluindo a zona, tipo de máquina (família de máquinas, vCPUs e memória), plataforma mínima de CPU, quantidade e tipo de GPU e tamanho e interface da SSD local.

    gcloud compute instances create instance-2 \
        --machine-type=n2-standard-32 \
        --min-cpu-platform "Intel Cascade Lake" \
        --zone=us-central1-a \
        --reservation-affinity=specific \
        --reservation=projects/my-owner-project/reservations/reservation-02
    

API

  1. Crie uma reserva chamada reservation-02 com o campo specificReservationRequired definido como true.

    POST https://compute.googleapis.com/compute/v1/projects/my-owner-project/zones/us-central1-a/reservations
    
    {
      "name":"reservation-02",
      "specificReservation":{
        "count":"10",
        "instanceProperties":{
          "machineType":"n2-standard-32",
          "minCpuPlatform": "Intel Cascade Lake",
        }
      },
      "shareSettings": {
        "shareType": "SPECIFIC_PROJECTS",
        "projects": ["project-1", "project-2"],
      }
      "specificReservationRequired": true
    }
  2. Crie uma instância de VM que vise reservation-02 pelo nome usando o campo reservationAffinity. Para consumir essa reserva de qualquer projeto de consumidor com que essa reserva seja compartilhada, você também precisa especificar o projeto que criou a reserva, my-owner-project.

    Certifique-se de que as propriedades da instância correspondam às propriedades da instância da reserva, incluindo a zona, tipo de máquina (família de máquinas, vCPUs e memória), plataforma mínima de CPU, quantidade e tipo de GPU e tamanho e interface da SSD local.

    POST https://compute.googleapis.com/compute/v1/projects/project-2/zones/us-central1-a/instances
    
    {
      "name": "instance-2",
      "machineType": "zones/us-central1-a/machineTypes/n2-standard-32",
      "minCpuPlatform": "Intel Cascade Lake",
      "reservationAffinity":
      {
        "consumeReservationType": "SPECIFIC_RESERVATION",
        "key": "compute.googleapis.com/reservation-name",
        "values":
        ["projects/my-owner-project/reservations/reservation-02"
        ]
      },
      ...
    }

Como criar instâncias sem consumir reservas

Para evitar explicitamente o consumo de recursos de qualquer reserva, defina a sinalização de afinidade de reserva como "nenhuma" ao criar a VM. Ou, para evitar implicitamente o uso de qualquer uma das suas reservas, crie uma instância que não corresponda às propriedades de instância de nenhuma das suas reservas.

Console

  1. Crie uma VM que não consuma explicitamente de uma reserva.

    1. No Console do Google Cloud, acesse a página Criar uma instância.

      Acesse "Criar uma instância"

    2. Crie uma VM. Para mais informações, consulte Como criar e iniciar uma instância de VM.

    3. Expanda a seção Rede, discos, segurança, gerenciamento, locatário único e faça o seguinte:

      1. Expanda a seção Gerenciamento.
      2. Para garantir que essa VM não consuma de reservas atuais, na lista Reservas, selecione Não usar.
    4. Clique em Criar.

gcloud

Crie uma instância que não consuma explicitamente uma reserva.

gcloud compute instances create instance-3 --reservation-affinity=none

Ou crie uma instância que não corresponda às propriedades da instância em nenhuma de suas reservas. Para revisar suas propriedades de reserva, consulte como listar e descrever reservas.

API

Crie uma instância que não consuma explicitamente uma reserva.

POST https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/instances

{
  "machineType": "zones/us-central1-a/machineTypes/n2-standard-16",
  "name": "instance-3",
  "reservationAffinity":
  {
    "consumeReservationType": "NO_RESERVATION"
  },
  ...
}

Ou crie uma instância que não corresponda às propriedades da instância em nenhuma de suas reservas. Para revisar suas propriedades de reserva, consulte como listar e descrever reservas.

Como garantir a utilização de reservas

Se você não conseguir consumir seus recursos reservados, confirme se as configurações de reserva e instância estão corretas e se as reservas ainda têm instâncias que não estão em uso no momento. Para fazer isso, verifique se as propriedades da instância da reserva correspondem às propriedades da instância e se a reserva ainda tem instâncias que não estão em uso no momento. Como alternativa, crie uma reserva específica e crie uma instância que vise essa reserva específica e analise os erros resultantes.

Verificar propriedades da reserva

As propriedades da instância da reserva devem corresponder às propriedades no comando de criação da instância. Para verificar:

  1. Descreva a reserva. Se todas as instâncias da reserva estiverem em uso por outras instâncias, será preciso redimensionar a reserva se você quiser reservar mais capacidade. Caso contrário, verifique as propriedades da instância da reserva especificamente para:

    • zone
    • specificReservationRequired
      • Se definido como true, seu comando de criação de instância deve visar esta reserva pelo nome.
    • machineType
    • guestAccelerators.acceleratorType
    • guestAccelerators.acceleratorCount
    • minCpuPlatform
      • Se você tiver uma instância de VM com minCpuPlatform e quiser criar uma reserva que use a instância, crie a reserva com propriedades correspondentes, incluindo minCpuPlatform correspondente.
      • Se você tiver uma reserva com minCpuPlatform e quiser criar uma instância que use a reserva, crie a instância com propriedades correspondentes, incluindo um minCpuPlatform correspondente.
    • localSsds.interface
      • Se você tiver uma reserva para uma instância de VM com várias SSDs locais, a instância de VM que consome a reserva precisará ter o mesmo número de SSDs locais com correspondência de um localSsds.interface para cada SSD local.
  2. Crie uma instância que corresponda a essas propriedades.

  3. Descreva a instância para verificar se suas propriedades correspondem às propriedades da instância da reserva. Por exemplo, com a ferramenta gcloud, use o comando instances describe.

  4. Descreva sua reserva para verificar se a inUseCount foi incrementada.

    • Se o parâmetro inUseCount não tiver sido alterado, as propriedades não são correspondentes.
    • Se a inUseCount tiver sido incrementada, sua reserva está sendo usada.

Se ainda não for possível criar uma reserva depois de verificar as propriedades de instância e capacidade, o erro poderá ser causado pela disponibilidade do recurso. Saiba mais sobre solução de problemas de disponibilidade de recursos.

Visar uma reserva específica

Se você tentar criar uma instância que vise uma reserva específica, ela não poderá ser criada a menos que corresponda às propriedades da instância da reserva. Use este método para verificar se você tem as propriedades corretas da instância.

  1. Crie uma reserva com a opção specificReservationRequired.
  2. Crie uma instância que explicitamente corresponda às propriedades da instância da reserva e que vise a reserva pelo nome por meio da propriedade de afinidade da reserva.
    • Se as propriedades da instância não forem correspondentes, você verá um erro.
    • Se as propriedades da instância forem correspondentes, sua reserva será usada.

Se ainda não for possível criar uma reserva depois de verificar as propriedades de instância e capacidade, o erro poderá ser causado pela disponibilidade do recurso. Saiba mais sobre solução de problemas de disponibilidade de recursos.

Como listar e descrever reservas

Liste e visualize detalhes sobre sua reserva usando o console, a ferramenta gcloud ou a API.

Console

  1. No Console do Cloud, acesse a página Descontos por uso contínuo.

    Acesse "Descontos por uso contínuo"

  2. Clique em Reservas.

A lista de reservas inclui detalhes sobre cada uma. A coluna Máquinas usadas (total) descreve a utilização de cada reserva. Por exemplo, uma reserva que exibe 25 (50) é uma reserva para 50 instâncias, e 25 delas foram consumidas e estão em uso no momento.

gcloud

Liste suas reservas com o comando gcloud compute reservations list:

gcloud compute reservations list [--filter="zone:('ZONE')"]

NAME             IN_USE_COUNT   COUNT   ZONE
reservation-04   25             50      us-central1-a
reservation-05   0              100     us-central1-b

Descreva suas reservas com o comando gcloud compute reservations describe:

gcloud compute reservations describe RESERVATION_NAME --zone=ZONE

kind: compute#reservation
name: reservation-05
selfLink: https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-east1-d/reservations/reservation-04
specificReservation:
  count: '50'
  inUseCount: '25'
  instanceProperties:
    guestAccelerators:
    - acceleratorCount: 1
      acceleratorType: nvidia-tesla-k80
    localSsds:
    - diskSizeGb: '375'
      interface: SCSI
    machineType: n1-standard-2
    minCpuPlatform: Any CPU Platform
specificReservationRequired: false
status: READY
zone: https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-east1-d    

É possível usar os valores count e inUseCount para determinar a utilização de cada reserva. Neste exemplo, 50 instâncias foram reservadas para reservation-04 e 25 delas foram consumidas na reserva e estão em uso atualmente.

Para criar uma instância que usa essa reserva, lembre-se de associar as propriedades da instância da reserva. Por exemplo:

gcloud compute instances create my-instance \
    --accelerator=type=nvidia-tesla-k80,count=1 \
    --maintenance-policy terminate \
    --local-ssd=size=375,interface=scsi \
    --machine-type n1-standard-2 \
    --zone us-east1-d 

API

Na API, liste suas reservas fazendo uma solicitação GET para o método reservations.list.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME

{
  "id": "4100668622331754141",
  "creationTimestamp": "2019-09-27T08:21:14.707-07:00",
  "selfLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-east1-d/reservations/reservation-03",
  "zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-east1-d",
  "name": "reservation-03",
  "specificReservation": {
    "instanceProperties": {
      "machineType": "n1-standard-2"
    },
    "count": "100",
    "inUseCount": "0"
  },
  "specificReservationRequired": false,
  "status": "READY",
  "kind": "compute#reservation"
},
{
  "id": "2533514314332214789",
  "creationTimestamp": "2019-09-27T08:21:14.707-07:00",
  "selfLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-east1-d/reservations/reservation-04",
  "zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-east1-d",
  "name": "reservation-04",
  "specificReservation": {
    "instanceProperties": {
      "machineType": "n1-standard-2",
      "guestAccelerators": [
        {
          "acceleratorType": "nvidia-tesla-k80",
          "acceleratorCount": 1
        }
      ],
      "minCpuPlatform": "Any CPU Platform",
      "localSsds": [
        {
          "diskSizeGb": "375",
          "interface": "SCSI"
        }
      ]
    },
    "count": "50",
    "inUseCount": "25"
  },
  "specificReservationRequired": false,
  "status": "READY",
  "kind": "compute#reservation"
}

Descreva uma reserva chamando o método reservations.get.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME

{
  "id": "2533514314332214789",
  "creationTimestamp": "2019-09-27T08:21:14.707-07:00",
  "selfLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-east1-d/reservations/reservation-04",
  "zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-east1-d",
  "name": "reservation-04",
  "specificReservationRequired": false,
  "status": "READY",
  "kind": "compute#reservation",
  "specificReservation": {
    "instanceProperties": {
      "machineType": "n1-standard-2",
      "guestAccelerators": [
        {
          "acceleratorType": "nvidia-tesla-k80",
          "acceleratorCount": 1
        }
      ],
      "minCpuPlatform": "Any CPU Platform",
      "localSsds": [
        {
          "diskSizeGb": "375",
          "interface": "SCSI"
        }
      ]
    },
    "count": "50",
    "inUseCount": "25"
  }
}

É possível usar os valores count e inUseCount para determinar a utilização de cada reserva. Neste exemplo, 50 instâncias estão reservadas e 25 delas foram consumidas a partir da reserva e estão em uso no momento

Como modificar reservas

Redimensione uma reserva se você quiser alterar o número de VMs reservadas. Exclua uma reserva se você não precisar mais dela.

Será possível redimensionar ou excluir uma reserva somente se ela não estiver vinculada a um compromisso.

Como redimensionar uma reserva

É possível redimensionar o número de VMs em uma reserva que não está vinculada a um compromisso usando a ferramenta gcloud ou a API.

gcloud

Redimensione sua reserva usando o comando gcloud compute reservations update. Por exemplo:

Crie uma reserva para duas instâncias de VM:

gcloud compute reservations create reservation-01 \
    --machine-type=n2-standard-32 \
    --zone=us-central1-a \
    --vm-count=2

Redimensione a reserva de duas a dez instâncias de VM:

gcloud compute reservations update reservation-01 \
    --zone=us-central1-a \
    --vm-count=10

API

Na API, construa uma POST solicitação para o reservations.resize e inclua o novo specificSkuCount no corpo da solicitação. O corpo da solicitação a seguir atualiza a contagem de VMs da reserva para 10.

POST https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/zones/<var>ZONE</var>/reservations/<var>RESERVATION_NAME</var>/resize

{"specificSkuCount": "10"}

A solicitação de atualização será bem-sucedida se, no momento da solicitação, houver recursos suficientes na zona de destino e uma cota suficiente na região de destino.

Como excluir uma reserva

É possível excluir reservas que não estão vinculadas a um compromisso usando o console, a ferramenta gcloud ou a API.

Console

  1. No Console do Cloud, acesse a página Descontos por uso contínuo.

    Acesse "Descontos por uso contínuo"

  2. Clique em Reservas para ver uma lista delas.

  3. Marque a caixa de seleção ao lado de cada reserva que você quer excluir.

  4. Clique em Excluir reserva.

gcloud

É possível liberar reservas usando o comando delete:

gcloud compute reservations delete <var>RESERVATION_NAME</var> --zone <var>ZONE</var>

API

Na API, crie uma solicitação DELETE para o método reservation.delete.

DELETE https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/zones/<var>ZONE</var>/reservations/<var>RESERVATION_NAME</var>

Depois que o comando de exclusão for concluído com sucesso, você não será mais cobrado pela reserva, e os recursos não serão mais reservados para você. A exclusão de uma reserva não tem efeito em nenhuma instância em execução vinculada a essa reserva. Você ainda é cobrado por essas instâncias.

Como combinar reservas com descontos por uso contínuo

Um desconto por uso contínuo fornece um contrato de um ou três anos com desconto, mas não reserva capacidade em uma zona específica. Uma reserva garante que a capacidade seja mantida em uma zona específica, mesmo que as VMs reservadas não estejam em execução. Ao combinar uma reserva com um compromisso, é possível conseguir recursos reservados e com desconto.

Por padrão, quando você cria uma reserva, qualquer desconto por uso contínuo aplicável para núcleos e memória se aplicará automaticamente às suas instâncias de VM. No entanto, para receber o desconto em GPUs e SSDs locais, é preciso criar uma reserva para esses recursos ao comprar o compromisso.

Depois de comprar um compromisso, não será possível cancelá-lo. Para mais informações, consulte Descontos por uso contínuo.

Como comprar um compromisso para GPUs ou SSDs locais

Para adquirir um compromisso para GPUs ou SSDs locais:

  • Adquira um compromisso N1 de uso geral. As GPUs são compatíveis apenas com os tipos de máquina N1, com exceção das GPUs A100.
  • Crie uma reserva que inclua GPUs ou SSDs locais enquanto estiver comprando o compromisso;
  • não é preciso se comprometer com vCPUs ou memória.

É preciso adquirir compromissos por tipos específicos de GPU. Por exemplo, é possível comprar NVIDIA P100 ou NVIDIA V100s, mas não é possível adquirir compromissos para as GPUs NVIDIA P100 e aplicá-las a outros tipos de GPU.

A quantidade de GPUs e SSDs locais reservada precisa ser igual ao valor com o qual você se comprometeu. Por exemplo, se você quer reservar quatro GPUs V100, é preciso se comprometer com quatro GPUs V100. No entanto, a quantidade de vCPU e memória que você reserva pode ser maior ou menor do que a que você se compromete.

Se você quer se comprometer somente com GPUs ou SSDs locais, é possível especificar 0 para compromissos de memória e vCPU. Mas a reserva que você associa ao seu compromisso precisa conter as mesmas GPUs e SSDs locais que o compromisso, bem como os tipos de máquina (com vCPUs e memória) que você quer reservar.

Adquira um compromisso com uma reserva anexada usando o Console do Cloud, a ferramenta gcloud ou a API.

Console

  1. No Console do Google Cloud, acesse a página Descontos por uso contínuo.

    Acesse "Descontos por uso contínuo"

  2. Para adquirir um novo compromisso, clique em Comprar compromisso.

  3. Dê um nome ao compromisso e escolha a região em que ele será aplicado.

  4. Para Tipo de compromisso, selecione Propósito geral.

  5. Escolha uma Duração de um ou três anos para o compromisso.

  6. Insira a quantidade de Núcleos e Memória que você quer adquirir. Se você só quiser reservar e se comprometer com GPUs ou SSDs locais sem se comprometer com vCPUs e memória, especifique 0 para as quantidade de compromissos de vCPU e memória.

  7. Clique em Adicionar GPUs e selecione o Tipo de GPU e o Número de GPUs com os quais você quer se comprometer.

  8. Clique em Adicionar SSD local e especifique o número de discos com que você quer se comprometer.

  9. Clique em Adicionar nova reserva para criar uma ou mais reservas para instâncias que usarão as GPUs e SSDs locais.

    1. Nomeie sua reserva.
    2. Em Usar com instância de VM:
      • Selecione Selecionar reserva específica se quiser usar os recursos desta reserva apenas ao criar instâncias correspondentes que visam especificamente essa reserva por nome;
      • Selecione Usar reserva automaticamente, se quiser que instâncias correspondentes usem automaticamente essa reserva.
    3. Escolha a Zona em que você quer reservar recursos.
    4. Especifique o Número de instâncias de VM que você quer reservar.
    5. Especifique os recursos a serem reservados para cada instância:
      • Se você tiver um modelo de instância, clique em Usar modelo de instância e selecione um modelo de instância na lista.
      • Caso contrário, clique em Especificar tipo de máquina.
        1. Clique em Personalizar para usar o controle deslizante e selecionar Núcleos e Memória para seu tipo de máquina.
        2. Especifique a plataforma de CPU.
        3. Para adicionar GPUs, digite o número de GPUs e o tipo de GPU.
        4. Outra opção é especificar o número de SSDs locais que você quer adicionar a cada instância e especificar o tipo de interface a ser usado.
    6. Clique no botão Concluído para criar a reserva.
  10. Clique no botão Comprar para adquirir o compromisso.

  11. Leia os Termos de compra e clique em Comprar quando estiver tudo pronto para adquirir o compromisso.

gcloud

Use o comando gcloud compute commmitments create para adquirir um compromisso, e inclua sinalizadores para criar uma reserva anexada.

Por exemplo, o compromisso a seguir inclui quatro GPUs e uma reserva a ser usada em duas instâncias n1-standard-32 em us-central1-a.

gcloud compute commitments create commitment-01 \
    --region=us-central1 \
    --resources=vcpu=96,memory=624GB \
    --resources-accelerator=type=nvidia-tesla-v100,count=4 \
    --plan 12-month \
    --reservation=reservation-01 \
    --reservation-zone=us-central1-a \
    --machine-type=n1-standard-16 \
    --accelerator=type=nvidia-tesla-v100,count=2 \
    --vm-count=2

Se você quiser reservar e se comprometer com GPUs ou SSDs locais sem se comprometer com vCPUs e memória, especifique 0 para as quantidades desses itens.

gcloud compute commitments create commitment-01 \
    --region=us-west2 \
    --resources=vcpu=0,memory=0 \
    --resources-accelerator=type=nvidia-tesla-p4,count=1 \
    --plan 12-month \
    --reservation=reservation-01 \
    --reservation-zone=us-west2-b \
    --machine-type=n1-standard-2 \
    --accelerator=type=nvidia-tesla-p4,count=1 \
    --vm-count=1

Para criar várias reservas ao adquirir um compromisso, use um arquivo YAML que contenha as propriedades da reserva. Exemplo:

gcloud compute commitments create commitment-01 \
    --region=us-central1 \
    --resources=vcpu=96,memory=624,local-ssd=750 \
    --resources-accelerator=type=nvidia-tesla-v100,count=1 \
    --plan 12-month \
    --reservations-from-file=YAML_FILE

Por exemplo, o arquivo YAML a seguir contém duas reservas. A primeira reserva, res-01, contém uma instância n1-standard-2 com uma GPU e é uma reserva visada, o que significa que você precisa visar especificamente essa reserva, mencionando-a pelo nome, para usar suas instâncias reservadas. A segunda reserva, res-02, contém uma instância de VM n1-standard-2 com dois tipos de SSDs locais anexados.

- reservation: res-01
  reservation_zone: us-central1-a
  require_specific_reservation: true
  vm_count: 1
  machine_type: n1-standard-2
  accelerator:
  - count: 1
    type: nvidia-tesla-v100
- reservation: res-02
  reservation_zone: us-central1-a
  vm_count: 1
  machine_type: n1-standard-2
  local_ssd:
  - interface: scsi
    size: 375
  - interface: nvme
    size: 375

API

Use o método regionCommitments.insert e inclua o campo reservations para definir as propriedades da reserva. Por exemplo, o compromisso a seguir inclui quatro GPUs e uma reserva a ser usada em duas instâncias em us-central1-a.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/commitments

{
  "name": "commitment-01",
  "plan": "TWELVE_MONTH",
  "resources":
  [
    {
      "amount": "96",
      "type": "VCPU"
    },
    {
      "amount": "638976",
      "type": "MEMORY"
    },
    {
      "acceleratorType": "nvidia-tesla-v100",
      "amount": "4",
      "type": "ACCELERATOR"
    }
  ],
  "reservations":
  [
    {
      "name": "reservation-01",
      "specificReservation":
      {
        "count": "2",
        "instanceProperties":
        {
          "guestAccelerators":
          [
            {
              "acceleratorCount": 2,
              "acceleratorType": "nvidia-tesla-v100"
            }
          ],
          "machineType": "n1-standard-8"
        }
      },
      "specificReservationRequired": false,
      "zone": "us-central1-a"
    }
  ]
}

Se você só quiser reservar e se comprometer com GPUs ou SSDs locais sem se comprometer com vCPUs e memória, especifique 0 para as quantidade de compromissos de vCPU e memória. Exemplo:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/commitments

{
  "name": "commitment-01",
  "plan": "TWELVE_MONTH",
  "resources":
  [
    {
      "amount": "0",
      "type": "VCPU"
    },
    {
      "amount": "0",
      "type": "MEMORY"
    },
    {
      "acceleratorType": "nvidia-tesla-v100",
      "amount": "4",
      "type": "ACCELERATOR"
    }
  ],
  "reservations":
  [
    {
      "name": "reservation-01",
      "specificReservation":
      {
        "count": "2",
        "instanceProperties":
        {
          "guestAccelerators":
          [
            {
              "acceleratorCount": 2,
              "acceleratorType": "nvidia-tesla-v100"
            }
          ],
          "machineType": "n1-standard-8"
        }
      },
      "specificReservationRequired": false,
      "zone": "us-central1-a"
    }
  ]
}

O compromisso será criado de maneira bem-sucedida somente se houver recursos suficientes na zona de destino, além de uma cota suficiente, no momento da solicitação.

Quando você cria um compromisso com uma reserva associada, não é possível excluí-la durante a vigência do compromisso. Quando o compromisso expirar, o Compute Engine excluirá automaticamente todas as reservas anexadas.

Se você precisa transferir GPUs ou SSDs locais através de reservas comprometidas, consulte Como modificar reservas vinculadas a compromissos.

Como modificar reservas vinculadas a compromissos

Se um compromisso tiver uma ou mais reservas com GPUs ou SSDs locais, será possível usar a ferramenta gcloud ou a API para transferir GPUs ou SSDs locais nessas reservas. Por exemplo, é possível mover as GPUs de uma reserva para outra nova.

Limitações:

  • Só é possível mover recursos entre duas reservas. Uma é a reserva de origem e a outra é a de destino. A reserva de origem já precisa existir. O destino pode ser uma reserva atual ou nova.
  • As reservas de origem e destino precisam estar na mesma zona.
  • Não é possível modificar as propriedades do recurso em reservas atuais. Só é possível transferir recursos atuais de uma reserva para outra.
  • A quantidade total de GPUs e SSDs locais precisa permanecer constante.
  • Só é possível alterar 100 VMs por solicitação. Se quiser atualizar um número maior, chame a API várias vezes ou entre em contato com o suporte do Google Cloud.
  • Não é possível transferir vCPUs ou memória, ou modificar outras propriedades de reservas vinculadas.

gcloud

Use o comando gcloud beta compute commitments update-reservations.

Crie um compromisso com uma reserva:

  • res-1 tem quatro instâncias n1-standard-2, cada uma com uma GPU P100 (quatro vCPUs e quatro GPUs P100). O total de recursos reservados inclui quatro GPUs P100.
gcloud beta compute commitments create my-commitment-with-reservations \
    --region=asia-east1 \
    --resources=vcpu=10,memory=32GB \
    --resources-accelerator=type=nvidia-tesla-p100,count=4 \
    --plan 12-month \
    --reservations-from-file=one-reservation.yaml

O arquivo one-reservation.yaml contém:

- reservation: res-1
  reservation_zone: asia-east1-a
  require_specific_reservation: true
  vm_count: 4
  machine_type: n1-standard-2
  accelerator:
  - count: 1
    type: nvidia-tesla-p100

Atualize o compromisso para transferir alguns recursos da res-1 para uma nova segunda reserva, res-2. Neste exemplo:

  • Modifique res-1 para ter duas instâncias n1-standard-2, cada uma com duas GPUs P100 (duas vCPUs e duas GPUs P100).
  • Adicione res-2 para ter duas instâncias n1-standard-2, cada uma com uma GPU P100 (quatro vCPUs e duas GPUs P100).

O número total de GPUs reservadas dentro do compromisso permanece constante em quatro.

gcloud beta compute commitments update-reservations my-commitment-with-reservations \
    --region=us-central1 \
    --reservations-from-file=two-reservations.yaml

O arquivo two-reservations.yaml contém:

- reservation: res-1
  reservation_zone: asia-east1-a
  require_specific_reservation: true
  vm_count: 2
  machine_type: n1-standard-2
  accelerator:
  - count: 1
    type: nvidia-tesla-p100
- reservation: res-2
  reservation_zone: asia-east1-a
  require_specific_reservation: true
  vm_count: 2
  machine_type: n1-standard-2
  accelerator:
  - count: 1
    type: nvidia-tesla-p100

API

Use o método regionCommitments.updateReservations.

Por exemplo, crie um compromisso com a reserva a seguir:

  • res-1 tem quatro instâncias n1-standard-2, cada uma com uma GPU nvidia-tesla-p100 (quatro vCPUs e quatro GPUs P100).

Neste exemplo, o total de recursos reservados inclui quatro GPUs P100.

POST https://compute.googleapis.com/compute/beta/projects/my-project/regions/asia-east1/commitments/my-commitment-with-reservation/updateReservations

{
  "name": "my-commitment-with-reservation",
  "plan": "TWELVE_MONTH",
  "reservations":
  [
    {
      "name": "res-1",
      "specificReservation":
      {
        "count": "4",
        "instanceProperties":
        {
          "guestAccelerators":
          [
            {
              "acceleratorCount": 1,
              "acceleratorType": "nvidia-tesla-p100"
            }
          ],
          "machineType": "n1-standard-2"
        }
      },
      "specificReservationRequired": true,
      "zone": "asia-east1-a"
    }
  ],
  "resources":
  [
    {
      "amount": "10",
      "type": "VCPU"
    },
    {
      "amount": "32768",
      "type": "MEMORY"
    },
    {
      "acceleratorType": "nvidia-tesla-p100",
      "amount": "4",
      "type": "ACCELERATOR"
    }
  ]
}

Atualize o compromisso para transferir alguns recursos da res-1 para uma nova segunda reserva, res-2. Neste exemplo:

  • Modifique res-1 para ter duas instâncias n1-standard-2, cada uma com duas GPUs P100 (duas vCPUs e duas GPUs P100).
  • Adicione res-2 para ter duas instâncias n1-standard-2, cada uma com uma GPU P100 (quatro vCPUs e duas GPUs P100).

O número total de GPUs reservadas dentro do compromisso permanece constante em quatro.

POST https://compute.googleapis.com/compute/beta/projects/my-project/regions/asia-east1/commitments/my-commitment-with-reservation/updateReservations

{
  "reservations":
  [
    {
      "name": "res-1",
      "specificReservation":
      {
        "count": "2",
        "instanceProperties":
        {
          "guestAccelerators":
          [
            {
              "acceleratorCount": 1,
              "acceleratorType": "nvidia-tesla-p100"
            }
          ],
          "machineType": "n1-standard-2"
        }
      },
      "specificReservationRequired": true,
      "zone": "asia-east1-a"
    },
    {
      "name": "res-2",
      "specificReservation":
      {
        "count": "2",
        "instanceProperties":
        {
          "guestAccelerators":
          [
            {
              "acceleratorCount": 1,
              "acceleratorType": "nvidia-tesla-p100"
            }
          ],
          "machineType": "n1-standard-2"
        }
      },
      "specificReservationRequired": true,
      "zone": "asia-east1-a"
    }
  ]
}

Como exibir relatórios de uso de reserva

É possível exportar relatórios detalhados de uso do Compute Engine para um bucket do Cloud Storage usando o recurso de exportação de uso. Consulte Como exibir relatórios de uso para receber instruções.

O relatório de uso mostra:

  • recursos reservados que estão em uso. Essas entradas aparecem como recursos normais de vCPU, memória, GPU e SSD local;
  • recursos reservados que não estão em uso. Essas entradas têm nomes normais de SKU e URIs de recurso de reserva;
  • total de recursos reservados. Essas entradas têm nomes de SKU de reserva e URIs de recurso de reserva. Não há custos associados a essas entradas. Use essas entradas para calcular quanto de suas reservas você está usando.
Medição Formato MeasurementId Formato Resource URI
Recursos reservados que estão em uso com.google.cloud/services/compute-engine/SKU_NAME https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/RESOURCE_TYPE/RESOURCE_NAME.

Por exemplo, https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/instances/my-instance
Recursos reservados que não estão em uso com.google.cloud/services/compute-engine/SKU_NAME https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME.

Por exemplo, https://compute.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-a/reservations/my-reservation
Total de recursos reservados com.google.cloud/services/compute-engine/ReservationSKU_NAME https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME.

Por exemplo, https://compute.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-a/reservations/my-reservation

Por exemplo, no seguinte snippet de um relatório de uso para uma reserva chamada my-reservation:

  • A linha 1 mostra a RAM reservada atualmente em uso. O ResourceId da linha mostra que essa RAM é usada por uma instância chamada my-instance.
  • A linha 2 mostra a RAM reservada que não está em uso. O ResourceId da linha mostra que essa RAM reservada mantida por my-reservation; ela ainda não é usada por nenhuma instância.
  • A linha 3 mostra o total de RAM reservada da reserva.
Report Date,MeasurementId,Quantity,Unit,Resource URI,ResourceId,Location
2019-06-06,com.google.cloud/services/compute-engine/VmimageN2StandardRam,166970074857472,byte-seconds,https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central2-a/instances/my-instance,1775485842510981624,us-central2-a
2019-06-06,com.google.cloud/services/compute-engine/VmimageN2StandardRam,166970074857472,byte-seconds,https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central2-a/reservations/my-reservation,7.58809E+17,us-central2-a
2019-06-06,com.google.cloud/services/compute-engine/ReservationN2StandardRam,333940149714944,byte-seconds,https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central2-a/reservations/my-reservation,7.58809E+17,us-central2-a
...

A seguir