Reservations of Compute Engine zonal resources


This document explains the behavior, requirements, restrictions, and billing of reservations of Compute Engine zonal resources.

Overview

To make sure that Compute Engine resources are available when you need them, use reservations. Reservations provide a very high level of assurance in obtaining capacity for Compute Engine zonal resources. You can use reservations to help ensure that your project has resources for future increases in demand, such as in the following cases:

  • Growth
  • Planned or unplanned spikes
  • Migration of a large number of virtual machine (VM) instances
  • Backup and disaster recovery

With reservations, 95% of VMs start in less than 120 seconds. Each reservation provides assurance for one or more VMs with the same properties. After you create a reservation, the reserved resources are available immediately and remain available until you delete the reservation. Similarly, you begin paying for the reserved resources immediately, and, when you no longer need a reservation, you can delete the reservation to stop incurring charges for it. While a VM is consuming a reservation, it does not incur separate charges.

Regardless of how much you use your reserved resources, the reservation prevents anyone else from using your reserved resources. Because a reservation occupies resources as much as unreserved running VMs, reserved resources are charged at the same on-demand rates as running VMs, including any applicable discounts.

How reservations work

This section describes how reservations work.

A reservation provides capacity assurance for one or more Compute Engine VMs with the specified configuration. You might also use a reservation with Compute Engine commitments or other products that use VMs.

When you create a reservation, you define the following properties:

  • Provisioning type (on-demand or future)
    • An on-demand reservation (default) is provisioned at the time you request it, if the requested capacity is available.
    • A future reservation lets you request assurance of important or difficult-to-obtain capacity in advance. Specifically, future reservations consist of two resource types: future reservation requests that, if approved, provide automatically created (auto-created) reservations at your future, specified time. After its requested reservation period, an auto-created reservation is either automatically deleted or behaves similarly to an on-demand reservation.

      Using future reservations can provide an even higher level of assurance in obtaining capacity than on-demand reservations by allowing Google Cloud more time to fulfill your request. If you want to use future reservations, see About future reservation requests instead of this document.

  • Auto-delete

    The auto-delete option specifies to automatically delete the reservation, regardless if it's fully consumed or not. If you enable the auto-delete option, the reservation is deleted within two hours from your specified date and time. Automatically deleting reservations can be useful to avoid unnecessary charges for the reservations that aren't consumed for some time.

  • Consumption type (automatic or specific)
    • An automatically consumed reservation (default) can be consumed by VMs with a reservation affinity property that allows them to automatically consume any of these reservations (default).
    • A specifically targeted reservation can only be consumed by VMs with a reservation affinity property that targets that specific reservation for consumption. Using specifically targeted reservations can make it easier to track and control which VMs are consuming which reservations.
  • Share type (single-project or shared)
    • A single-project reservation (default) can only be consumed by VMs that are located in the same project as the reservation.
    • A shared reservation can be consumed by VMs in the project where the reservation is located and any other project that the reservation is shared with. Using shared reservations can help improve the utilization of your reservations and reduce the number of reservations that you need to create and manage. For more information, see How shared reservations work in this document.
  • Optional: Resource placement policy (compact)

    A compact placement policy indicates that the reserved VMs should be located as close to each other as possible to reduce network latency between them.

  • VM count

    The VM count is the number of VMs with matching properties and zone that you want to reserve when creating a reservation. After you create the reservation, you can modify the VM count.

  • VM properties

    The VM properties describe the hardware requirements for the VMs that you want to reserve. A VM can consume a reservation only if both the VM's properties and reservation's VM properties match exactly. For more information, see Requirements in this document.

After you create a reservation, be aware of the following:

  • If you stop, suspend, or delete a VM that is consuming a reservation, then the VM no longer counts against the reservation. The previously consumed resources are again available for consumption after stopping, suspending, or deleting the VM completes.

  • If you delete a reservation but don't delete the VMs that are using the reserved resources, the VMs persist and you are billed for the resources as usual.

How shared reservations work

Each VM in a shared reservation can be consumed by a VM in either the project that created the reservation (owner project) or any of the projects the reservation is shared with (consumer projects). When a VM stops consuming a shared reservation, the shared reservation can be consumed by a different VM in any of the projects that the reservation is shared with. If a shared reservation reserves multiple VMs, VMs from multiple projects can consume the same shared reservation simultaneously.

