修改预留


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

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

准备工作

  • 查看预留的要求限制
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

    REST

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

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

所需的角色

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

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

所需权限

修改预留需要以下权限:

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

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

修改预留

您可以对现有预留进行以下更改:

如果要修改未附加到承诺的预留中的其他属性,请参阅本文档中的更改预留中的其他属性

修改预留的自动删除

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

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

  • 停用自动删除选项。

如需修改预留的自动删除,请使用 Google Cloud 控制台、gcloud CLI 或 REST。

控制台

如需修改预留的自动删除,请按以下步骤操作:

  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 \
        --project=PROJECT_ID \
        --zone=ZONE
    

    替换以下内容:

    • RESERVATION_NAME:现有预留的名称。

    • DELETE_AT_TIME:采用 RFC 3339 时间戳格式的日期和时间,必须如下所示:

      YYYY-MM-DDTHH:MM:SSOFFSET
      

      替换以下内容:

      • YYYY-MM-DD:格式为 4 位数年份、2 位数月份和 2 位数日期而且相互之间以连字符 (-) 分隔的日期。

      • HH:MM:SS:格式为 2 位数小时、2 位数分钟和 2 位数秒而且相互之间以冒号 (:) 分隔的采用 24 小时制的时间。

      • OFFSET:采用世界协调时间 (UTC) 的偏移量格式的时区。例如,要使用太平洋标准时间 (PST),请指定 -08:00。或者,如果不使用偏移量,请指定 Z

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

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

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

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

    替换以下内容:

    • RESERVATION_NAME:现有预留的名称。

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

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

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

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

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

替换以下内容:

  • RESERVATION_NAME:现有预留的名称。

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

  • 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 时间戳格式的日期和时间,必须如下所示:

      YYYY-MM-DDTHH:MM:SSOFFSET
      

      替换以下内容:

      • YYYY-MM-DD:格式为 4 位数年份、2 位数月份和 2 位数日期而且相互之间以连字符 (-) 分隔的日期。

      • HH:MM:SS:格式为 2 位数小时、2 位数分钟和 2 位数秒而且相互之间以冒号 (:) 分隔的采用 24 小时制的时间。

      • OFFSET:采用世界协调时间 (UTC) 的偏移量格式的时区。例如,要使用太平洋标准时间 (PST),请指定 -08:00。或者,如果不使用偏移量,请指定 Z

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

    PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME?paths=deleteAfterDuration
    
    {
      "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:现有预留的名称。

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

您可以修改现有共享预留的使用方项目。 使用方项目是共享预留与之共享并可以使用该预留的项目。

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

如需修改可使用共享预留的使用方项目,请使用 Google Cloud 控制台、gcloud CLI 或 REST。

控制台

如需修改共享预留的使用方项目,请按照以下步骤操作:

  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 \
        --project=PROJECT_ID \
        --add-share-with=CONSUMER_PROJECT_IDS \
        --zone=ZONE
    

    替换以下内容:

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

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

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

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

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

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

    替换以下内容:

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

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

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

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

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

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

    替换以下内容:

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

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

    • 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。

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

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

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

  • 如果要增加预留中的预留虚拟机数量,则需要遵循以下限制:

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

    • 您必须对要预留的其他资源拥有足够的配额。

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

    否则,您会遇到错误

如需修改预留中的预留虚拟机数量,请使用 Google Cloud 控制台、gcloud CLI 或 REST。

控制台

如需修改预留中的预留虚拟机数量,请按照以下步骤操作:

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

    转到“预留”

  2. 名称列中,点击要修改的预留的名称。

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

  3. 点击 修改

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

  5. 点击保存进行确认。

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

gcloud

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

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

替换以下内容:

  • RESERVATION_NAME:现有预留的名称。

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

  • 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:要预留的虚拟机的新数量。

更改预留中的其他属性

如需更改现有预留中的任何其他属性,请执行以下操作:

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

  2. 删除现有预留

问题排查

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

后续步骤