预留 Compute Engine 地区资源

无论是否附加其他 GPU 或本地 SSD,都请通过自定义或预定义的机器类型为特定地区中的虚拟机实例创建预留,确保资源在需要时可供工作负载使用。创建预留后,预留资源立即开始计费;在删除该预留之前,这些资源可供项目无限期使用。

请通过预留确保项目具有资源来应对未来需求的增长,例如计划内/计划外峰值、大量虚拟机的迁移、备份和灾难恢复,或者应对计划内的增长和缓冲。

如果不再需要预留,请将其删除以免继续产生费用。由于预留如同普通虚拟机一样使用资源,因此系统会根据现有的按需使用费率对每个预留收费(其中包含持续使用折扣且有资格享受承诺使用折扣)。

准备工作

优势

预留具有下列优势:

  • 预留机器,使其始终可用(即使不会立即使用它们)。
  • 随时创建预留,并可随时将其删除以免继续产生费用。

  • 预留与其所预留的资源按相同的方式、相同的费率进行结算。因此,预留的资源有资格享受承诺使用折扣和持续使用折扣。

局限和限制

预留存在下列局限和限制:

  • 预留仅适用于 Compute Engine、Cloud Dataproc 和 Google Kubernetes Engine 服务中的虚拟机使用。
  • 预留不适用于 f1-microg1-small 机器类型、抢占式虚拟机、单租户节点或上面未列出的其他服务(如 Cloud SQL 和 Dataflow)。
  • 每个预留最多可预留 1000 个虚拟机实例。
  • 您的项目中必须有足够的配额满足要预留的资源。如果预留成功,则该资源使用的配额将产生相应费用。
  • 创建预留时会分配资源。如果请求时地区中资源不够,则预留将失败并显示“容量不足”错误。
  • 与承诺使用折扣相结合时:
    • 对于 GPU 和本地 SSD 的承诺使用折扣价格,必须在购买承诺使用合约时创建预留。
    • 如果预留附属于某承诺使用合约,则不能删除预留。
    • 对于 K80 GPU,您只能购买 1 年期承诺使用合约。
  • 未附加到承诺使用折扣的预留可保留任意时长,但与常规实例一样,最低费用为 1 分钟。

预留的工作原理

创建预留来预留所需的虚拟机实例。创建预留将确保这些资源始终可供您使用。在创建过程中,您可以选择预留的使用方式。例如,您可选择与预留属性相匹配的任何新实例或现有实例自动应用预留(默认行为),也可指定只有特定虚拟机实例能使用预留。

在任何情况下,虚拟机实例都只能在其属性与预留属性完全匹配时使用预留。具体而言,对于要使用预留的实例,实例必须与以下预留属性匹配:

  • 地区
  • vCPU
  • 满足最低要求的 CPU 平台
  • 内存
  • GPU
  • 本地 SSD

如果虚拟机实例与预留属性匹配,则除非另行指定,否则默认行为是所有现有的和新的虚拟机实例自动使用预留。例如,默认情况下,如果您针对 10 个 custom-8-10240 实例创建了预留,而您已经有 5 个匹配的 custom-8-10240 实例,则这 5 个实例将使用 5 个预留。如果您另外创建了 3 个匹配的实例,则再占用 3 个预留。

您可以通过在创建预留和实例时指定某些选项来替换此默认行为。

  • 如需创建不得被自动使用的预留,请使用 specificReservationRequired 选项。此时,仅在实例创建期间明确指定预留时,才能使用这些预留。
  • 如需指定实例应使用预留,请在创建实例时或在实例模板中使用 reservationAffinity 选项。您可以指定实例自动使用任何匹配预留中的资源、不自动使用匹配预留中的资源或仅使用特定预留中的资源。

如果您停止或删除正在使用预留的实例,则该实例将不再计入预留,并且预留资源再次可用。

如果删除预留但不删除使用预留资源的实例,则实例将继续存在并照常产生费用。

创建预留

使用控制台、gcloud 命令行工具或 API 为虚拟机实例创建预留。默认情况下,与某预留的属性匹配的任何虚拟机实例都将自动使用该预留。如需创建不被自动使用的预留,请使用 specificReservationRequired 选项。

