Como reservar recursos por zona do Compute Engine

Crie reservas para instâncias de VMs em uma zona específica, usando tipos de máquina personalizados ou predefinidos, com ou sem GPUs extras ou SSDs locais, para garantir que os recursos estejam disponíveis para suas cargas de trabalho quando você precisar deles. Depois de criar uma reserva, você começa a pagar pelos recursos reservados imediatamente e eles permanecem disponíveis indefinidamente para uso no seu projeto até que a reserva seja excluída.

Use reservas para garantir que seu projeto tenha recursos para aumentos futuros na demanda, incluindo picos planejados ou não, migração de grande número de VMs, backup e recuperação de desastre ou para crescimento e buffer planejados.

Quando você não precisar mais de uma reserva, exclua-a para interromper as cobranças por ela. Como as reservas consomem recursos como VMs normais, cada uma delas é cobrada com base nas taxas atuais sob demanda, que incluem descontos por uso prolongado, e estão qualificadas para descontos por uso contínuo.

Antes de começar

Vantagens

As reservas oferecem os benefícios a seguir:

  • Reserve as máquinas para que estejam sempre disponíveis, mesmo que você não as use imediatamente.
  • Crie uma reserva a qualquer momento e exclua-a quando quiser para deixar de pagar por ela.

  • As reservas são faturadas da mesma forma e com a mesma taxa que os recursos que estão reservando. Dessa forma, os recursos reservados são qualificados para descontos por uso contínuo e prolongado.

Limitações e restrições

As reservas têm as limitações e restrições a seguir:

  • As reservas se aplicam apenas ao uso do Compute Engine, do Cloud Dataproc e da VM do Google Kubernetes Engine.
  • As reservas não se aplicam aos tipos de máquinas f1-micro ou g1-small, VMs preemptivas, nós de locatário individuais ou outros serviços não listados acima, como Cloud SQL e Dataflow.
  • É possível reservar até 1.000 instâncias de VM por reserva.
  • É preciso ter cota suficiente em seu projeto para os recursos que você está reservando. Se a reserva for bem-sucedida, a cota referente a esse recurso será cobrada da mesma forma.
  • Os recursos são alocados quando a reserva é criada. Se não houver recursos suficientes na zona no momento da solicitação, a reserva falhará com um erro de capacidade insuficiente.
  • Quando combinadas com um desconto por uso contínuo:
    • para preços com desconto por uso contínuo para GPUs e SSDs locais, é necessário criar uma reserva ao comprar o uso contínuo;
    • se a reserva estiver anexada a um compromisso, ela não poderá ser excluída;
    • só é possível comprar um compromisso de um ano em GPUs K80.
  • As reservas que não estão vinculadas a um desconto por uso contínuo podem ser retidas por qualquer duração, mas uma cobrança mínima de um minuto é feita, assim como ocorre com as instâncias regulares.

Como funcionam as reservas

Crie reservas para reservar as instâncias de VM necessárias. Uma vez criadas, as reservas garantem que esses recursos estejam sempre disponíveis para você usar. Durante o processo de criação, é possível escolher como uma reserva é usada. Por exemplo, é possível definir que uma reserva seja aplicada automaticamente a instâncias novas ou atuais que correspondam às propriedades da reserva (o comportamento padrão) ou que somente uma instância de VM específica consuma uma reserva.

Em todos os casos, uma instância de VM só poderá usar uma reserva se as propriedades dela corresponderem exatamente às propriedades da reserva. Especificamente, para consumir uma reserva, as propriedades da instância a seguir precisam corresponder às da reserva:

  • Zona
  • vCPU
  • Plataforma mínima de CPU
  • Memória
  • GPU
  • SSD local

Se as propriedades de uma instância de VM corresponderem às de uma reserva, o comportamento padrão será todas as instâncias atuais e novas consumirem a reserva automaticamente, a menos que especificado de outra forma. Por exemplo, por padrão, se você criar uma reserva para dez instâncias custom-8-10240 e já tiver cinco instâncias custom-8-10240 correspondentes, essas instâncias consumirão cinco reservas. Se você criar mais três instâncias correspondentes, outras três reservas serão consumidas.

