预留 Compute Engine 地区资源

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

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

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

准备工作

优势

预留具有下列优势:

  • 机器随时可供使用,即使您不立即使用它们。
  • 没有时间限制。您可以随时创建预留,也可以随时将其删除以免继续产生费用。

  • 折扣。由于预留是按与所预留的资源相同的方式和费率结算的,因此预留资源也享有承诺使用折扣和持续使用折扣。

局限和限制

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

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

预留的工作原理

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

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

  • 地区
  • 机器类型(核心和内存)
  • 满足最低要求的 CPU 平台
  • GPU 类型
  • GPU 数量
  • 本地 SSD 接口
  • 本地 SSD 大小

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

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

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

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

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

创建预留

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

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

控制台

  1. 在 Google Cloud 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-2。 如果是自定义机器类型,请使用 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://compute.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-2。 如果是自定义机器类型,请使用 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://compute.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. 在 Cloud Console 中,转到承诺使用折扣页面。

      转到“承诺使用折扣”

    2. 如需创建没有父级承诺的独立预留,请点击创建预留

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

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

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

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

    7. 指定您希望每个实例拥有的资源:

      • vCPU 数量
      • 满足最低要求的 CPU 平台
      • 内存量
      • GPU
      • 本地 SSD(根据需要)
    8. 点击创建按钮以创建预留。

  2. 创建一个虚拟机实例,该实例指向任何开放式预留并与 reservation-01 中的实例属性相匹配,这些属性包括地区、机器类型(vCPU 数量和内存量)、满足最低要求的 CPU 平台、GPU 数量和类型,以及本地 SSD 接口和大小。

    1. 在 Cloud Console 中,转到虚拟机实例页面。

      转到“虚拟机实例”

    2. 选择您的项目并点击继续

    3. 点击创建实例

    4. 为您的实例指定名称

    5. 指定与 reservation-01 的属性相匹配的机器类型。例如,如果您在预留中指定了满足最低要求的 CPU 平台或 GPU,则必须自定义此实例以匹配预留,才能使用预留。

    6. 如果您的预留包含本地 SSD,请在磁盘下点击添加新磁盘添加与预留的本地 SSD 接口和容量相匹配的本地 SSD

    7. 管理部分的预留下,选择自动使用已创建的预订

    8. 点击创建

gcloud

  1. 创建一个名为 reservation-01 的开放式预留。

    gcloud compute reservations create reservation-01 \
        --machine-type=n2-standard-32 \
        --min-cpu-platform "Intel Cascade Lake" \
        --vm-count=2 \
        --zone=us-central1-a
    
  2. 创建一个虚拟机实例,该实例指向任何开放式预留并与 reservation-01 中的实例属性相匹配,这些属性包括地区、机器类型(vCPU 数量和内存量)、满足最低要求的 CPU 平台、GPU 数量和类型,以及本地 SSD 接口和大小。

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

API

  1. 创建一个名为 reservation-01 的开放式预留。

    POST https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/reservations
    
    {
      "name":"reservation-01",
      "specificReservation":{
        "count":"2",
        "instanceProperties":{
          "machineType":"n2-standard-32",
          "minCpuPlatform": "Intel Cascade Lake",
        }
      },
      "specificReservationRequired": false
    }
    
  2. 创建一个虚拟机实例,该实例指向任何开放式预留并与 reservation-01 中的实例属性相匹配,这些属性包括地区、机器类型(vCPU 数量和内存量)、满足最低要求的 CPU 平台、GPU 数量和类型,以及本地 SSD 接口和大小。

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

使用特定预留中的实例

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

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

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

例如,创建一个名为 reservation-02 的特定预留,然后创建一个匹配实例,该实例针对该预留并与该预留的实例属性相匹配。