您无需为了预留资源而创建承诺使用合约。但是,如果您希望享受 GPU 或本地 SSD 的承诺使用折扣价格,则必须在购买承诺使用合约时创建包含这些资源的预留。如需了解详情,请参阅将预留与承诺使用折扣相结合

控制台

  1. 转到 GCP Console 中的承诺使用折扣页面。

    转到“承诺使用折扣”页面

  2. 点击创建预留以创建没有父级承诺使用合约的独立预留。

  3. 为预留命名。

  4. 如果您只想在创建按名称明确针对此预留的匹配实例时使用此预留的资源,请在用于虚拟机实例下选中选择特定预订

  5. 选择您要预留资源的区域地区

  6. 指定您要预留的虚拟机实例数量

  7. 指定您要为每个实例预留的资源:

    • 如果您有实例模板,请点击使用实例模板,然后从列表中选择一个实例模板。
    • 否则,请点击指定机器类型
      1. 对于预定义机器类型,请从下拉菜单中选择所需的类型。
      2. 对于自定义机器类型(包括满足最低要求的 CPU 平台),或者,如需添加 GPU,请点击自定义并作出选择。
      3. (可选)指定您要添加到每个实例的本地 SSD 磁盘的数量,然后指定要使用的接口类型
  8. 点击创建按钮以创建预留。

gcloud

使用 gcloud compute reservations create 命令创建新预留。

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]

其中:

  • [RESERVATION_NAME] 是要创建的预留的名称。
  • [MACHINE_TYPE]机器类型,例如 n1-standard-1。对于自定义机器类型,请使用格式 custom-[CPUS]-[MEMORY],其中:
    • [CPUS] 是 vCPU 的数量。
    • [MEMORY] 是此实例的总内存。内存必须是 256 MB 的倍数并以 MB 为单位;例如,5 GB 的内存是 5120 MB:custom-4-5120。如需限制的完整列表,请参阅自定义机器类型的规范
  • [MINIMUM_CPU_PLATFORM] 是每个实例使用的满足最低要求的 CPU
  • [NUMBER_OF_VMS] 是要预留的虚拟机实例数。
  • [NUMBER_OF_ACCELERATORS] 是每个实例要添加的 GPU 数量。
  • [ACCELERATOR_TYPE]加速器类型
  • [SIZE_IN_GB] 是挂接到每个实例的本地 SSD 的数量(以 GB 为单位)。该数量必须是 375 的倍数。
  • [INTERFACE] 是本地 SSD 应使用的接口类型。有效选项包括:scsinvme。适用于每个实例。
  • [ZONE] 是预留资源的地区。

或者,添加 --require-specific-reservation 标志,以指示只有明确针对此预留的虚拟机实例才能使用它。如需详细了解有关使用预留资源的配置选项,请参阅预留的工作原理

例如,如需在 us-central1-a 中设置仅在明确针对预留时才能使用的预留,请使用如下所示的命令。此示例预留 10 台自定义机器,每台机器具有 8 个 Intel Haswell(或较新版本)vCPU、10 GB 内存、2 个 V100 GPU 和 375 GB 本地 SSD:

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

如需查看所有可用标志的列表,请参阅 gcloud compute reservations create 参考。

API

在 API 中,构建一个向 reservations.insert 方法发出的 POST 请求。在请求正文中,包含以下参数:

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]"
        }
      ]
    }
  }
}

其中:

  • [PROJECT_ID] 是请求的项目 ID。
  • [ZONE] 是预留资源的地区。
  • [RESERVATION_NAME] 是要创建的预留的名称。
  • [NUMBER_OF_VMS] 是要预留的虚拟机实例数。
  • [MACHINE_TYPE] 是预定义或自定义机器类型,例如 n1-standard-1。对于自定义机器类型,请使用格式 custom-[CPUS]-[MEMORY],其中:
    • [CPUS] 是 vCPU 的数量。
    • [MEMORY] 是此实例的总内存。内存必须是 256 MB 的倍数并以 MB 为单位;例如,5 GB 的内存是 5120 MB:custom-4-5120。如需限制的完整列表,请参阅自定义机器类型的规范
  • [MINIMUM_CPU_PLATFORM] 是每个实例的满足最低要求的 CPU
  • [NUMBER_OF_ACCELERATORS] 是每个实例要添加的 GPU 数量。
  • [ACCELERATOR_TYPE]加速器类型
  • [SIZE_IN_GB] 是挂接到每个实例的本地 SSD 的数量(以 GB 为单位)。该数量必须是 375 的倍数。
  • [INTERFACE] 是本地 SSD 应使用的接口类型。有效选项包括:scsinvme