É possível substituir esse comportamento padrão especificando determinadas opções ao criar reservas e instâncias.

  • Para criar uma reserva que não precisa ser consumida automaticamente, use a opção specificReservationRequired. Essas reservas agora só poderão ser usadas se você especificar explicitamente a reserva durante a criação da instância.
  • Para especificar que uma instância consuma uma reserva, use a opção reservationAffinity ao criar a instância ou no modelo de instância. É possível especificar que uma instância consuma automaticamente de qualquer reserva correspondente, que não consuma automaticamente de reservas correspondentes, ou ainda, que consuma apenas de uma reserva específica.

Se você interromper ou excluir uma instância que está usando uma reserva, essa instância não ocupará mais a reserva, e os recursos reservados estarão disponíveis novamente.

Se você excluir uma reserva, mas não excluir as instâncias que estão usando os recursos reservados, essas instâncias persistirão e você pagará por elas como de costume.

Como criar uma reserva

Crie uma reserva para instâncias de VM usando o console, a ferramenta de linha de comando gcloud ou a API. Por padrão, qualquer instância de VM que corresponda às propriedades de uma reserva consumirá automaticamente essa reserva. Para criar uma reserva que não seja consumida automaticamente, use a opção specificReservationRequired.

Não é preciso criar um compromisso para reservar recursos. No entanto, se você quer usar o preço com desconto por uso contínuo em GPUs ou SSDs locais, crie uma reserva que inclua esses recursos ao mesmo tempo quando comprar seu compromisso. Para mais informações, consulte Como combinar reservas com descontos por uso contínuo.

Console

  1. Acesse a página Descontos por uso contínuo no Console do GCP.

    Acessar a página "Descontos por uso contínuo"

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

  3. Nomeie sua reserva.

  4. Se quiser usar apenas os recursos desta reserva ao criar instâncias correspondentes que visam especificamente essa reserva por nome, escolha Selecionar reserva específica em Usar com instância da VM.

  5. Escolha a região e a zona em que você quer reservar recursos.

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

  7. 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. Para tipos de máquina predefinidos, selecione o que você precisa no menu suspenso.
      2. Para tipos de máquina personalizados, incluindo plataforma mínima de CPU, ou para adicionar GPUs, clique em Personalizar e faça suas seleções.
      3. Como alternativa, especifique o número de discos SSD locais que você quer adicionar a cada instância e o tipo de interface a ser usado.
  8. Clique no botão Criar para criar a reserva.

gcloud

Use o comando gcloud compute reservations create para criar uma nova reserva.

gcloud compute reservations create [RESERVATION_NAME] \
    --machine-type=[MACHINE_TYPE] \
    --min-cpu-platform [MINIMUM_CPU_PLATFORM] \
    --vm-count=[NUMBER_OF_VMS] \
    --accelerator=count=[NUMBER_OF_ACCELERATORS],type=[ACCELERATOR_TYPE] \
    --local-ssd=size=[SIZE_IN_GB],interface=[INTERFACE] \
    --require-specific-reservation \
    --zone=[ZONE]

Em que:

  • [RESERVATION_NAME] é o nome da reserva a ser criada;
  • [MACHINE_TYPE] é o tipo de máquina. Por exemplo, n1-standard-1. Para tipos de máquina personalizados, use o formato custom-[CPUS]-[MEMORY], em que:
    • [CPUS] é o número de vCPUs;
    • [MEMORY] é a memória total para esta instância. A memória precisa ser um múltiplo de 256 MB e ser fornecida em MB. Por exemplo, 5 GB de memória é 5.120 MB: custom-4-5120. Para ver uma lista completa de restrições, leia as especificações para tipos de máquina personalizados.
  • [MINIMUM_CPU_PLATFORM] é a CPU mínima a ser usada para cada instância;
  • [NUMBER_OF_VMS] é a quantidade de instâncias de VM a serem reservadas;
  • [NUMBER_OF_ACCELERATORS] é o número de GPUs a serem adicionadas, por instância;
  • [ACCELERATOR_TYPE] é o tipo de acelerador;
  • [SIZE_IN_GB] é o valor em GB do SSD local a ser anexado a cada instância. O valor precisa ser um múltiplo de 375;
  • [INTERFACE] é o tipo de interface que o SSD local precisa usar. As opções válidas são: scsi e nvme para cada instância;
  • [ZONE] é a zona para reservar recursos.

