本文档介绍了如何阻止 Compute Engine 实例使用预留资源。如需详细了解预留,请参阅 Compute Engine 可用区级资源的预留。
自动使用的预留允许属性与预留匹配的实例自动使用这些预留。如需阻止实例使用预留,请执行以下操作之一:
按照本文档中的说明配置实例以不使用预留。
创建或更新的具有与预留不匹配的属性的实例。
当您要将实例用于测试、调试或隔离部署等任务时,可以避免消耗预留。
限制
只有当实例配置为自动使用匹配的预留时,您才能将现有实例更新为不使用预留。
准备工作
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
-
创建预留:项目的
compute.reservations.create
权限 -
如需创建实例,请执行以下操作:
- 针对项目的
compute.instances.create
权限 - 使用自定义映像创建虚拟机:针对映像的
compute.images.useReadOnly
权限 - 使用快照创建虚拟机:针对快照的
compute.snapshots.useReadOnly
权限 - 使用实例模板创建虚拟机:针对实例模板的
compute.instanceTemplates.useReadOnly
权限 - 为虚拟机分配旧版网络:针对项目的
compute.networks.use
权限 - 为虚拟机指定静态 IP 地址:针对项目的
compute.addresses.use
权限 - 使用旧版网络时为虚拟机分配外部 IP 地址:针对项目的
compute.networks.useExternalIp
权限 - 为虚拟机指定子网:针对项目或所选子网的
compute.subnetworks.use
权限 - 在使用 VPC 网络时为虚拟机分配外部 IP 地址:针对项目或所选子网的
compute.subnetworks.useExternalIp
权限 - 为虚拟机设置虚拟机实例元数据:针对项目的
compute.instances.setMetadata
权限 - 为虚拟机设置标记:针对虚拟机的
compute.instances.setTags
权限 - 为虚拟机设置标签:针对虚拟机的
compute.instances.setLabels
权限 - 为虚拟机设置要使用的服务账号:针对虚拟机的
compute.instances.setServiceAccount
权限 - 为虚拟机创建新磁盘:针对项目的
compute.disks.create
权限 - 以只读或读写模式挂接现有磁盘:针对磁盘的
compute.disks.use
权限 - 以只读模式挂接现有磁盘:针对磁盘的
compute.disks.useReadOnly
权限
- 针对项目的
-
创建实例模板:针对项目的
compute.instanceTemplates.create
权限 创建一个空的 YAML 文件。
如需将实例的属性导出到您刚创建的 YAML 文件中,请使用
gcloud compute instances export
命令:gcloud compute instances export INSTANCE_NAME \ --destination=YAML_FILE \ --zone=ZONE
替换以下内容:
INSTANCE_NAME
:实例的名称。YAML_FILE
:您在上一步中创建的空 YAML 文件的路径。ZONE
:实例所在的可用区。
在 YAML 配置文件中,将
consumeReservationType
设置为NO_RESERVATION
:reservationAffinity: consumeReservationType: NO_RESERVATION
如需更新实例并重启它,请使用
gcloud compute instances update-from-file
命令,并将--most-disruptive-allowed-action
标志设置为RESTART
:gcloud compute instances update-from-file INSTANCE_NAME \ --most-disruptive-allowed-action=RESTART \ --source=YAML_FILE \ --zone=ZONE
替换以下内容:
INSTANCE_NAME
:实例的名称。YAML_FILE
:包含您在上一步中修改的配置数据的 YAML 文件的路径。ZONE
:实例所在的可用区。
如需查看现有实例的属性,请向
instances.get
方法发出GET
请求:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME
替换以下内容:
PROJECT_ID
:您在其中创建了实例的项目的 ID。ZONE
:实例所在的可用区。INSTANCE_NAME
:实例的名称。
将
GET
请求的输出存储在文件或文本编辑器中。修改复制的输出,将consumeReservationType
字段更改为NO_RESERVATION
:{ ... "reservationAffinity": { "consumeReservationType": "NO_RESERVATION" }, ... }
如需更新实例并重启它,请向
instances.update
方法发出PUT
请求。在请求中,执行以下操作:在请求网址中添加
mostDisruptiveAllowedAction
查询参数并设置为RESTART
。对于请求正文,请使用您在上一步中修改的
GET
请求的输出。
请求类似于以下示例:
PUT https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central-1/instances/instance-01?mostDisruptiveAllowedAction=RESTART { ... "reservationAffinity": { "consumeReservationType": "NO_RESERVATION" }, ... }
在 Google Cloud 控制台中,转到创建实例页面。
在名称字段中,输入实例的名称。
在区域和可用区列表中,选择要在其中创建实例的区域和可用区。
指定要用于实例的机器类型。
在导航菜单中,点击高级。
在预留部分,选择不使用预留。
点击创建。
INSTANCE_NAME
:实例的名称。MACHINE_TYPE
:要用于实例的机器类型。ZONE
:要在其中创建实例的区域。PROJECT_ID
:您要在其中创建实例的项目的 ID。ZONE
:要在其中创建实例的区域。INSTANCE_NAME
:实例的名称。MACHINE_TYPE
:要用于实例的机器类型。IMAGE_PROJECT
:操作系统映像所属的映像项目;例如debian-cloud
。如需详细了解支持的映像项目,请参阅公共映像。IMAGE
:指定以下其中一项:COUNT
:要创建的实例数量。MACHINE_TYPE
:要用于实例的机器类型。NAME_PATTERN
:实例的名称模式。如需替换实例名称中的数字序列,请使用哈希值 (#
) 字符序列。例如,使用instance-#
作为名称模式将生成名称以instance-1
、instance-2
开头的实例,一直到由COUNT
指定的实例数量。ZONE
:要用于批量创建实例的可用区。PROJECT_ID
:要在其中批量创建实例的项目的 ID。ZONE
:要用于批量创建实例的可用区。COUNT
:要创建的实例数量。NAME_PATTERN
:实例的名称模式。如需替换实例名称中的数字序列,请使用哈希值 (#
) 字符序列。例如,使用instance-#
作为名称模式将生成名称以instance-1
、instance-2
开头的实例,一直到由COUNT
指定的实例数量。MACHINE_TYPE
:要用于实例的机器类型。IMAGE_PROJECT
:操作系统映像所属的映像项目;例如debian-cloud
。如需详细了解支持的映像项目,请参阅公共映像。IMAGE
:指定以下其中一项:执行以下操作时,可防止托管式实例组 (MIG) 中的计算实例消耗预留资源:
在 Google Cloud 控制台中,前往创建实例模板页面。
在名称字段中,输入实例模板的名称。
在位置部分中,指定您要创建区域级(默认)实例模板还是全球实例模板。
在机器配置部分中,指定要用于使用模板创建的实例的机器类型。
展开高级选项部分,然后执行以下操作:
展开管理部分。
在预留部分,选择不使用预留。
点击创建。
INSTANCE_TEMPLATE_NAME
:实例模板的名称。REGION
:要在其中创建实例模板的区域。MACHINE_TYPE
:要用于使用实例模板创建的实例的机器类型。如需创建全球实例模板:
instanceTemplates.insert
方法。如需创建区域级实例模板,请使用
regionInstanceTemplates.insert
方法。PROJECT_ID
:要在其中创建实例模板的项目的 ID。INSTANCE_TEMPLATE_NAME
:实例模板的名称。MACHINE_TYPE
:要用于使用实例模板创建的实例的机器类型。IMAGE_PROJECT
:操作系统映像所属的映像项目;例如debian-cloud
。如需详细了解支持的映像项目,请参阅公共映像。IMAGE
:指定以下其中一项:
Go
如需在本地开发环境中使用本页面上的 Go 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。 如需了解详情,请参阅身份验证文档中的为本地开发环境设置 ADC。
Java
如需在本地开发环境中使用本页面上的 Java 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。 如需了解详情,请参阅身份验证文档中的为本地开发环境设置 ADC。
Node.js
如需在本地开发环境中使用本页面上的 Node.js 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。 如需了解详情,请参阅身份验证文档中的为本地开发环境设置 ADC。
Python
如需在本地开发环境中使用本页面上的 Python 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。 如需了解详情,请参阅身份验证文档中的为本地开发环境设置 ADC。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
所需的角色
如需获得阻止计算实例使用预留所需的权限,请让管理员为您授予项目的 Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1
) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。此预定义角色包含阻止计算实例使用预留所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
若要阻止计算实例使用预留,您需要具备以下权限:
防止预留消耗
如需阻止计算实例使用预留,请将其预留亲和性 (
reservationAffinity
) 属性设置为不使用预留。此属性用于控制实例能否使用匹配的预留、特定的预留或任何预留。如需阻止一个或多个实例使用预留,请使用以下任一方法:
阻止在现有实例中使用
您可以更新正在运行的实例,使其不再自动消耗预订。您必须重启实例,才能使更改生效,如本部分所述。
如需阻止现有实例使用预留,请选择以下选项之一:
gcloud
REST
如需详细了解如何更新实例,请参阅更新实例属性。
在创建实例时防止消耗
如需创建无法使用预留的计算实例,请选择以下选项之一:
控制台
gcloud
如需创建无法使用预留的实例,请将
gcloud compute instances create
命令的--reservation-affinity
标志设为none
:gcloud compute instances create INSTANCE_NAME \ --machine-type=MACHINE_TYPE \ --reservation-affinity=none \ --zone=ZONE
替换以下内容:
Go
如需创建无法使用预留实例的虚拟机,请使用以下代码示例:
Java
如需创建无法使用预留实例的虚拟机,请使用以下代码示例:
Node.js
如需创建无法使用预留实例的虚拟机,请使用以下代码示例:
Python
如需创建无法使用预留实例的虚拟机,请使用以下代码示例:
REST
如需创建无法使用预留的实例,请向
instances.insert
方法发出POST
请求。在请求正文中,添加设置为NO_RESERVATION
的consumeReservationType
字段:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "INSTANCE_NAME", "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ], "reservationAffinity": { "consumeReservationType": "NO_RESERVATION" } }
替换以下内容:
如需详细了解如何创建实例,请参阅创建和启动 Compute Engine 实例。
防止在批量创建实例时发生消耗
如需批量创建无法使用预留的计算实例,请选择以下选项之一:
gcloud
如需批量创建无法使用预留的实例,请使用
gcloud compute instances bulk create
命令,并将--reservation-affinity
标志设置为none
。例如,如需在单个可用区中批量创建实例并指定名称模式,请运行以下命令:
gcloud compute instances bulk create \ --count=COUNT \ --machine-type=MACHINE_TYPE \ --name-pattern="NAME_PATTERN" \ --reservation-affinity=none \ --zone=ZONE
替换以下内容:
REST
如需批量创建无法使用预留的实例,请向
instances.bulkInsert
方法发出POST
请求。在请求正文中,添加设置为NO_RESERVATION
的consumeReservationType
字段。例如,如需在单个可用区中批量创建实例并指定名称模式,请发出以下请求:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert { "count": COUNT, "namePattern": "NAME_PATTERN", "instanceProperties": { "machineType": "MACHINE_TYPE", "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ], "reservationAffinity": { "consumeReservationType": "NO_RESERVATION" } } }
替换以下内容:
如需详细了解如何批量创建实例,请参阅批量创建虚拟机。
在创建实例模板时禁止使用
创建将实例配置为不使用预留的实例模板后,您可以使用该模板执行以下操作:
如需创建实例模板,以将实例配置为不使用预留,请选择以下选项之一:
控制台
gcloud
如需创建实例模板,以将实例配置为不使用预留,请使用
gcloud compute instances-templates create
命令,并将--reservation-affinity
标志设置为none
。如需创建区域实例模板以将实例配置为不使用预留,请运行以下命令。如果您要创建全球实例模板,请使用不带
--instance-template-region
标志的相同命令。gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \ --instance-template-region=REGION \ --machine-type=MACHINE_TYPE \ --reservation-affinity=none
替换以下内容:
Go
如需创建实例模板,以将实例配置为不使用预留,请使用以下代码示例:
Java
如需创建实例模板,以将实例配置为不使用预留,请使用以下代码示例:
Node.js
如需创建实例模板,以将实例配置为不使用预留,请使用以下代码示例:
Python
如需创建实例模板,以将实例配置为不使用预留,请使用以下代码示例:
REST
如需创建实例模板,以将实例配置为不使用预留,请向以下方法之一发出
POST
请求:在请求正文中,添加
consumeReservationType
字段并将其设置为NO_RESERVATION
。例如,如需创建区域级实例模板并指定不使用预留,请发出以下请求:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/InstanceTemplates { "name": "INSTANCE_TEMPLATE_NAME", "properties": { "machineType": "MACHINE_TYPE", "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ], "reservationAffinity": { "consumeReservationType": "NO_RESERVATION" } } }
替换以下内容:
如需详细了解如何创建实例模板,请参阅创建实例模板。
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-03-04。
-