或者,可包括 specificReservationRequired 布尔值字段,以指定只有按名称明确针对此预留的虚拟机实例可使用此预留。如需详细了解有关使用预留中的实例的配置选项,请参阅预留的工作原理

例如,如需在 us-central1-a 中预留只有在明确针对此预留时才能使用的资源,请构建如下所示的请求。此示例预留 10 台自定义机器,每台机器具有 8 个 Intel Haswell(或较新版本)vCPU、10 GB 内存、2 个 V100 GPU 和 375 GB 本地 SSD:

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
}

使用预留实例

创建实例时,可通过设置实例的预留相似性标志来选择实例是使用任何可用的匹配预留(默认)、使用特定预留还是根本不使用预留。对于特定预留中要使用的实例,必须使用相应的必需特定预留标志创建该预留。如需了解详情,请参阅预留的工作原理

使用任何匹配预留中的实例

在此模型中,如果现有和新创建的实例的属性与预留实例的属性匹配,则这些实例自动计入预留。在您创建和删除大量虚拟机且希望尽可能地使用预留时,此模型非常有用。

创建预留时,请排除 --require-specific-reservation 标志,以便匹配的实例自动使用这些预留中的资源。

控制台

  1. 创建开放式预留。

    1. 转到 GCP Console 中的承诺使用折扣页面。

      转到“承诺使用折扣”页面

    2. 点击创建预留以创建没有父级承诺使用合约的独立预留。

    3. 为预留命名,例如:reservation-01

    4. 用于虚拟机实例下,选择自动使用预订,以便任何匹配的实例自动使用此预留。

    5. 选择您要预留资源的区域地区

    6. 指定您要预留的虚拟机实例数量

    7. 根据需要指定您希望每个实例拥有的资源:vCPU 数量、满足最低要求的 CPU 平台、内存容量、GPU 和本地 SSD。

    8. 点击创建按钮以创建预留。

  2. 创建一个虚拟机实例,该实例针对任何开放式预留并与预留的实例属性相匹配。

    1. 转到“虚拟机实例”页面。

      转到“虚拟机实例”页面

    2. 选择您的项目,然后点击继续
    3. 点击创建实例按钮。
    4. 为您的实例指定名称
    5. 指定与 reservation-01 的属性相匹配的机器类型。例如,如果您在预留中指定了满足最低要求的 CPU 平台或 GPU,则必须自定义此实例以匹配预留,才能使用预留。
    6. 如果您的预留包含本地 SSD,请在磁盘下点击添加新磁盘添加与预留相匹配的本地 SSD
    7. 管理部分的预留下,选择自动使用已创建的预订
    8. 点击创建

gcloud

  1. 创建名为 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. 创建一个虚拟机实例,该虚拟机针对任何开放式预留并与 reservation-01 的实例属性(包括地区、vCPU、满足最低要求的 CPU 平台、内存、GPU 和本地 SSD 属性)相匹配。

    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. 创建名为 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. 创建一个虚拟机实例,该实例针对任何开放式预留并与 reservation-01 的实例属性(包括地区、vCPU、满足最低要求的 CPU 平台、内存、GPU 和本地 SSD 属性)相匹配

    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"
      },
      ...
    }
    

使用特定预留中的实例

在此模型中,只有按名称指定特定预留的新实例才能使用该预留。此模型非常有用(例如,在您希望保留一定容量作为备份供特殊事件使用时)。

创建预留时,请指定不应自动使用预留。然后,请创建明确指定该预留并与其属性相匹配的虚拟机

如果使用实例模板在区域托管实例组中创建虚拟机,请在每个适用地区创建具有相同名称的相同预留。然后,在组的实例模板中按名称指定预留。

例如,创建一个名为 reservation-02 的目标预留,然后创建一个匹配实例来使用该预留中的资源。