Se quiser, adicione a sinalização --require-specific-reservation para indicar que apenas instâncias de VM que visam explicitamente essa reserva podem usá-la. Veja Como funcionam as reservas para mais informações sobre as opções de configuração para consumir recursos reservados.

Por exemplo, para fazer uma reserva em us-central1-a que só pode ser usada quando é especificamente visada, use um comando semelhante ao seguinte. Este exemplo reserva 10 máquinas personalizadas, cada uma com 8 vCPUs Intel Haswell (ou mais recentes), 10 GB de memória, 2 GPUs V100 e 375 GB de SSD local:

gcloud compute reservations create my-reservation \
    --machine-type=custom-8-10240 \
    --min-cpu-platform "Intel Haswell" \
    --vm-count=10 \
    --accelerator=count=2,type=nvidia-tesla-v100 \
    --local-ssd=size=375,interface=scsi \
    --require-specific-reservation \
    --zone us-central1-c

Para ver uma lista de todas as sinalizações disponíveis, consulte a referência gcloud compute reservations create.

API

Na API, construa uma solicitação POST para o método reservations.insert. No corpo da solicitação, inclua os parâmetros a seguir:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/reservations

{
  "name":"[RESERVATION_NAME]",
  "specificReservation":{
    "count":"[NUMBER_OF_VMS]",
    "instanceProperties":{
      "machineType":"[MACHINE_TYPE]",
      "minCpuPlatform": "[MINIMUM_CPU_PLATFORM]",
      "guestAccelerators":[
        {
          "acceleratorCount":"[NUMBER_OF_ACCELERATORS]",
          "acceleratorType":"[ACCELERATOR_TYPE]"
        }
      ],
      "localSsds":[
        {
          "diskSizeGb":"[SIZE_IN_GB]",
          "interface":"[INTERFACE]"
        }
      ]
    }
  }
}

Em que:

  • [PROJECT_ID] é o ID do projeto para a solicitação;
  • [ZONE] é a zona para reservar recursos;
  • [RESERVATION_NAME] é o nome da reserva a ser criada;
  • [NUMBER_OF_VMS] é a quantidade de instâncias de VM a serem reservadas;
  • [MACHINE_TYPE] é um tipo de máquina predefinido ou personalizado. Por exemplo, n1-standard-1. Para tipos de máquina personalizados, use o formato custom-[CPUS]-[MEMORY], em que:
    • [CPUS] é o número de vCPUs;
    • [MEMORY] é a memória total para esta instância. A memória precisa ser um múltiplo de 256 MB e ser fornecida em MB. Por exemplo, 5 GB de memória é 5.120 MB: custom-4-5120. Para ver uma lista completa de restrições, leia as especificações para tipos de máquina personalizados.
  • [MINIMUM_CPU_PLATFORM] é a CPU mínima para cada instância;
  • [NUMBER_OF_ACCELERATORS] é o número de GPUs a serem adicionadas, por instância;
  • [ACCELERATOR_TYPE] é o tipo de acelerador;
  • [SIZE_IN_GB] é o valor em GB do SSD local a ser anexado a cada instância. O valor precisa ser um múltiplo de 375;
  • [INTERFACE] é o tipo de interface que o SSD local precisa usar. As opções válidas são: scsi e nvme.

Se quiser, inclua o campo booleano specificReservationRequired para especificar que apenas as instâncias de VM que visam especificamente essa reserva pelo nome podem usar essa reserva. Veja Como funcionam as reservas para mais informações sobre opções de configuração para usar as instâncias em suas reservas.

