本文档介绍了如何阻止 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
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
-
创建预留:项目的
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 的凭据。
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
如需了解详情,请参阅 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-06-24。
-