控制台

  1. 创建一个预留,其资源仅供按名称明确指定此预留的实例使用。

    1. 转到 GCP Console 中的承诺使用折扣页面。

      转到“承诺使用折扣”页面

    2. 点击创建预留以创建没有父级承诺使用合约的独立预留。

    3. 为预留命名,例如:reservation-02

    4. 用于虚拟机实例下,选中选择特定预订,以便只有按名称明确指定此预留的匹配实例可使用此预留。

    5. 选择您要预留资源的区域地区

    6. 指定您要预留的虚拟机实例数量

    7. 根据需要指定您希望每个实例拥有的资源:vCPU 数量、满足最低要求的 CPU 平台、内存容量、GPU 和本地 SSD。

    8. 点击创建按钮以创建预留。

  2. 创建一个虚拟机实例,该实例按名称指定预留并与预留的实例属性相匹配。

    1. 转到“虚拟机实例”页面。

      转到“虚拟机实例”页面

    2. 选择您的项目,然后点击继续
    3. 点击创建实例按钮。
    4. 为您的实例指定名称
    5. 指定与 reservation-01 的属性相匹配的机器类型。例如,如果您在预留中指定了满足最低要求的 CPU 平台,则必须自定义此实例以匹配预留,才能使用预留。
    6. 如果您的预留包含本地 SSD,请在磁盘下点击添加新磁盘添加与预留相匹配的本地 SSD
    7. 管理部分的预留下,选择具有匹配属性的可用预留,例如:reservation-02
    8. 点击创建以创建实例。

gcloud

  1. 创建一个名为 reservation-02 的预留,其资源仅供按名称明确指定此预留的实例使用。

    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. 创建一个虚拟机实例,它要按名称指定 reservation-02 并与该预留的实例属性(包括地区、vCPU、满足最低要求的 CPU 平台、内存、GPU 和本地 SSD 属性)相匹配。

    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. 创建一个名为 reservation-02 的预留,其资源仅供按名称明确指定此预留的实例使用。

    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. 创建一个虚拟机实例,它要按名称指定 reservation-02 并与该预留的实例属性(包括地区、vCPU、满足最低要求的 CPU 平台、内存、GPU 和本地 SSD)相匹配。

    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"
        ]
      },
      ...
    }

创建实例但不使用预留

如需避免使用任何预留中的资源,请在创建虚拟机时将预留相似性标志设置为“none”。

控制台

  1. 创建一个不使用预留中的资源的实例。
    1. 转到“虚拟机实例”页面。

      转到“虚拟机实例”页面

    2. 点击创建实例按钮。
    3. 像往常一样创建实例。
    4. 管理部分预留下,选择不使用以确保此实例不使用任何现有预留中的资源。
    5. 点击创建以创建实例。

gcloud

创建一个不使用预留中的资源的实例。

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

API

创建一个不使用预留中的资源的实例。

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"
  },
  ...
}

列出和描述预留

使用控制台、gcloud 命令行工具或 API 列出和查看预留的详细信息。

控制台

  1. 转到 GCP Console 中的承诺使用折扣页面。

    转到“承诺使用折扣”页面

  2. 点击预留以查看预留列表。

预留列表包含每个预留的详细信息。您可以使用使用的机器数(总数)列确定每个预留的利用率。

gcloud

使用 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

使用 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

您可以使用 countinUseCount 值确定每个预留的利用率。在本例中,预留了 50 个实例,当前使用了其中的 25 个实例。

API

在 API 中,通过向 reservations.list 方法发出 GET 请求来列出预留。

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

通过调用 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"
 }
}

您可以使用 countinUseCount 值确定每个预留的利用率。在本例中,预留了 50 个实例,当前使用了其中的 25 个实例。

修改预留

如果预留未附加到承诺使用合约,则可调整预留的大小或删除预留。

调整预留的大小

您可以使用 gcloud 命令行工具或 API 调整未与承诺使用合约关联的预留中的虚拟机数量。

gcloud

使用 gcloud compute reservations update 命令调整预留的容量。例如:

针对 2 个虚拟机创建一个预留:

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

将预留从 2 个虚拟机调整为 10 个虚拟机:

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

API

在 API 中,构建一个向 reservations.resize 方法发出的 POST 请求,并在请求正文中包含新的 specificSkuCount。以下请求正文将预留的虚拟机数量更新为 10 个。

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