Por exemplo, para reservar recursos em us-central1-a que só podem ser consumidos quando essa reserva é especificamente visada, crie uma solicitação semelhante à seguinte. Este exemplo reserva 10 máquinas personalizadas, cada uma com 8 vCPUs Intel Haswell (ou mais recentes), 10 GB de memória, 2 GPUs V100 e 375 GB de SSD local:

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

{
  "name": "reservation-1",
  "specificReservation":
  {
    "count": "10",
    "instanceProperties":
    {
      "machineType": "custom-8-10240",
      "minCpuPlatform": "Intel Haswell",
      "guestAccelerators":
      [
        {
          "acceleratorCount": 2,
          "acceleratorType": "nvidia-tesla-v100"
        }
      ],
      "localSsds":
      [
        {
          "diskSizeGb": "375",
          "interface": "SCSI"
        }
      ]
    }
  },
  "specificReservationRequired": true
}

Como consumir instâncias reservadas

Ao criar uma instância, você escolhe se a instância usa qualquer reserva correspondente disponível (padrão), usa uma reserva específica ou não usa reserva alguma, configurando a sinalização de afinidade de reserva da instância. 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. Consulte Como funcionam as reservas para mais informações.

Como consumir instâncias de qualquer reserva correspondente

Neste modelo, as instâncias atuais e recém-criadas contam automaticamente com a 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 utilizadas sempre que possível.

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

Console

  1. Crie uma reserva aberta.

    1. Acesse a página Descontos por uso contínuo no Console do GCP.

      Acessar a página "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-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 da 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 e SSD local, conforme necessário.

    8. Clique no botão Criar para criar a reserva.

  2. Crie uma instância de VM que tenha como alvo qualquer reserva aberta e que corresponda às propriedades da instância da reserva.

    1. Acesse a página "Instâncias de VMs".

      Acessar a página "Instâncias de VMs"

    2. Selecione o projeto e clique em Continuar.
    3. Clique no botão Criar instância.
    4. Especifique um Nome para sua instância.
    5. Especifique um Tipo de máquina que corresponda às propriedades da reservation-01. Por exemplo, para consumir uma reserva com especificação de uma plataforma de CPU mínima ou GPUs, personalize esta instância para corresponder a ela.
    6. Se sua reserva incluir SSDs locais, em Discos, clique em Adicionar novo disco para adicionar SSDs locais que correspondam a ela.
    7. Em Gerenciamento e Reservas, selecione Usar reservas criadas automaticamente.
    8. Clique em Criar.

gcloud

  1. Crie uma reserva aberta chamada reservation-01.

    gcloud compute reservations create reservation-01 \
        --machine-type=n1-standard-32 \
        --min-cpu-platform "Intel Skylake" \
        --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 da reservation-01, incluindo a zona, vCPU, plataforma mínima de CPU, memória, GPUs e propriedades SSD locais.

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