By default, projects can't create and modify shared reservations. To create and modify a shared reservation in a project, the project must be added to the allowlist of the Shared Reservations Owner Projects (compute.sharedReservationsOwnerProjects) organizational policy constraint. If you share a reservation, it is affected by additional requirements and has slightly different consumption behavior than reservations that are not shared.

Requirements

All reservations have the following requirements:

  • A VM can consume a reservation only if all of the following properties for both the VM and the reservation match exactly:

    • Project*
    • Zone
    • Machine type
    • Minimum CPU platform
    • GPU type and count
    • Local SSD type and count
    • Reservation affinity
    • Compact placement policy

    *Project requirements vary based on the reservation's share type.

    Reservation affinity requirements vary based on the reservation's consumption type.

    A reservation can optionally include a compact placement policy to indicate that its reserved VMs should be located as close to each other as possible to reduce network latency between them. If a reservation specifies a compact placement policy, it can only be consumed by VMs that specify the same compact placement policy.

  • You must have sufficient quota in your project for the resources you are reserving. If the reservation is created successfully, quota for that resource is charged accordingly.

Additional requirements for reservations attached to commitments

Additionally, reservations that are attached to commitments have the following requirements:

  • The reservations must be for the same project and region as the commitment.

  • The reservations must be for the same machine family series as the commitment. However, you can choose any machine type within that machine family series.

  • The reservations must have the auto-delete option disabled.

  • If the commitment specifies any GPUs, Local SSD disks, or both, then the attached reservation (or combination of attached reservations) must specify exactly the same numbers and types of those resources as the commitment.

To learn more, see Attach reservations to resource-based commitments.

Additional requirements for reservations created from an instance template

Additionally, if you create a reservation by specifying an instance template, make sure of the following:

  • You must create your reservation in the same region, zone, and project as the resources within the template. Specifically:

    • Any regional or zonal resources that are specified in an instance template—such as a machine type or a disk—restrict the use of the template to the locations where those resources exist. For example, if your instance template specifies an existing disk in the us-central1-a zone, then you must create your reservation in the same zone.

    • An instance template contains project-specific settings, so you can only access and use an instance template within the same project. For the projects a shared reservation is shared with, you must create similar templates in those projects or create VMs by specifying properties directly.

  • If the instance template specifies a compact placement policy, you must create a specific reservation. Then, when you create the VMs to consume the reservation, you must specifically target the reservation by name. Otherwise, the VMs can't consume the reservation.

Additional requirements for shared reservations

Additionally, there are specific quota implications for the owner and consumer projects of a shared reservation. Specifically:

  • The Owner project must have sufficient quota for twice the resources to reserve. The owner project of a shared reservation is charged for quota as follows:

    • When reserving the resources, the owner project is charged for quota for the resources that it reserves.

    • When any of the reserved resources are consumed, the owner project is charged for quota for the resources that are consumed.

  • The Consumer project is charged for quota only when consuming the reserved resources and only for the resources that it consumes.

For example, let's assume that project A (the owner project) creates a shared reservation for 10 resources and share the reservation with project B and C (the consumer projects). After creating the shared reservation, project A is charged for 10 resources. Then, let's assume that the projects consume the reservation as follows:

  • Project A consumes 2 reserved resources and is charged for 2 resources.

  • Project B consumes 2 reserved resources. Project A and B are both charged for 2 resources.

Additional requirements for reservations with compact placement policies

Additionally, to specify a compact placement policy for a reservation, make sure of the following requirements:

  • The compact placement policy must support reservations:

    • The compact placement policy can't specify a fixed number of VMs.

    • The compact placement policy can't specify a max-distance value of 1.

    • The compact placement policy can't be specified by more than one reservation at a time.

  • The reservation must support compact placement policies:

    • You can only specify a compact placement policy for an on-demand, single-project, specifically targeted reservation that is not attached to a commitment.

    • The VMs reserved by the reservation must be supported by the compact placement policy:

      • The reservation's zone must be within the region of the compact placement policy.

      • The reservation's number of VMs can't exceed the maximum number of VMs that the compact placement policy supports.

      • The reservation's machine type must be supported by compact placement policies.

      For more information, see the restrictions for compact placement policies.

Restrictions

All reservations have the following restrictions:

  • You can reserve up to 1,000 VMs per reservation.
  • Reservations apply only to the usage of VMs in the following Google Cloud products:

    • Batch
    • Compute Engine
    • Dataflow
    • Dataproc
    • Google Kubernetes Engine

  • Reservations don't apply to the following resources:

    • f1-micro and g1-small machine types
    • Preemptible VMs
    • Sole-tenant nodes
    • Other services not previously listed, like Cloud SQL
  • Compute Engine attempts to allocate on-demand resources when you create a reservation. If there aren't enough resources in the zone at the time of the request, the reservation fails with a resource availability error due to insufficient capacity. If the reservation is created successfully, then the resources are available for you to use, even if you don't use them immediately.

Additional restrictions for reservations attached to commitments

Additionally, reservations that are attached to commitments have the following restrictions:

  • You can attach reservations only to resource-based commitments.

  • You can attach reservations only while you're purchasing your commitment.

  • You can attach a specific reservation to only one single commitment.

  • You can't delete or resize a reservation that is attached to a commitment. Instead, see how to replace reservations that are attached to commitments.

To learn more, see Attach reservations to resource-based commitments.

Additional restrictions for shared reservations

Additionally, shared reservations have the following restrictions:

  • You can only share reservations with projects in the same organization as the project that creates the reservation.

  • Each shared reservation can be shared with 1 to 100 consumer projects.

  • For each organization, you can create up to 100 shared reservations for each unique combination of VM properties.

  • You can only list the reservations created by a specific project. This means that each shared reservation is only listed in the project that created it—you can't list all of the shared reservations in an organization or all of the reservations that are shared with a specific project.

  • If you create a shared reservation by specifying an instance template, only the users within your project can access the same instance template and use it to create VMs or other reservations.

  • You can't specify a compact placement policy when creating a shared reservation.

  • If you move a project that was using shared reservations to a new organization, its shared reservations do not migrate to the new organization. Any shared reservations that were created in this project are deleted, and any reservations from the previous organization that were shared with this project can't be consumed in the new organization. For more information, see How shared reservations work in this document.

You can mitigate the limitations of some of these requirements by following the best practices for shared reservations.

Additional restrictions for reservations with compact placement policies

Additionally, reservations that specify a compact placement policy have the following restrictions:

  • You can't share a compact placement policy across reservations. Instead, you must use a separate compact placement policy for each reservation that you want to apply a compact placement policy to.

  • You can only specify compact placement policies. Any other type of resource policies, such as instance schedules or snapshot schedules, isn't supported.

Billing

This section describes how reservations are billed.

Reservations are billed at the same rate as their reserved resources, including the same on-demand prices and 1-minute minimum charges as unreserved, running VMs. Sustained use discounts (SUDs), CUDs, and custom pricing also apply as they would for running VMs.

For example, suppose the following:

  • You have a 3-vCPU commitment in us-central1
  • You are running 5 vCPUs in us-central1-a
  • You have a 10-vCPU reservation in us-central1-a

Reservations that include committed use discounts.

Then, you are billed as follows:

Covered by # of vCPUs
Committed use discount price 3
On-demand price (2 vCPU used reservations + 5 vCPU unused reservations) 7

A reservation incurs charges for its reserved resources for as long as the reservation exists, regardless of whether or not its resources are being used. While consuming a reservation, a VM does not incur duplicate resources charges since the reservation is already billed for the cost of the reserved resources. For details, see VMs pricing.

Additionally, you can monitor the consumption trends of your reservations to reduce unnecessary costs from wasted or unused resources. For more information, see Monitor reservations consumption.

Additional billing information for shared reservations

There are no additional charges for using shared reservations—they are billed at the same price as single-project Compute Engine reservations. But, the project that is billed for shared reservations changes with consumption as different projects might qualify for different CUDs.

The billing project and price for shared reservations are managed as follows:

  • Billing project: By default, the owner project is billed for the shared reservation. But, when a resource from a shared reservation is being consumed by a consumer project, the consumer project is billed for the reservation instead.
  • Billing discounts: By default, billing uses the on-demand price. But, if you are eligible to receive CUDs for either the project that is being billed or the Cloud Billing account associated with that project, then the discounted price is used instead.

What's next