{"specificSkuCount": "10"}

如果请求时目标地区中有足够的资源,而目标区域中有足够的配额,则更新请求将成功。

删除预留

您可以使用控制台、gcloud 命令行工具或 API 删除未与承诺使用合约关联的预留。

控制台

  1. 转到 GCP Console 中的承诺使用折扣页面。

    转到“承诺使用折扣”页面

  2. 点击预留以查看预留列表。
  3. 点击您要删除的每个预留旁边的复选框。

  4. 点击删除预留

gcloud

您可以使用 delete 命令释放预留:

gcloud compute reservations delete [RESERVATION_NAME] --zone [ZONE]

API

在 API 中,构建一个向 reservation.delete 方法发出的 DELETE 请求。

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

删除命令成功完成后,您将无需再为预留付费,系统也不再为您预留资源。删除预留将不影响与该预留关联的任何正在运行的实例;您仍然需要为这些实例付费。

将预留与承诺使用折扣相结合

承诺使用折扣提供 1 年或 3 年的折扣价格协议,但不在特定地区预留容量。即使预留的虚拟机未运行,预留也可确保特定地区中保留有容量。通过将预留与承诺使用合约相结合,您可按折扣价使用预留资源。

默认情况下,创建预留时,核心和内存适用的任何承诺使用折扣都将自动应用于虚拟机实例。但是,若要获得 GPU 和本地 SSD 的承诺使用折扣费率,则必须在购买承诺使用合约时为这些资源创建预留。

承诺使用合约一旦购买就无法取消。如需了解详情,请参阅承诺使用折扣

对 GPU 或本地 SSD 购买承诺使用合约

如需为 GPU 或本地 SSD 购买承诺使用合约,请注意以下几点:

  • 您必须购买通用 N1 承诺使用合约。GPU 仅受 N1 机器类型支持。
  • 在购买承诺使用合约时,您必须创建包含 GPU 或本地 SSD 的预留
  • 您无需在承诺使用合约中包含 vCPU 或内存。

您必须为特定的 GPU 类型购买承诺使用合约。例如,您可以购买 Tesla P100 或 Tesla V100,但不能在为 Tesla P100 GPU 购买承诺使用合约后,期望将该合约应用于其他 GPU 类型。

您预留的 GPU 和本地 SSD 的数量必须与您承诺使用合约中的数量相同。例如,如果要预留 4 个 V100 GPU,那么您的承诺使用合约中也必须包含 4 个 V100 GPU。但是,您预留的 vCPU 和内存的数量可能多于或少于您承诺使用合约中的数量。

如果您只想在承诺使用合约中包含 GPU 或本地 SSD,则可以为 vCPU 和内存承诺使用合约指定 0。但是,您附加到承诺使用合约的预留必须包含与承诺使用合约相同的 GPU 和本地 SSD,以及要保留的机器类型(包含 vCPU 和内存)。

您可以使用控制台、gcloud 工具或 API 购买包含附属预留的承诺使用合约。