API

  1. Crie uma reserva aberta chamada reservation-01.

    POST https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/reservations
    
    {
      "name":"reservation-01",
      "specificReservation":{
        "count":"2",
        "instanceProperties":{
          "machineType":"n1-standard-32",
          "minCpuPlatform": "Intel Haswell",
        }
      },
      "specificReservationRequired": false
    }
    
  2. Crie uma instância de VM que vise qualquer reserva aberta (any) e que corresponda às propriedades de instância de reservation-01, incluindo a zona, vCPU, a plataforma mínima da CPU, memória, GPUs e propriedades SSD locais.

    POST https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/instances
    
    {
      "name": "instance-1",
      "machineType": "zones/us-central1-a/machineTypes/n1-standard-32",
      "minCpuPlatform": "Intel Haswell",
      "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. Este modelo é útil quando você quer manter uma certa quantidade de capacidade como backup para eventos especiais.

Ao criar a reserva, especifique que ela não poderá ser usada automaticamente. 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 regional de instâncias gerenciadas, crie reservas idênticas com o mesmo nome em cada zona aplicável. Em seguida, vise as reservas mencionando-as por nome no modelo de instância do grupo.

Por exemplo, crie uma reserva visada chamada reservation-02 e, em seguida, crie uma instância correspondente para usar os recursos dessa reserva.

Console

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

    1. Acesse a página Descontos por uso contínuo no Console do GCP.

      Acessar a página "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 da 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 e SSD local, conforme necessário.

    8. Clique no botão Criar para criar a reserva.

  2. Crie uma instância de VM que vise a reserva por nome e que corresponda às propriedades da instância dela.

    1. Acesse a página "Instâncias de VMs".

      Acessar a página "Instâncias de VMs"

    2. Selecione o projeto e clique em Continuar.
    3. Clique no botão Criar instância.
    4. Especifique um Nome para sua instância.
    5. Especifique um Tipo de máquina que corresponda às propriedades da 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.
    6. Se sua reserva incluir SSDs locais, em Discos, clique em Adicionar novo disco para adicionar SSDs locais que correspondam a ela.
    7. Em Gerenciamento, em Reservas, selecione uma reserva disponível com propriedades correspondentes, por exemplo: reservation-02.
    8. Clique em Criar para criar a instância.

gcloud

  1. Crie uma reserva chamada reservation-02 com recursos que só podem ser usados por instâncias que visem especificamente essa reserva pelo nome.

    gcloud beta compute reservations create reservation-02 \
        --machine-type=n1-standard-32 \
        --min-cpu-platform "Intel Skylake" \
        --vm-count=10 \
        --zone=us-central1-a \
        --require-specific-reservation
    
  2. Crie uma instância de VM que vise reservation-02 por nome e que corresponda às propriedades dessa instância, incluindo: zona, vCPU, plataforma mínima de CPU, memória, GPUs e propriedades SSD locais.

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

API

  1. Crie uma reserva chamada reservation-02 com recursos que só podem ser usados por instâncias que visem especificamente essa reserva pelo nome.

    POST https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/reservations
    
    {
      "name":"reservation-02",
      "specificReservation":{
        "count":"10",
        "instanceProperties":{
          "machineType":"n1-standard-32",
          "minCpuPlatform": "Intel Haswell",
        }
      },
      "specificReservationRequired": true
    }
  2. Crie uma instância de VM que vise reservation-02 pelo nome e que corresponda às propriedades da instância dessa reserva para: zona, vCPU, plataforma mínima de CPU, memória, GPUs e SSD local.

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

Como criar instâncias sem consumir reservas

Para evitar o consumo de recursos de qualquer reserva, defina a sinalização de afinidade de reserva como "nenhum" ao criar a VM.

Console

  1. Crie uma instância que não consuma uma reserva.
    1. Acesse a página "Instâncias de VMs".

      Acessar a página "Instâncias de VMs"

    2. Clique no botão Criar instância.
    3. Crie uma instância como de costume.
    4. Em Gerenciamento, em Reservas, selecione Não usar para garantir que essa instância não consuma nenhuma reserva atual.
    5. Clique em Criar para criar a instância.

gcloud

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

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

API

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

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

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

Como listar e descrever reservas

Listar e exibir detalhes sobre sua reserva usando o console, a ferramenta de linha de comando gcloud ou a API.

Console

  1. Acesse a página Descontos por uso contínuo no Console do GCP.

    Acessar a página "Descontos por uso contínuo"

  2. Clique em Reservas para ver uma lista delas.

A lista de reservas inclui detalhes sobre cada uma. Use a coluna Máquinas usadas (total) para determinar a utilização de cada reserva.

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]

creationTimestamp: '2019-04-01T08:29:10.210-07:00'
id: '702162498650398927'
kind: compute#reservation
name: reservation-04
selfLink: https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/reservations/reservation-04
selfLinkWithId: https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/reservations/702162498650398927
specificReservation:
  count: '50'
  inUseCount: '25'
  instanceProperties:
    machineType: n1-standard-1
specificReservationRequired: true
status: READY
zone: https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a

É possível usar os valores count e inUseCount para determinar a utilização de sua reserva. Neste exemplo, 50 instâncias foram reservadas, e 25 delas são usadas atualmente.

API

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

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/reservations

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

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