控制台

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

    1. 在 Cloud Console 中,转到承诺使用折扣页面。

      转到“承诺使用折扣”

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

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

    4. 用于虚拟机实例下方,选中选择特定预订,以使此预留仅可供通过名称明确指向此预留的匹配实例使用。

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

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

    7. 指定您希望每个实例拥有的资源:

      • vCPU 数量
      • 满足最低要求的 CPU 平台
      • 内存量
      • GPU
      • 本地 SSD
    8. 点击创建

  2. 创建一个通过名称指向该特定预留的虚拟机实例。

    确保该实例的属性与该特定预留的实例属性相匹配,这些属性包括地区、机器类型(vCPU 数量和内存量)、满足最低要求的 CPU 平台、GPU 数量和类型,以及本地 SSD 接口和大小。

    1. 在 Cloud Console 中,转到虚拟机实例页面。

      转到“虚拟机实例”

    2. 选择您的项目并点击继续

    3. 点击创建实例按钮。

    4. 为您的实例指定名称

    5. 指定与 reservation-01 的属性相匹配的机器类型。例如,如果您在预留中指定了满足最低要求的 CPU 平台,则必须自定义此实例以匹配预留,才能使用预留。

    6. 如果您的预留包含本地 SSD,请在磁盘下点击添加新磁盘添加与预留的本地 SSD 接口和容量相匹配的本地 SSD

    7. 管理部分的预留下,选择具有匹配属性的可用预留,例如:reservation-02

    8. 点击创建以创建实例。

gcloud

  1. 使用 --require-specific-reservation 标志创建一个名为 reservation-02 的预留。只有按名称明确针对此预留的实例可使用这些预留资源。

    gcloud compute reservations create reservation-02 \
        --machine-type=n2-standard-32 \
        --min-cpu-platform "Intel Cascade Lake" \
        --vm-count=10 \
        --zone=us-central1-a \
        --require-specific-reservation
    
  2. 使用 --reservation-affinity--reservation 标志创建一个按名称针对 reservation-02 的虚拟机实例。

    确保该实例的属性与该预留的实例属性相匹配,这些属性包括地区、机器类型(vCPU 数量和内存量)、满足最低要求的 CPU 平台、GPU 数量和类型,以及本地 SSD 接口和大小。

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

API

  1. 创建一个名为 reservation-02 的预留,并将 specificReservationRequired 字段设置为 true

    POST https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/reservations
    
    {
      "name":"reservation-02",
      "specificReservation":{
        "count":"10",
        "instanceProperties":{
          "machineType":"n2-standard-32",
          "minCpuPlatform": "Intel Cascade Lake",
        }
      },
      "specificReservationRequired": true
    }
  2. 使用 reservationAffinity 字段创建一个按名称针对 reservation-02 的虚拟机实例。

    确保该实例的属性与该预留的实例属性相匹配,这些属性包括地区、机器类型(vCPU 数量和内存量)、满足最低要求的 CPU 平台、GPU 数量和类型,以及本地 SSD 接口和大小。

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

创建实例但不使用预留

如需明确避免使用任何预留中的资源,请在创建虚拟机时将预留相似性标志设置为“none”。或者,如需隐式避免用完您的任何预留,请创建一个与您任何预留的实例属性都不匹配的实例。

控制台

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

    1. 在 Cloud Console 中,转到虚拟机实例页面。

      转到“虚拟机实例”

    2. 点击创建实例

    3. 照常创建实例。

    4. 管理部分的预留下方,选择不使用以确保此实例不使用任何现有预留中的资源。

    5. 点击创建

gcloud

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

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

或者,创建一个与您任何预留中的实例属性都不匹配的实例。如需查看预留属性,请参阅列出和描述预留

API

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

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

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

或者,创建一个与您任何预留中的实例属性都不匹配的实例。如需查看预留属性,请参阅列出和描述预留

确保利用预留

如果您无法使用预留资源,请查看预留的属性和实例的属性。如需测试实例的属性是否与预留的属性相匹配,请创建一个特定预留,然后创建一个针对该特定预留的实例。

验证预留属性

预留的实例属性必须与实例创建命令中的属性相匹配。要进行验证,请执行以下操作:

  1. 检查预留的属性,特别是以下属性:

    • zone
    • specificReservationRequired
      • 如果设置为 true,则实例创建命令必须按名称针对此预留。
    • machineType
    • guestAccelerators.acceleratorType
    • guestAccelerators.acceleratorCount
    • minCpuPlatform
      • 如果您有一个具有 minCpuPlatform 属性的虚拟机实例,并且想要创建使用该实例的预留,请创建具有匹配属性(包括匹配的 minCpuPlatform)的预留。
      • 如果您有一个具有 minCpuPlatform 属性的预留,并且想要创建使用该预留的实例,请创建具有匹配属性(包括匹配的 minCpuPlatform)的实例。
    • localSsds.diskSizeGb
    • localSsds.interface
  2. 创建一个与这些属性相匹配的实例。

  3. 描述实例以验证其属性与预留的属性相匹配。例如,通过 gcloud 工具使用 instances describe 命令。

  4. 描述您的预留以检查其 inUseCount 是否已递增。

    • 如果 inUseCount 未更改,则说明属性不匹配。
    • 如果 inUseCount 已递增,则说明实例正在使用预留。

针对特定预留

如果您尝试创建针对特定预留的实例,则除非该实例与该预留的属性相匹配,否则无法创建。使用此方法可以验证实例属性是否正确。

  1. 使用 specificReservationRequired 选项创建一个预留
  2. 通过预留相似性属性创建一个明确与该预留的实例属性相匹配并且通过名称指向该预留的实例。
    • 如果实例属性不匹配,您会看到错误。
    • 如果实例属性匹配,则说明实例正在使用预留。

列出和描述预留

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

控制台

  1. 在 Cloud 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

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

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

如需创建使用此预留的实例,请记得匹配预留的实例属性。例如:

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

API

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

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

通过调用 reservations.get 方法来描述预留。

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

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

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

修改预留

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

调整预留的大小

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

gcloud

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

针对两个虚拟机实例创建一个预留:

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

将预留从两个虚拟机实例调整为十个虚拟机实例:

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

API

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

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME/resize

{"specificSkuCount": "10"}

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

删除预留

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

控制台

  1. 在 Cloud Console 中,转到承诺使用折扣页面。

    转到“承诺使用折扣”

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

  3. 选中您要删除的每个预留旁边的复选框。

  4. 点击删除预留

gcloud

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

gcloud compute reservations delete RESERVATION_NAME --zone ZONE

API

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

DELETE https://compute.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 和内存)。

您可以使用 Cloud Console、gcloud 工具或 API 购买附加预留的承诺。

控制台

  1. 在 Google Cloud Console 中,转到承诺使用折扣页面。

    转到“承诺使用折扣”

  2. 如需购买新的承诺,请点击购买使用承诺

  3. 为您的承诺命名,并选择您希望应用该承诺的区域。

  4. 对于承诺类型,请选择通用

  5. 选择承诺的持续时间(1 年或 3 年)。

  6. 输入您要购买的核心数量和内存量。如果您只想在承诺中包含并预留 GPU 或本地 SSD,而不包含 vCPU 和内存,请为 vCPU 和内存承诺数量指定 0。

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

  8. 点击添加本地 SSD 并指定要承诺使用的磁盘数量。

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

    1. 为预留命名。
    2. 用于虚拟机实例下,执行以下操作:
      • 如果您只想在创建按名称明确指定此预留的匹配实例时使用此预留的资源,请选中选择特定预订
      • 如果您希望匹配实例自动使用此预留,请选择自动使用预订
    3. 选择您要预留资源的地区
    4. 指定您要预留的虚拟机实例数量
    5. 指定您要为每个实例预留的资源:
      • 如果您有实例模板,请点击使用实例模板,然后从列表中选择一个实例模板。
      • 否则,请点击指定机器类型
        1. 点击自定义,使用滑块为您的机器类型选择核心数量和内存量。
        2. 指定 CPU 平台
        3. 如需添加 GPU,请输入 GPU 数量GPU 类型
        4. (可选)指定要添加到每个实例的本地 SSD 数量,并指定要使用的接口类型
    6. 点击完成按钮以创建预留。
  10. 点击购买按钮以购买承诺。

  11. 阅读购买条款,并在准备好购买承诺时点击购买