控制台

  1. 转到 GCP Console 中的“承诺使用折扣”页面

    转到“承诺使用折扣”页面

  2. 点击购买承诺以购买新的承诺使用合约。
  3. 为您的承诺使用合约命名,并选择您希望应用该合约的区域。
  4. 对于承诺类型,请选择通用
  5. 选择承诺使用合约的持续时间(1 年或 3 年)。
  6. 选择承诺使用合约的输入模式:

    • (推荐)自定义输入可让您自定义 vCPU 数量和内存大小。

    • 基本输入可让您选择 vCPU 的数量,Compute Engine 将根据 vCPU 数量自动填充内存大小。

  7. 输入要购买的 vCPU 和内存的数量。每个 vCPU 的内存必须为特定比例,具体取决于您选择的折扣类型。对于标准承诺使用折扣,每个 vCPU 使用 0.9 GB 到 6.5 GB 的内存。总内存大小必须是 256 MB 的整数倍。

    如果您只想在承诺使用合约中包含并预留 GPU 或本地 SSD,而不包含 vCPU 和内存,请为 vCPU 和内存承诺使用合约数量指定 0

  8. 点击添加 GPU,然后选择您要在承诺使用合约中包含的 GPU 类型GPU 数量

  9. 点击添加本地 SSD,然后指定您要在承诺使用合约中包含的磁盘数。

  10. 点击添加新预留,为将要使用 GPU 和本地 SSD 的实例创建一个或多个预留。

    1. 为预留命名。
    2. 用于虚拟机实例下,执行以下操作:
      • 如果您只想在创建按名称明确指定此预留的匹配实例时使用此预留的资源,请选中选择特定预订
      • 如果您希望匹配实例自动使用此预留,请选择自动使用预订
    3. 选择您要预留资源的区域地区
    4. 指定您要预留的虚拟机实例数量
    5. 指定您要为每个实例预留的资源:
      • 如果您有实例模板,请点击使用实例模板,然后从列表中选择一个实例模板。
      • 否则,请点击指定机器类型
        1. 对于预定义机器类型,请从下拉菜单中选择所需的类型。
        2. 对于自定义机器类型(包括满足最低要求的 CPU 平台),或者,如需添加 GPU,请点击自定义并作出选择。
        3. (可选)指定您要添加到每个实例的本地 SSD 磁盘的数量,然后指定要使用的接口类型
    6. 点击创建按钮以创建预留。
  11. 点击购买按钮以购买承诺使用合约。

  12. 阅读购买条款;如果您已准备好购买承诺使用合约,请再次点击购买

gcloud

使用 gcloud compute commmitments create 命令购买承诺使用合约,并添加用于创建附属预留的标志。

例如,下述承诺使用合约包括 4 个 GPU 和一个相关的新预留,以便在 us-central1-a 的 2 个 n1-standard-32 实例中使用这些 GPU。

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

如果您想在承诺使用合约中包含并预留 GPU 或本地 SSD,而不包含 vCPU 和内存,请为 vCPU 和内存承诺使用合约数量指定 0

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

如需在购买承诺使用合约时创建多个预留,请使用 YAML 文件。例如:

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]

其中,[YAML_FILE] 包含预留属性。

例如,以下 YAML 文件包含 2 个预留。第一个预留 res-01 包含 1 个 n1-standard-1 实例,该实例挂接了 1 个 GPU;这是一个目标预留,表示您必须明确指定其名称才能使用其预留的实例。第二个预留 res-02 包含 1 个 n1-standard-1 虚拟机实例,该实例挂接了 2 种本地 SSD。

- 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

使用 regionCommitments.insert API 并添加 reservations 字段以定义预留的属性。例如,以下承诺使用合约包括 4 个 GPU 和 1 个相关的预留,以便在 us-central1-a 的 2 个实例中使用这些 GPU。

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"
    }
  ]
}

如果您只想在承诺使用合约中包含并预留 GPU 或本地 SSD,而不包含 vCPU 和内存,请为 VCPUMEMORY 承诺使用合约数量指定 0。例如:

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"
    }
  ]
}

只有在请求时有足够的配额,并且目标地区中有足够的资源时,才能成功创建承诺使用合约。

如果您创建的承诺使用合约附加了预留,则无法在承诺使用合约期间删除该预留。承诺使用合约到期时,Compute Engine 会自动删除所有附加预留。

如果您需要跨承诺使用合约中的预留转移 GPU 或本地 SSD,请参阅修改附加到承诺使用合约的预留

修改附加到承诺使用合约的预留

如果承诺使用合约具有一个或多个带 GPU/本地 SSD 的预留,可以使用 gcloud 工具或 API 在这些预留中转移 GPU 或本地 SSD。例如,您可以将 GPU 从一个预留移动到另一个新预留。

限制:

  • 只能在两个预留之间移动资源,其中一个是源预留,另一个是目标预留。源预留必须已经存在;目标预留可以是现有预留,也可以是新预留。
  • 源预留和目标预留必须位于同一地区。
  • 无法修改现有预留中的资源属性,只能将现有资源从一个预留转移到另一个预留。
  • GPU 和本地 SSD 的总数必须保持不变。
  • 每个请求只能更改 100 个虚拟机。如果想要更新更多虚拟机,请多次调用 API 或联系 Google Cloud 支持团队。
  • 您无法转移 vCPU 或内存,也无法修改附属预留的其他属性。

gcloud