{
 "id": "702162498650398927",
 "creationTimestamp": "2019-04-01T08:29:10.210-07:00",
 "selfLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/reservations/reservation-04",
 "selfLinkWithId": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/reservations/702162498650398927",
 "zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a",
 "name": "reservation-04",
 "specificReservationRequired": false,
 "status": "READY",
 "kind": "compute#reservation",
 "specificReservation": {
  "instanceProperties": {
   "machineType": "n1-standard-32"
  },
  "count": "50",
  "inUseCount": "25"
 }
}

É possível usar os valores count e inUseCount para determinar a utilização de sua reserva. Neste exemplo, 50 instâncias foram reservadas, e 25 delas são usadas atualmente.

Como modificar reservas

Será possível redimensionar ou excluir uma reserva 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 esteja vinculada a um compromisso usando a ferramenta de linha de comando gcloud ou a API.

gcloud

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

Crie uma reserva para duas VMs:

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

Redimensione a reserva de 2 a 10 VMs:

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

API

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

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/reservations/[RESERVATION_NAME]/resize

{"specificSkuCount": "10"}

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

Como excluir uma reserva

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

Console

  1. Acesse a página Descontos por uso contínuo no Console do GCP.

    Acessar a página "Descontos por uso contínuo"

  2. Clique em Reservas para ver uma lista delas.
  3. Clique na 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 [RESERVATION_NAME] --zone [ZONE]

API

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

DELETE https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/reservations/[RESERVATION_NAME]

Quando o comando de exclusão for concluído com sucesso, haverá mais cobrança 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 preço com desconto de um ou três anos, 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 adquirir um compromisso, não é possível cancelá-lo. Consulte Descontos para uso contínuo para mais informações.

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áquinas N1;
  • crie uma reserva que inclua GPUs ou SSDs locais ao mesmo tempo quando 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 GPUs para Tesla P100s ou Tesla V100s, mas não é possível adquirir compromissos para as GPUs Tesla P100 e aplicá-las a outros tipos de GPU.

A quantidade de GPUs e SSDs locais reservadas precisa ser igual ao valor com que 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ê anexa 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.

Compre um compromisso com uma reserva anexada usando o console, a ferramenta gcloud ou a API.

Console

  1. Acesse a página Descontos por uso contínuo no Console do GCP.

    Acessar a página "Descontos por uso contínuo"

  2. Clique em Comprar compromisso para adquirir um novo.
  3. Dê um nome ao compromisso e escolha a região em que será aplicado.
  4. Para Tipo de compromisso, selecione Propósito geral.
  5. Escolha um valor para a duração dele, sendo de 1 ou 3 anos.
  6. Escolha o modo de entrada do compromisso:

    • (Recomendado) Personalizado para personalizar o número de vCPUs e a quantidade de memória.

    • Básico para você escolher o número de vCPUs. O Compute Engine preencherá automaticamente a quantidade de memória para as vCPUs.

  7. Insira as quantidades de vCPU e memória que você quer adquirir. Dependendo do tipo de desconto selecionado, a memória por vCPU precisa ter uma proporção específica. Use entre 0,9 GB e 6,5 GB por vCPU para descontos por uso contínuo padrão. A memória total precisa ser um múltiplo de 256 MB.

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

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

  9. Clique em Incluir SSD local e especifique o número de disco com o qual você quer se comprometer.

  10. 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 Região e a Zona em que você quer reservar recursos.
    4. Especifique o Número de instâncias da 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. Para tipos de máquina predefinidos, selecione o que você precisa no menu suspenso.
        2. Para tipos de máquina personalizados, incluindo plataforma mínima de CPU, ou para adicionar GPUs, clique em Personalizar e faça suas seleções.
        3. Como alternativa, especifique o número de discos SSD locais que você quer adicionar a cada instância e o tipo de interface a ser usado.
    6. Clique no botão Criar para criar a reserva.
  11. Clique no botão Comprar para adquirir o compromisso.

  12. Leia os termos de compra e clique em Comprar novamente quando estiver pronto para adquiri-lo.

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 nova reserva para elas 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 se comprometer e reservar GPUs ou SSDs locais sem compromisso com vCPUs e memória, especifique 0 para as quantidades desses itens.