gcloud

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

例如,以下承诺包括 4 个 GPU 和 1 个相关的新预留,以便在 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 compute commitments create commitment-01 \
    --region=us-west2 \
    --resources=vcpu=0,memory=0 \
    --resources-accelerator=type=nvidia-tesla-p4,count=1 \
    --plan 12-month \
    --reservation=reservation-01 \
    --reservation-zone=us-west2-b \
    --machine-type=n1-standard-2 \
    --accelerator=type=nvidia-tesla-p4,count=1 \
    --vm-count=1

如需在购买承诺时创建多个预留,请使用包含预留属性的 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 文件包含 2 个预留。第一个预留 res-01 包含 1 个 n1-standard-2 实例,该实例挂接了 1 个 GPU;这是一个目标预留,表示您必须明确指定其名称才能使用其预留的实例。第二个预留 res-02 包含 1 个 n1-standard-2 虚拟机实例,该实例挂接了 2 种本地 SSD。

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

API

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

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

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

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

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

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

仅当在请求时有足够配额并且目标地区中有足够资源的情况下,才能成功创建承诺。

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

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

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

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

限制:

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

gcloud

使用 gcloud beta compute commitments update-reservations 命令。

创建一个承诺使用合约,其中包含一个预留:

  • res-1 具有 4 个 n1-standard-2 实例,每个实例具有 1 个 P100 GPU(4 个 vCPU 和 4 个 P100 GPU)。预留资源共包括 4 个 P100 GPU。
gcloud beta compute commitments create my-commitment-with-reservations \
    --region=asia-east1 \
    --resources=vcpu=10,memory=32GB \
    --resources-accelerator=type=nvidia-tesla-p100,count=4 \
    --plan 12-month \
    --reservations-from-file=one-reservation.yaml

one-reservation.yaml 文件包含:

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

更新承诺使用合约,将 res-1 中的部分资源转移到另一个新预留 res-2。在此示例中:

  • 修改 res-1,使其具有 2 个 n1-standard-2 实例,每个实例具有 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 beta 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-2
  accelerator:
  - count: 1
    type: nvidia-tesla-p100
- reservation: res-2
  reservation_zone: asia-east1-a
  require_specific_reservation: true
  vm_count: 2
  machine_type: n1-standard-2
  accelerator:
  - count: 1
    type: nvidia-tesla-p100

API

使用 regionCommitments.updateReservations 方法。

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

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

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

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

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

更新承诺使用合约,将 res-1 中的部分资源转移到另一个新预留 res-2。在此示例中:

  • 修改 res-1,使其具有 2 个 n1-standard-2 实例,每个实例具有 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://compute.googleapis.com/compute/beta/projects/my-project/regions/asia-east1/commitments/my-commitment-with-reservation/updateReservations

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

查看预留使用情况报告

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

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

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

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

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

例如 https://compute.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/VmimageN2StandardRam,166970074857472,byte-seconds,https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central2-a/instances/my-instance,1775485842510981624,us-central2-a
2019-06-06,com.google.cloud/services/compute-engine/VmimageN2StandardRam,166970074857472,byte-seconds,https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central2-a/reservations/my-reservation,7.58809E+17,us-central2-a
2019-06-06,com.google.cloud/services/compute-engine/ReservationN2StandardRam,333940149714944,byte-seconds,https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central2-a/reservations/my-reservation,7.58809E+17,us-central2-a
...

预留结算

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

请看以下示例:

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

具有部分承诺使用折扣的预留。

您需要按照以下方式付费:

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

后续步骤