使用 gcloud compute commitments update-reservations 命令。

创建一个承诺使用合约,其中包含一个预留:预留 res-1 具有 4 个 n1-standard-1 实例,每个实例具有 1 个 P100 GPU(4 个 vCPU 和 4 个 P100 GPU)。预留资源共包括 4 个 P100 GPU。

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 包含:

- 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

更新承诺使用合约,将一些资源从 res-1 转移到第二个新预留 res-2。在此示例中:

  • 修改 res-1,使其包含 2 个 n1-standard-1 实例,每个实例具有 2 个 P100 GPU(2 个 vCPU 和 2 个 P100 GPU)。
  • 添加 res-2 以包含 2 个 n1-standard-2 实例,每个实例有 1 个 P100 GPU(4 个 vCPU 和 2 个 P100 GPU)。

承诺使用合约中预留 GPU 的总数保持不变,仍然是 4 个。

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

其中,two-reservations.yaml 包含:

- 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

使用 regionCommitments.updateReservations 方法。

例如,您可以创建一个包含以下预留的承诺使用合约:

  • res-1 具有 4 个 n1-standard-1 实例,每个实例具有 1 个 nvidia-tesla-p100 GPU(4 个 vCPU 和 4 个 P100 GPU)。

在本例中,预留资源共包括 4 个 P100 GPU。

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"
    }
  ]
}

更新承诺使用合约,将一些资源从 res-1 转移到第二个新预留 res-2。在此示例中:

  • 修改 res-1,使其包含 2 个 n1-standard-1 实例,每个实例具有 2 个 P100 GPU(2 个 vCPU 和 2 个 P100 GPU)。
  • 添加 res-2 以包含 2 个 n1-standard-2 实例,每个实例有 1 个 P100 GPU(4 个 vCPU 和 2 个 P100 GPU)。

承诺使用合约中预留 GPU 的总数保持不变,仍然是 4 个。

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"
    }
  ]
}

查看预留使用情况报告

您可以通过使用情况导出功能将 Compute Engine 使用情况的详细报告导出到 Cloud Storage 存储分区。如需了解相关说明,请参阅查看使用情况报告

使用情况报告会显示以下信息:

  • 正在使用的预留资源。相应的条目显示为普通的 vCPU、内存、GPU 和本地 SSD 资源。
  • 未使用的预留资源。相应的条目具有普通的 SKU 名称和“预留”资源 URI。
  • 总体预留资源。相应的条目具有“预留”SKU 名称和“预留”资源 URI。这些条目没有相关的费用。您可以使用这些条目计算您正在使用的预留数量。
计量项 MeasurementId 格式 Resource URI 格式
正在使用的预留资源 com.google.cloud/services/compute-engine/[SKU_NAME] https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/[RESOURCE_TYPE]/[RESOURCE_NAME]

例如,https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/instances/my-instance
未使用的预留资源 com.google.cloud/services/compute-engine/[SKU_NAME] https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/reservations/[RESERVATION_NAME]

例如,https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-a/reservations/my-reservation
总体预留资源 com.google.cloud/services/compute-engine/Reservation[SKU_NAME] https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/reservations/[RESERVATION_NAME]

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

例如,在名为 my-reservation 的预留使用情况报告的以下代码段中:

  • 第 1 行显示当前正在使用的预留 RAM。该行的 ResourceId 显示此 RAM 由名为 my-instance 的实例使用。
  • 第 2 行显示未使用的预留 RAM。该行的 ResourceId 显示此预留 RAM 由 my-reservation 保留;还没有任何实例使用它。
  • 第 3 行显示预留中的总体预留 RAM。
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
...

预留结算

预留与预留的资源按相同的费率结算。如常规虚拟机一样,持续使用折扣、承诺使用折扣和自定义价格同样适用。

请看以下示例:

  • us-central1 中有 3 个 vCPU 承诺使用合约
  • us-central1-a 中正在运行 5 个 vCPU
  • us-central1-a 中有 10 个 vCPU 预留

采用一些承诺使用折扣的预留示例

将按以下方式结算:

涵盖范围 vCPU 的数量
承诺使用折扣价格 3
按需价格(2 个 vCPU 已使用的预留 + 5 个 vCPU 未使用的预留) 7

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档