gcloud beta 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-1 \
    --accelerator=type=nvidia-tesla-p4,count=1 \
    --vm-count=1

Para criar várias reservas ao comprar um compromisso, use um arquivo YAML. Por 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]

Em que [YAML_FILE] contém as propriedades da reserva.

Por exemplo, o arquivo YAML a seguir contém duas reservas. A primeira reserva, res-01, contém uma instância n1-standard-1 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-1 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-1
  accelerator:
  - count: 1
    type: nvidia-tesla-v100
- reservation: res-02
  reservation_zone: us-central1-a
  vm_count: 1
  machine_type: n1-standard-1
  local_ssd:
  - interface: scsi
    size: 375
  - interface: nvme
    size: 375

API

Use a API 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://www.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 se comprometer e reservar GPUs ou SSDs locais sem se comprometer com vCPUs e memória, especifique 0 para as quantidades de compromisso de VCPU e MEMORY. Por exemplo:

POST https://www.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 com êxito somente se houver recursos suficientes na zona de destino, além de cota suficiente no momento da solicitação.

Quando você cria um compromisso com uma reserva anexada, não é possível excluí-la pela duração 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 anexadas.

gcloud

Use o comando gcloud compute commitments update-reservations.

Crie um compromisso com uma reserva: res-1 tem quatro instâncias n1-standard-1, cada uma com uma GPU P100 (quatro vCPUs e quatro GPUs P100). O total de recursos reservados inclui quatro GPUs P100.

gcloud 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

one-reservation.yaml contém:

- reservation: res-1
  reservation_zone: asia-east1-a
  require_specific_reservation: true
  vm_count: 4
  machine_type: n1-standard-1
  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-1 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 compute commitments update-reservations my-commitment-with-reservations \
    --region=us-central1 \
    --reservations-from-file=two-reservations.yaml

two-reservations.yaml contém:

- reservation: res-1
  reservation_zone: asia-east1-a
  require_specific_reservation: true
  vm_count: 2
  machine_type: n1-standard-1
  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:

  • res-1 tem quatro instâncias n1-standard-1, 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://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/commitments

{
  "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-1"
        }
      },
      "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-1 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://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/commitments/my-commitment-with-reservation/updateReservations

{
  "reservations":
  [
    {
      "name": "res-1",
      "specificReservation":
      {
        "count": "2",
        "instanceProperties":
        {
          "guestAccelerators":
          [
            {
              "acceleratorCount": 1,
              "acceleratorType": "nvidia-tesla-p100"
            }
          ],
          "machineType": "n1-standard-1"
        }
      },
      "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 intervalo 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 "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://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/[RESOURCE_TYPE]/[RESOURCE_NAME].

Por exemplo, https://www.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://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/reservations/[RESERVATION_NAME].

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

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

Por exemplo, no snippet a seguir de um relatório de uso de 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 pela my-reservation. Ainda não é usado 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/VmimageN1StandardRam,166970074857472,byte-seconds,https://www.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/VmimageN1StandardRam,166970074857472,byte-seconds,https://www.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/ReservationN1StandardRam,333940149714944,byte-seconds,https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central2-a/reservations/my-reservation,7.58809E+17,us-central2-a
...

Faturamento de reserva

As reservas são faturadas na mesma taxa que os recursos que estão reservando. Os descontos por uso prolongado, descontos por uso contínuo e preços personalizados se aplicam a VMs comuns.

Veja este exemplo:

  • Você tem um compromisso de três vCPUs em us-central1.
  • Você está executando cinco vCPUs em us-central1-a.
  • Você tem uma reserva de 10 vCPUs em us-central1-a.

Exemplo de reservas com alguns descontos por uso contínuo

Você será cobrado da seguinte forma:

Coberto por Nº de vCPUs
Preço de desconto por uso contínuo 3
Preço sob demanda (duas vCPUs usaram reservas + cinco reservas sem uso de vCPU) 7

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine