修改预留


本文档介绍如何修改现有预留。

例如,当您的容量需求发生变化,或者您要允许或禁止项目使用共享预留时,修改预留会很有用。如果您想修改共享预留,只能使用所有者项目进行修改。

如需修改附加到承诺的预留,请参阅替换附加到承诺的预留

准备工作

  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以选择以下任一选项向 Compute Engine 进行身份验证:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

所需的角色

如需获得修改预留所需的权限,请让您的管理员向您授予项目的 Compute Admin (roles/compute.admin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含修改预留所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

修改预留需要以下权限:

  • 如需修改预留中的自动删除选项或共享预留中的使用方项目,请执行以下操作:针对项目的 compute.reservations.update 权限
  • 如需修改预留中的虚拟机数量:针对项目的 compute.reservations.resize 权限

您也可以使用自定义角色或其他预定义角色来获取这些权限。

修改预留

根据您要在预留中修改的属性,使用以下方法之一:

如果您想要更改此列表中未提及的任何属性,请参阅本文档中的更改预留中的其他属性

修改预留的自动删除

您可以通过执行以下操作之一来修改 Compute Engine 自动删除现有预留的时间:

  • 启用自动删除选项,或更改自动删除预留的时间。

  • 停用自动删除选项。

如需修改预留的自动删除,请选择以下选项之一:

控制台

  1. 在 Google Cloud 控制台中,转到预留页面。

    转到“预留”

  2. 按需预留标签页(默认)的名称列中,点击要修改的预留的名称。

    随即会打开所选预留的详情页面。

  3. 自动删除时间行中,点击 修改自动删除时间

  4. 更新预留窗格中,执行以下操作之一:

    • 如需在特定日期和时间删除预留,请执行以下操作:

      1. 如果尚未启用自动删除选项,请点击启用自动删除切换开关,以将其切换为开启位置。

      2. 自动删除时间字段中,输入 Compute Engine 自动删除预留的日期和时间。

    • 否则,请点击启用自动删除切换开关,以切换到关闭位置。

  5. 点击提交

    修改预留的操作可能需要几秒钟时间才能完成。

gcloud

在预留中启用自动删除选项时,您可以指定应删除预留的日期和时间,或指定在某个时间段后删除预留。

如需启用自动删除选项或更改应删除预留的时间,请执行以下操作之一:

  • 如需在特定日期和时间删除预留,请使用带有 --delete-at-time 标志的 gcloud beta compute reservations update 命令

    gcloud beta compute reservations update RESERVATION_NAME \
        --delete-at-time=DELETE_AT_TIME \
        --zone=ZONE
    

    替换以下内容:

    • RESERVATION_NAME:现有预留的名称。

    • DELETE_AT_TIME:采用 RFC 3339 时间戳格式的日期和时间。

    • ZONE:预留所在的可用区。

  • 如需在特定时间段后删除预留,请使用带有 --delete-after-duration 标志的 gcloud beta compute reservations update 命令

    gcloud beta compute reservations update RESERVATION_NAME \
        --delete-after-duration=DELETE_AFTER_DURATION \
        --zone=ZONE
    

    替换以下内容:

    • RESERVATION_NAME:现有预留的名称。

    • DELETE_AFTER_DURATION:以天、小时、分钟或秒为单位的时长,超过此时间将自动删除预留。例如,指定 30m 表示 30 分钟,或指定 1d2h3m4s 表示 1 天 2 小时 3 分钟 4 秒。

    • ZONE:预留所在的可用区。

如需停用自动删除选项,请使用带有 --disable-auto-delete 标志的 gcloud beta compute reservations update 命令

gcloud beta compute reservations update RESERVATION_NAME \
    --disable-auto-delete \
    --zone=ZONE

替换以下内容:

  • RESERVATION_NAME:现有预留的名称。

  • ZONE:预留所在的可用区。

REST

在预留中启用自动删除选项时,您可以指定应删除预留的日期和时间,或指定在某个时间段后删除预留。

如需启用自动删除选项或更改应删除预留的时间,请执行以下操作之一:

  • 如需在特定日期和时间删除预留,请向 beta.reservations.update 方法发出 PATCH 请求。在请求网址中添加 paths 查询参数并设置为 deleteAtTime

    PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME?paths=deleteAtTime
    
    {
      "name": "RESERVATION_NAME",
      "deleteAtTime": "DELETE_AT_TIME"
    }
    

    替换以下内容:

    • PROJECT_ID:预留所在项目的 ID。

    • ZONE:预留所在的可用区。

    • RESERVATION_NAME:现有预留的名称。

    • DELETE_AT_TIME:采用 RFC 3339 时间戳格式的日期和时间。

  • 如需在特定时间段后删除预留,请向 beta.reservations.update 方法发出 PATCH 请求。在请求网址中添加 paths 查询参数并设置为 deleteAfterDuration.seconds

    PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME?paths=deleteAfterDuration.seconds
    
    {
      "name": "RESERVATION_NAME",
      "deleteAfterDuration": {
        "seconds": "DELETE_AFTER_DURATION"
      }
    }
    

    替换以下内容:

    • PROJECT_ID:预留所在项目的 ID。

    • ZONE:预留所在的可用区。

    • RESERVATION_NAME:现有预留的名称。

    • DELETE_AFTER_DURATION:以秒为单位的时长,超过此时间将自动删除预留。例如,指定 86400 标识 86400 秒(1 天)。

如需停用自动删除选项,请向 beta.reservations.update 方法发出 PATCH 请求。在请求中,指定 paths=deleteAtTime&paths=deleteAfterDuration 查询参数并省略请求正文。

PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME?paths=deleteAtTime&paths=deleteAfterDuration

替换以下内容:

  • PROJECT_ID:预留所在项目的 ID。

  • ZONE:预留所在的可用区。

  • RESERVATION_NAME:现有预留的名称。

修改共享预留中的使用方项目

仅当项目与所有者项目位于同一组织中时,您才能允许相应项目使用共享预留。如需了解如何将项目迁移到所有者项目的组织,请参阅 Resource Manager 文档中的在组织资源之间迁移项目

修改哪些使用方项目可以使用共享预留后,该预留的使用情况可能会发生变化。例如,任何已移除的使用方项目都会停止使用预留中的资源。此外,如果将预留配置为与预留属性匹配的任何虚拟机自动使用(默认行为),则任何添加的使用方项目都可能会开始使用预留中的资源。如果您要监控预留的使用情况,请参阅如何验证预留使用情况

如需修改可以使用共享预留的使用方项目,请选择以下选项之一:

控制台

  1. 在 Google Cloud 控制台中,转到预留页面。

    转到“预留”

  2. 按需预留标签页(默认)的名称列中,点击要说明的预留的名称。

    随即会显示预留的详情页面。

  3. 点击 修改

  4. 所选项目部分中,执行以下操作之一:

    • 如需停止与特定使用方项目共享预留,请点击 删除

    • 如需开始与一个或多个特定项目共享预留,请执行以下操作:

      1. 点击 添加项目

      2. 针对您要与之共享预留的所有者项目的组织,选中每个项目对应的复选框。

      3. 点击选择

  5. 若要确认您的更改,请点击保存

    修改预留的操作可能需要几秒钟时间才能完成。

gcloud

修改共享预留的使用方项目时,必须指定允许或不再允许使用共享预留的项目的 ID 列表(以英文逗号分隔)。这些项目必须与所有者项目位于同一组织中。请勿在列表中指定所有者项目。默认情况下,已允许使用共享预留。

如需修改共享预留的使用方项目,请选择以下方法之一:

  • 如需允许一个或多个项目使用共享预留,请使用带有 --add-share-with 标志的 gcloud compute reservations update 命令

    gcloud compute reservations update RESERVATION_NAME \
        --add-share-with=CONSUMER_PROJECT_IDS \
        --zone=ZONE
    

    替换以下内容:

    • RESERVATION_NAME:现有共享预留的名称。

    • CONSUMER_PROJECT_IDS:要与之共享预留的项目的 ID 列表(以英文逗号分隔)。例如,指定 project-1,project-2

    • ZONE:共享预留所在的可用区。

  • 如需不再允许一个或多个项目使用共享预留,请使用带 --remove-share-with 标志的 gcloud compute reservations update 命令

    gcloud compute reservations update RESERVATION_NAME \
        --remove-share-with=CONSUMER_PROJECT_IDS \
        --zone=ZONE
    

    替换以下内容:

    • RESERVATION_NAME:现有共享预留的名称。

    • CONSUMER_PROJECT_IDS:您希望不再与之共享预留的项目的 ID 列表(以英文逗号分隔)。例如,指定 project-1,project-2

    • ZONE:共享预留所在的可用区。

  • 如需替换可使用共享预留的项目列表,请将 gcloud beta compute reservations update 命令--share-with 标志结合使用。

    gcloud beta compute reservations update RESERVATION_NAME \
        --share-with=CONSUMER_PROJECT_IDS \
        --zone=ZONE
    

    替换以下内容:

    • RESERVATION_NAME:现有共享预留的名称。

    • ZONE:共享预留所在的可用区。

    • CONSUMER_PROJECT_IDS:要与之共享预留的项目的 ID 列表(以英文逗号分隔)。例如,指定 project-1,project-2

REST

修改共享预留的使用方项目时,必须指定您要允许或不再允许使用共享预留的项目的 ID。这些项目必须与所有者项目位于同一组织中。请勿指定所有者项目。默认情况下,已允许使用共享预留。

如需修改共享预留的使用方项目,请选择以下方法之一:

  • 如需允许一个或多个项目使用共享预留,请向 reservations.update 方法发出 PATCH 请求。在请求网址中,针对您要与之共享预留的每个项目包含 paths=shareSettings.projectMap.PROJECT_ID 查询参数。

    例如,如需允许两个项目使用共享预留,请发出以下 PATCH 请求:

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME?paths=shareSettings.projectMap.CONSUMER_PROJECT_ID_1&paths=shareSettings.projectMap.CONSUMER_PROJECT_ID_2
    
    {
      "name": "RESERVATION_NAME",
      "shareSetting": {
        "projectMap": {
          "CONSUMER_PROJECT_ID_1": {
            "projectId": "CONSUMER_PROJECT_ID_1"
          },
          "CONSUMER_PROJECT_ID_2": {
            "projectId": "CONSUMER_PROJECT_ID_2"
          }
        }
      }
    }
    

    替换以下内容:

    • PROJECT_ID:所有者项目的 ID,即用于创建共享预留的项目。

    • ZONE:共享预留所在的可用区。

    • RESERVATION_NAME:现有共享预留的名称。

    • CONSUMER_PROJECT_ID_1CONSUMER_PROJECT_ID_2:您要与之共享预留的两个项目的 ID。

  • 如需不再允许一个或多个项目使用共享预留,请向 reservations.update 方法发出 PATCH 请求。在请求网址中,针对您要停止与之共享预留的每个项目包含 paths=shareSettings.projectMap.PROJECT_ID 查询参数。此外,您还必须在请求正文中省略 shareSetting 字段。

    例如,如需不再允许两个项目使用共享预留,请发出以下 PATCH 请求:

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME?paths=shareSettings.projectMap.CONSUMER_PROJECT_ID_1&paths=shareSettings.projectMap.CONSUMER_PROJECT_ID_2
    
    {
      "name": "RESERVATION_NAME"
    }
    

    替换以下内容:

    • PROJECT_ID:所有者项目的 ID,即用于创建共享预留的项目。

    • ZONE:共享预留所在的可用区。

    • RESERVATION_NAME:现有共享预留的名称。

    • CONSUMER_PROJECT_ID_1CONSUMER_PROJECT_ID_2:您要停止与之共享预留的两个项目的 ID。

修改预留中的预留虚拟机数量

您可以修改现有预留,以增加或减少预留的虚拟机数量。

在修改预留中预留虚拟机的数量之前,请确保满足以下条件:

  • 如果要增加预留中的预留虚拟机数量,请确保满足以下条件:

    • 预留所在的可用区中必须有足够的资源。

    • 您必须对要预留的其他资源拥有足够的配额,即 CPU 配额GPU 配额。如需增加配额,请参阅 Cloud 配额文档中的查看和管理配额

  • 如果预留的使用类型是特定的,并且您希望减少预留中的预留虚拟机数量,则确保使用预留的虚拟机数量不超过所需的预留大小。您可以使用以下方法执行此操作:

如需修改预留中的预留虚拟机数量,请选择以下选项之一:

控制台

  1. 在 Google Cloud 控制台中,转到预留页面。

    转到“预留”

  2. 按需预留标签页(默认)的名称列中,点击要修改的预留的名称。

    随即会显示预留的详情页面。

  3. 点击 修改

  4. 虚拟机实例数量字段中,重新输入要预留的虚拟机数量。

  5. 点击保存进行确认。

    修改预留的操作可能需要几秒钟时间才能完成。

gcloud

如需修改预留中的预留虚拟机数量,请使用 gcloud compute reservations update 命令

gcloud compute reservations update RESERVATION_NAME \
    --vm-count=NUMBER_OF_VMS \
    --zone=ZONE

替换以下内容:

  • RESERVATION_NAME:现有预留的名称。

  • NUMBER_OF_VMS:要预留的虚拟机的新数量。

  • ZONE:预留所在的可用区。

REST

如需修改预留中的预留虚拟机数量,请向 reservations.resize 方法发出 POST 请求。

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

{
  "specificSkuCount": "NUMBER_OF_VMS"
}

替换以下内容:

  • PROJECT_ID:预留所在项目的 ID。

  • ZONE:预留所在的可用区。

  • RESERVATION_NAME:现有预留的名称。

  • NUMBER_OF_VMS:要预留的虚拟机的新数量。

修改预留的共享政策

通过修改 GPU 虚拟机预留的共享政策,您可以允许或禁止 Vertex AI 中的自定义训练作业或预测作业使用预留。

如果您想禁止 Vertex AI 使用预留,请在修改预留之前,确保没有自定义训练作业或预测作业在使用该预留。否则,您会遇到错误。

如需修改 GPU 虚拟机预留的共享政策,请选择以下选项之一:

控制台

  1. 在 Google Cloud 控制台中,转到预留页面。

    转到“预留”

  2. 按需预留标签页(默认)的名称列中,点击要修改的 GPU 虚拟机预留的名称。

    随即会打开所选预留的详情页面。

  3. 与其他 Google Cloud 服务共享行中,点击 修改服务共享设置

  4. 预留共享窗格中,执行以下操作之一:

    • 如需允许 Vertex AI 使用预留,请选择共享预留

    • 如要禁止 Vertex AI 使用预留,请选择不共享预留

  5. 点击保存

    修改预留的操作可能需要几秒钟时间才能完成。

gcloud

如需修改 GPU 虚拟机预留的共享政策,请使用带有 --reservation-sharing-policy 标志的 gcloud beta compute reservations update 命令

gcloud beta compute reservations update RESERVATION_NAME \
    --reservation-sharing-policy=SHARING_POLICY \
    --zone=ZONE

替换以下内容:

  • RESERVATION_NAME:现有预留的名称。

  • SHARING_POLICY:预留的共享政策。请指定以下某个值:

    • 如需允许 Vertex AI 使用预留资源,请执行以下操作: ALLOW_ALL

    • 如需禁止 Vertex AI 使用预留资源,请执行以下操作: DISALLOW_ALL

  • ZONE:预留所在的可用区。

REST

如需修改 GPU 虚拟机预留的共享政策,请向 beta.reservations.update 方法发出 PATCH 请求。在请求网址中添加 paths 查询参数并设置为 reservationSharingPolicy.serviceShareType

PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME?paths=reservationSharingPolicy.serviceShareType

{
  "name": "RESERVATION_NAME",
  "reservationSharingPolicy": {
    "serviceShareType": "SHARING_POLICY"
  }
}

替换以下内容:

  • PROJECT_ID:预留所在项目的 ID。

  • ZONE:预留所在的可用区。

  • RESERVATION_NAME:现有预留的名称。

  • SHARING_POLICY:预留的共享政策。请指定以下某个值:

    • 如需允许 Vertex AI 使用预留资源,请执行以下操作: ALLOW_ALL

    • 如需禁止 Vertex AI 使用预留资源,请执行以下操作: DISALLOW_ALL

更改预留中的其他属性

如果您要修改修改预留部分中未提到的属性,则必须改为创建替换预留。

如需在不会导致预留容量意外减少的情况下替换预留,请执行以下操作:

  1. 使用更新后的属性创建新的单项目共享预留

  2. 如果您不再需要原始预留,请删除预留

问题排查

了解如何排查预留更新存在的问题

后续步骤