如果您要创建大量相同且彼此独立的虚拟机实例,请使用 Google Cloud CLI 或 Compute Engine API 批量创建虚拟机。您可以跨一个区域中的所有可用区创建这些虚拟机,也可以将这些虚拟机分布在特定可用区中。
如需了解详情和相关限制,请参阅虚拟机批量创建简介。
准备工作
- 对于您打算创建的虚拟机和任何相关资源,请确保您有足够的配额和所需权限。
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以选择以下任一选项向 Compute Engine 进行身份验证:
Select the tab for how you plan to use the samples on this page:
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
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 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色包含批量创建虚拟机所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
批量创建虚拟机需要以下权限:
-
针对项目的
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
权限
在一个区域中批量创建虚拟机
要在某个区域中批量创建虚拟机,请使用 gcloud CLI 或 Compute Engine API。
如果指定机器类型或支持其他硬件(如 GPU 或本地 SSD),则 Compute Engine 会将虚拟机放置在支持机器类型和其他硬件的区域的可用区中。
要在某个区域中批量创建虚拟机,请使用以下 gcloud compute
instances bulk create
命令:
gcloud compute instances bulk create \ ( --name-pattern="NAME_PATTERN " | --predefined-names=[PREDEFINED_NAMES ] ) \ --region=REGION \ --count=COUNT \ [ --min-count=MIN_COUNT \ ] [--location-policy=LOCATION_POLICY \ ] [--target-distribution-shape=TARGET_DISTRIBUTION_SHAPE ]
替换以下内容:
NAME_PATTERN:虚拟机的名称模式。请使用哈希值 (
#
) 字符序列让 Compute Engine 将其替换为数字序列。例如,使用名称模式的vm-#
可以生成名为vm-1
和vm-2
等的虚拟机,最多为--count
指定的虚拟机数量,必须小于或等于名称模式允许的虚拟机数量。使用名称模式时,Compute Engine 会尝试通过检查根据先前请求创建的现有虚拟机的名称来避免名称冲突。
PREDEFINED_NAMES:待创建虚拟机的预定义名称列表。如果使用此标志并指定
COUNT
,则COUNT
必须等于提供的名称数量。REGION:要在其中创建虚拟机的区域。
COUNT:要创建的虚拟机数量。此值必须小于或等于
NAME_PATTERN
允许的虚拟机数量。或者,如果使用--predefined-names
,则无需指定COUNT
,但一旦使用,则必须等于提供的名称的数量。MIN_COUNT:要创建的虚拟机数下限。下表根据您设置此标志的方式介绍了请求的行为:
值 说明 未设置 默认值为 COUNT
。如果 Compute Engine 无法创建COUNT
指定的虚拟机数量,则请求失败并且不会创建任何虚拟机。1
Compute Engine 会创建尽可能多的虚拟机,最多 COUNT
个。大于 1
且小于COUNT
Compute Engine 会创建至少 MIN_COUNT
个虚拟机,最多COUNT
个虚拟机。如果无法创建MIN_COUNT
个虚拟机,则请求失败并且不会创建任何虚拟机。LOCATION_POLICY:要包含或排除的区域内可用区。使用键值对列表,将可用区作为键,政策作为值。政策的有效值为
allow
(默认值)和deny
。以下是此标志的示例值:--location-policy=us-east1-b=allow,us-east1-c=deny
TARGET_DISTRIBUTION_SHAPE:虚拟机在指定可用区中的分布。使用
--location-policy
标志指定可用区。下表显示了此标志的有效值:值 说明 ANY_SINGLE_ZONE
强制在单个可用区中部署虚拟机,并优先利用未使用的预留。使用此值可避免跨可用区网络出站流量或缩短网络延迟时间。此设置为默认值。 BALANCED
尝试在该区域的所有可用区中均匀分布虚拟机。 ANY
允许在一个区域中的多个可用区分布虚拟机。选择具有可用资源并最大化利用未使用的可用区级预留的可用区。
要在某个区域中批量创建虚拟机,请使用以下 instances.bulkInsert
方法:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID /regions/REGION /instances/bulkInsert { ... "namePattern": "NAME_PATTERN ", "perInstanceProperties": { "PREDEFINED_NAME_1 ": {}, "PREDEFINED_NAME_2 ": {}, ... }, "count":COUNT , "minCount":MIN_COUNT , "locationPolicy": { "LOCATION_POLICY " }, "targetShape": "TARGET_DISTRIBUTION_SHAPE " ... }
替换以下内容:
PROJECT_ID:项目 ID。
REGION:要在其中创建虚拟机的区域。
NAME_PATTERN:虚拟机的名称模式。指定此值或
perInstanceProperties
。请使用哈希值 (#
) 字符序列让 Compute Engine 将其替换为数字序列。例如,使用名称模式的vm-#
可以生成名为vm-1
和vm-2
等的虚拟机,最多为--count
指定的虚拟机数量,必须小于或等于名称模式允许的虚拟机数量。使用名称模式时,Compute Engine 会尝试通过检查根据先前请求创建的现有虚拟机的名称来避免名称冲突。
PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...:待创建虚拟机的预定义名称列表。指定此值或
namePattern
。如果使用此标志并指定COUNT
,则COUNT
必须等于提供的名称数量。COUNT:要创建的虚拟机数量。此值必须小于或等于
NAME_PATTERN
允许的虚拟机数量。或者,如果使用perInstanceProperties
,则无需指定COUNT
,但一旦使用,则必须等于提供的名称的数量。MIN_COUNT:要创建的虚拟机数下限。下表根据您设置此标志的方式介绍了请求的行为:
值 说明 未设置 默认值为 COUNT
。如果 Compute Engine 无法创建COUNT
指定的虚拟机数量,则请求失败并且不会创建任何虚拟机。1
Compute Engine 会创建尽可能多的虚拟机,最多 COUNT
个。大于 1
且小于COUNT
Compute Engine 会创建至少 MIN_COUNT
个虚拟机,最多COUNT
个虚拟机。如果无法创建MIN_COUNT
个虚拟机,则请求失败并且不会创建任何虚拟机。LOCATION_POLICY:要包含或排除的区域内可用区。使用键值对列表,将可用区作为键,政策作为值。政策的有效值为
ALLOW
(默认值)和DENY
。以下是此字段的示例值:"locations": { "zones/us-central1-a": { "preference": "ALLOW" }, "zones/us-central1-c": { "preference": "DENY" }, ... },
TARGET_DISTRIBUTION_SHAPE:虚拟机在指定可用区中的分布。使用
locationPolicy
字段指定可用区。下表显示了此字段的有效值:值 说明 ANY_SINGLE_ZONE
强制在单个可用区中部署虚拟机,并优先利用未使用的预留。使用此值可避免跨可用区网络出站流量或缩短网络延迟时间。此设置为默认值。 BALANCED
尝试在该区域的所有可用区中均匀分布虚拟机。 ANY
允许在一个区域中的多个可用区分布虚拟机。选择具有可用资源并最大化利用未使用的可用区级预留的可用区。
在一个可用区中批量创建虚拟机
要在某个可用区中批量创建虚拟机,请使用 gcloud CLI 或 Compute Engine API。
要在某个特定可用区中批量创建虚拟机,请使用以下 gcloud compute
instances bulk create
命令。
gcloud compute instances bulk create \ ( --name-pattern="NAME_PATTERN " | --predefined-names=[PREDEFINED_NAMES ] ) \ --zone=ZONE \ --count=COUNT \ [ --min-count=MIN_COUNT ]
替换以下内容:
NAME_PATTERN:虚拟机的名称模式。请使用哈希值 (
#
) 字符序列让 Compute Engine 将其替换为数字序列。例如,使用名称模式的vm-#
可以生成名为vm-1
和vm-2
等的虚拟机,最多为--count
指定的虚拟机数量,必须小于或等于名称模式允许的虚拟机数量。使用名称模式时,Compute Engine 会尝试通过检查根据先前请求创建的现有虚拟机的名称来避免名称冲突。
PREDEFINED_NAMES:待创建虚拟机的预定义名称列表。如果使用此标志并指定
COUNT
,则COUNT
必须等于提供的名称数量。ZONE:要在其中创建虚拟机的可用区。
COUNT:要创建的虚拟机数量。此值必须小于或等于
NAME_PATTERN
允许的虚拟机数量。或者,如果使用--predefined-names
,则无需指定COUNT
,但一旦使用,则必须等于提供的名称的数量。MIN_COUNT:要创建的虚拟机数下限。下表根据您设置此标志的方式介绍了请求的行为:
值 说明 未设置 默认值为 COUNT
。如果 Compute Engine 无法创建COUNT
指定的虚拟机数量,则请求失败并且不会创建任何虚拟机。1
Compute Engine 会创建尽可能多的虚拟机,最多 COUNT
个。大于 1
且小于COUNT
Compute Engine 会创建至少 MIN_COUNT
个虚拟机,最多COUNT
个虚拟机。如果无法创建MIN_COUNT
个虚拟机,则请求失败并且不会创建任何虚拟机。
要在某个可用区中批量创建虚拟机,请使用以下 instances.bulkInsert
方法:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID /zones/ZONE /instances/bulkInsert { ... "namePattern": "NAME_PATTERN ", "perInstanceProperties": { "PREDEFINED_NAME_1 ": {}, "PREDEFINED_NAME_2 ": {}, ... }, "count":COUNT , "minCount":MIN_COUNT , ... }
替换以下内容:
PROJECT_ID:项目 ID。
ZONE:要在其中创建虚拟机的可用区。
NAME_PATTERN:虚拟机的名称模式。指定此值或
perInstanceProperties
。请使用哈希值 (#
) 字符序列让 Compute Engine 将其替换为数字序列。例如,使用名称模式的vm-#
可以生成名为vm-1
和vm-2
等的虚拟机,最多为--count
指定的虚拟机数量,必须小于或等于名称模式允许的虚拟机数量。使用名称模式时,Compute Engine 会尝试通过检查根据先前请求创建的现有虚拟机的名称来避免名称冲突。
PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...:待创建虚拟机的预定义名称列表。指定此值或
namePattern
。如果使用此标志并指定COUNT
,则COUNT
必须等于提供的名称数量。COUNT:要创建的虚拟机数量。此值必须小于或等于
NAME_PATTERN
允许的虚拟机数量。或者,如果使用perInstanceProperties
,则无需指定COUNT
,但一旦使用,则必须等于提供的名称的数量。MIN_COUNT:要创建的虚拟机数下限。下表根据您设置此标志的方式介绍了请求的行为:
值 说明 未设置 默认值为 COUNT
。如果 Compute Engine 无法创建COUNT
指定的虚拟机数量,则请求失败并且不会创建任何虚拟机。1
Compute Engine 会创建尽可能多的虚拟机,最多 COUNT
个。大于 1
且小于COUNT
Compute Engine 会创建至少 MIN_COUNT
个虚拟机,最多COUNT
个虚拟机。如果无法创建MIN_COUNT
个虚拟机,则请求失败并且不会创建任何虚拟机。
批量创建使用自定义主机名的虚拟机
您可以使用 gcloud CLI 或 Compute Engine API 在一个区域或可用区中批量创建具有自定义主机名的虚拟机。
您必须手动配置自定义主机名的 DNS 记录。如需了解详情,请参阅限制。
如果您没有指定主机名,Compute Engine 会将虚拟机的主机名设置为以下其中一项:
VM_NAME.c.PROJECT_ID.internal
(如果启用全球 DNS)VM_NAME.ZONE.c.PROJECT_ID.internal
(如果启用可用区级 DNS)
如需了解详情,请参阅内部 DNS 名称。
如需在特定区域中批量创建具有自定义主机名的虚拟机,请使用以下 gcloud beta compute instances bulk create
命令。
gcloud beta compute instances bulk create \ ( --name-pattern="NAME_PATTERN " | --predefined-names=[PREDEFINED_NAMES ] ) \ --per-instance-hostnames=[VM_NAME =HOSTNAME ,...] \ --zone=REGION \ --count=COUNT \ [ --min-count=MIN_COUNT ] [--location-policy=LOCATION_POLICY \ ] [--target-distribution-shape=TARGET_DISTRIBUTION_SHAPE ]
请替换以下内容:
NAME_PATTERN:虚拟机的名称模式。请使用哈希值 (
#
) 字符序列让 Compute Engine 将其替换为数字序列。例如,使用名称模式的vm-#
可以生成名为vm-1
和vm-2
等的虚拟机,最多为--count
指定的虚拟机数量,必须小于或等于名称模式允许的虚拟机数量。使用名称模式时,Compute Engine 会尝试通过检查根据先前请求创建的现有虚拟机的名称来避免名称冲突。
PREDEFINED_NAMES:待创建虚拟机的预定义名称列表。如果使用此标志并指定
COUNT
,则COUNT
必须等于提供的名称数量。[VM_NAME=HOSTNAME, …]:虚拟机的预定义名称以及您要为虚拟机分配的完全限定网域主机名的键值对列表。自定义主机名必须符合 RFC 1035 要求才是有效主机名。
REGION:要在其中创建虚拟机的可用区。
COUNT:要创建的虚拟机数量。此值必须小于或等于
NAME_PATTERN
允许的虚拟机数量。或者,如果使用--predefined-names
,则无需指定COUNT
,但一旦使用,则必须等于提供的名称的数量。MIN_COUNT:要创建的虚拟机数下限。下表根据您设置此标志的方式介绍了请求的行为:
值 说明 未设置 默认值为 COUNT
。如果 Compute Engine 无法创建COUNT
指定的虚拟机数量,则请求失败并且不会创建任何虚拟机。1
Compute Engine 会创建尽可能多的虚拟机,最多 COUNT
个。大于 1
且小于COUNT
Compute Engine 会创建至少 MIN_COUNT
个虚拟机,最多COUNT
个虚拟机。如果无法创建MIN_COUNT
个虚拟机,则请求失败并且不会创建任何虚拟机。LOCATION_POLICY:要包含或排除的区域内可用区。使用键值对列表,将可用区作为键,政策作为值。政策的有效值为
ALLOW
(默认值)和DENY
。以下是此字段的示例值:"locations": { "zones/us-central1-a": { "preference": "ALLOW" }, "zones/us-central1-c": { "preference": "DENY" }, ... },
TARGET_DISTRIBUTION_SHAPE:虚拟机在指定可用区中的分布。使用
locationPolicy
字段指定可用区。下表显示了此字段的有效值:值 说明 ANY_SINGLE_ZONE
强制在单个可用区中部署虚拟机,并优先利用未使用的预留。使用此值可避免跨可用区网络出站流量或缩短网络延迟时间。此设置为默认值。 BALANCED
尝试在该区域的所有可用区中均匀分布虚拟机。 ANY
允许在一个区域中的多个可用区分布虚拟机。选择具有可用资源并最大化利用未使用的可用区级预留的可用区。
如需在特定区域中批量创建具有自定义主机名的虚拟机,请使用以下 instances.bulkInsert
方法:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID /regions/REGION /instances/bulkInsert { ... "namePattern": "NAME_PATTERN ", "perInstanceProperties": { "PREDEFINED_NAME_1 ": {"hostname":HOSTNAME_1 }, "PREDEFINED_NAME_2 ": {"hostname":HOSTNAME_2 }, ... }, "count":COUNT , "minCount":MIN_COUNT , "locationPolicy": { "LOCATION_POLICY " }, "targetShape": "TARGET_DISTRIBUTION_SHAPE " ... }
请替换以下内容:
PROJECT_ID:项目 ID。
REGION:要在其中创建虚拟机的区域。
NAME_PATTERN:虚拟机的名称模式。指定此值或
perInstanceProperties
。请使用哈希值 (#
) 字符序列让 Compute Engine 将其替换为数字序列。例如,使用名称模式的vm-#
可以生成名为vm-1
和vm-2
等的虚拟机,最多为--count
指定的虚拟机数量,必须小于或等于名称模式允许的虚拟机数量。使用名称模式时,Compute Engine 会尝试通过检查根据先前请求创建的现有虚拟机的名称来避免名称冲突。
PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...:待创建虚拟机的预定义名称列表。指定此值或
namePattern
。如果使用此标志并指定COUNT
,则COUNT
必须等于提供的名称数量。HOSTNAME_1、HOSTNAME_2、…:您要为虚拟机分配的完全限定网域主机名。自定义主机名必须符合 RFC 1035 要求才是有效主机名。
例如,如需分别创建两个具有自定义主机名
my-host1234.example.com
和test.example.com
的虚拟机vm-1
和vm-2
,请在perInstanceProperties
中指定hostname
属性,如下所示:{ ... "perInstanceProperties": { "vm-1": { "hostname": "my-host1234.example.com" }, "vm-2": { "hostname": "test.example.com" }, ... },
COUNT:要创建的虚拟机数量。此值必须小于或等于
NAME_PATTERN
允许的虚拟机数量。或者,如果使用perInstanceProperties
,则无需指定COUNT
,但一旦使用,则必须等于提供的名称的数量。MIN_COUNT:要创建的虚拟机数下限。下表根据您设置此标志的方式介绍了请求的行为:
值 说明 未设置 默认值为 COUNT
。如果 Compute Engine 无法创建COUNT
指定的虚拟机数量,则请求失败并且不会创建任何虚拟机。1
Compute Engine 会创建尽可能多的虚拟机,最多 COUNT
个。大于 1
且小于COUNT
Compute Engine 会创建至少 MIN_COUNT
个虚拟机,最多COUNT
个虚拟机。如果无法创建MIN_COUNT
个虚拟机,则请求失败并且不会创建任何虚拟机。LOCATION_POLICY:要包含或排除的区域内可用区。使用键值对列表,将可用区作为键,政策作为值。政策的有效值为
ALLOW
(默认值)和DENY
。以下是此字段的示例值:"locations": { "zones/us-central1-a": { "preference": "ALLOW" }, "zones/us-central1-c": { "preference": "DENY" }, ... },
TARGET_DISTRIBUTION_SHAPE:虚拟机在指定可用区中的分布。使用
locationPolicy
字段指定可用区。下表显示了此字段的有效值:值 说明 ANY_SINGLE_ZONE
强制在单个可用区中部署虚拟机,并优先利用未使用的预留。使用此值可避免跨可用区网络出站流量或缩短网络延迟时间。此设置为默认值。 BALANCED
尝试在该区域的所有可用区中均匀分布虚拟机。 ANY
允许在一个区域中的多个可用区分布虚拟机。选择具有可用资源并最大化利用未使用的可用区级预留的可用区。
检查批量创建虚拟机的请求的状态
当您创建变更请求时,Compute Engine 会返回一个 operation
资源,您可以轮询该资源以获取操作的状态。如需了解详情,请参阅处理 API 响应。
如需获取批量插入请求的状态,请向 operation
资源发送 HTTP GET
请求:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID /zones/ZONE /operations/OPERATION_ID
如需获取区域级批量插入请求的状态,请发送以下请求:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID /regions/REGION /operations/OPERATION_ID
替换以下内容:
PROJECT_ID
:您要在其中创建虚拟机的项目的 IDREGION
:您要在其中创建虚拟机的区域ZONE
:您要在其中创建虚拟机的可用区OPERATION_ID
:批量插入操作 ID
响应中的 instancesBulkInsertOperationMetadata
对象包含操作的以下详细信息:
status
:状态是以下项之一:CREATING
:虚拟机创建正在进行ROLLING_BACK
:请求失败并且正在回滚DONE
:虚拟机创建或回滚已成功完成
targetVmCount
:要在指定可用区中创建的虚拟机的数量createdVmCount
:已在指定可用区中创建的虚拟机的数量failedToCreateVmCount
:未能在指定可用区中创建的虚拟机的数量deletedVmCount
:在回滚失败操作的过程中删除的虚拟机的数量
响应中的 progress
字段表示操作的完成百分比。
在 Compute Engine 至少成功创建最少数量的虚拟机并且不再发生虚拟机创建或请求回滚之前,批量插入操作的状态为 RUNNING
。
当批量插入操作正在进行时,您应该会看到如下所示的响应:
{
"kind" : "compute#operation",
"id": "4653028658507445766",
"name": "operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
"operationType": "bulkInsert",
"targetLink": "https://www.googleapis.com/compute/v1/projects/my-project"
"targetId": 4653028658507445766,
"status": "RUNNING",
"progress": 2,
"user": "example@google.com",
"insertTime": "2023-04-23T09:57:13.474-07:00",
"startTime": "2023-04-23T09:57:13.474-07:00",
"selfLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/operations/operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
"operationGroupId": "4653028658507445766",
"metadata":
"instances_bulk_insert_operation_metadata": {
"per_location_status": {
"zones/us-central1-a": {
"status": "CREATING",
"targetVmCount": 50,
"createdVmCount": 1
}
}
}
}
在此示例中,已成功创建一个实例,并且操作已完成 2%。
当 Compute Engine 至少成功创建由 minCount
指定的最少数量的虚拟机或者 Compute Engine 完成请求回滚时,操作会返回 DONE
状态。成功创建请求数量的虚拟机后,您会收到如下所示的响应:
{
"endTime": "2023-04-23T09:58:13.474-07:00",
"id": "5053101474378293244",
"insertTime": "2023-04-23T09:57:13.474-07:00",
"instancesBulkInsertOperationMetadata": {
"perLocationStatus": {
"zones/us-central1-a": {
"status": "DONE",
"createdVmCount": 50,
"targetVmCount": 50
}
}
},
"kind": "compute#operation",
"name": "operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
"operationGroupId": "4653028658507445766",
"operationType": "bulkInsert",
"progress": 100,
"selfLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/operations/operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
"startTime": "2023-09-11T16:21:55.629-07:00",
"status": "DONE",
"targetId": "625521788110",
"targetLink": "https://www.googleapis.com/compute/v1/projects/my-project",
"user": "example@google.com",
"zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a"
}
如需了解详情,请参阅 instancesBulkInsertOperationMetadata
对象的文档。
检查单个虚拟机的状态
如需检查通过批量创建虚拟机的请求创建的单个虚拟机的状态,请使用 gcloud CLI 或 Compute Engine API。
从请求返回的
Operation
中获取operationGroupId
属性的值。将
operationGroupId
属性用作gcloud compute operations list
命令中的过滤条件,以在项目中的所有操作和所有可用区中搜索与区域或可用区级请求关联的虚拟机:gcloud compute operations list \ --filter=(operationGroupId=
OPERATION_GROUP_ID )执行以下任一操作,以获取虚拟机的其余属性:
在操作列表中,
targetLink
表示虚拟机的路径。在gcloud compute instances describe
命令中,以此路径作为虚拟机的名称来获取虚拟机的属性:gcloud compute instances describe
VM_NAME 在
gcloud compute instances list
方法中,使用包含操作列表中虚拟机名称的过滤条件:gcloud compute instances list
VM_NAME \ --filter=(name=VM_NAME_1 ) OR (name=VM_NAME_2 )使用
gcloud compute instances list
命令获取所有可用区和区域中的虚拟机属性,并按实例独有的标签进行过滤,或者他们的姓名:gcloud compute instances list \ --filter=(name=
VM_NAME_1 ) OR (name=VM_NAME_2 )
从请求返回的
Operation
中获取operationGroupId
属性的值。使用
operationGroupId
属性获取与区域级或可用区级请求关联的虚拟机操作列表:如果您发送了区域级请求,则如需在项目中的所有操作和所有可用区中进行搜索,请使用
globalOperations.aggregatedList
方法并添加operationGroupId
属性作为过滤条件:GET https://compute.googleapis.com/compute/v1/projects/
PROJECT_NAME /aggregated/operations?filter=(operationGroupId=OPERATION_GROUP_ID )如果您发送了可用区级请求,则如需列出该可用区中的操作,请使用
zoneOperations.get
方法并将operationGroupId
属性添加到请求正文中:GET https://compute.googleapis.com/compute/v1/projects/
PROJECT_NAME /zones/ZONE /instances/bulkInsert { ... "operationGroupId":"OPERATION_GROUP_ID " ... }
执行以下任一操作,以获取虚拟机的其余属性:
在操作列表中,
targetLink
表示虚拟机的路径。在instances.get
方法中,以此路径作为虚拟机的名称来获取虚拟机的所有属性:GET https://compute.googleapis.com/compute/v1/projects/
PROJECT_NAME /zones/ZONE /instances/VM_NAME 将
instances.get
方法与包含操作列表中虚拟机名称的过滤条件结合使用:GET https://compute.googleapis.com/compute/v1/projects/
PROJECT_NAME /zones/ZONE /instances?filter=(name=VM_NAME_1 ) OR (name=VM_NAME_2 )使用
instances.aggregatedList
方法可从所有可用区和区域获取虚拟机属性,并按实例独有的标签进行过滤,或者他们的姓名:GET https://compute.googleapis.com/compute/v1/projects/
PROJECT_NAME /aggregated/instances?filter=(name=VM_NAME_1 ) OR (name=VM_NAME_2 )
伪代码示例
以下伪代码示例展示了如何对批量创建虚拟机的请求进行自定义。
在一组区域中的一个区域内批量创建虚拟机
以下伪代码介绍了如何在一组区域中的一个区域内创建 1000 个虚拟机。尝试在一组区域中的一个区域内批量创建虚拟机时,请求会首先检查容量。如果容量不足,则请求会立即失败,并使用该组区域中的下一个区域再次尝试。
指定要在可用区内创建的虚拟机数量。
nTarget = 1000
指定要在其中创建虚拟机的区域。
acceptableRegions = ["us-central1", "us-east1", "us-west1"]
迭代这些区域,并尝试在每个区域中创建虚拟机,直到成功。
for region in acceptableRegions: call bulk API: region=region, location-policy=location-policy, count=nTarget if request succeeds and the operation succeeds: break
在一个可用区中批量创建一个机器类型上的虚拟机
以下伪代码介绍了如何在一个可用区中创建指定机器类型上的多个虚拟机。尝试在同一机器类型上批量创建虚拟机时,请求会首先检查这些机器类型的可用性。如果该机器类型没有足够的可用机器,则请求将立即失败,然后使用下一个机器类型再次尝试。
指定要创建的虚拟机数量以及创建它们的区域。
nTarget = 1000 region = "us-central1"
指定要在其上创建虚拟机的机器系列。
acceptableMachineFamilies = ["n2","c2","e2","n1"]
迭代该组机器类型,并尝试在机器类型上创建虚拟机,直到成功为止。
for family in acceptableMachineFamilies: call bulk APIs: region=region, count=nTarget, machineFamily=family if request succeeds and the operation succeeds: break
在一个可用区中创建超过 5,000 个虚拟机
批量创建虚拟机时,每个请求只能创建 5,000 个虚拟机。以下伪代码介绍了如何通过发出多个请求在一个可用区中创建超过 5,000 个虚拟机。
指定要创建的虚拟机的数量,用于跟踪已创建的虚拟机总数的计数器、要在其中创建虚拟机的区域以及用于存储 Compute Engine 在其中创建虚拟机的可用区的变量。
nTarget = 10000 nCreated = 0 region = "us-central1" targetZone = ""
发出创建 5,000 个虚拟机的初始请求,保存请求返回的可用区,并更新所创建虚拟机数量的计数器。
call bulk API: region=region, count=5000 targetZone = zone chosen by bulk API nCreated += # of VMs created
继续发出在该可用区中一次最多创建 5,000 个虚拟机的请求,直到 Compute Engine 创建指定数量的虚拟机。
while(nTarget - nCreated > 0): call bulk API: zone=targetZone, count=5000 nCreated += # of VMs created
批量创建虚拟机并查看其状态
以下过程展示了如何创建一组具有预定义名称的虚拟机,然后查看它们的状态:
指定要创建的虚拟机数量、要在其中创建虚拟机的可用区,以及用于存储名称的数据结构。
nTarget = 1000 targetZone = "us-central-1a" names = []
为虚拟机生成带模式的名称,并将名称添加到数据结构。
for n in range(0, 1000): names.push("instance-%d".format(n))
创建虚拟机,并使用
perInstanceProperties
指定名称。call bulk API(zone=targetZone, count=nTarget, names=perInstanceProperties)
使用
instances.list
方法和用于返回其详细信息的虚拟机名称的过滤条件来获取虚拟机的详细信息。instances.list(filter=(name = "instance-1") OR (name = "instance-2") ...)
后续步骤
批量创建虚拟机后,请执行以下一项或两项操作,以简化这些虚拟机的管理:
将虚拟机添加到非代管式实例组。将虚拟机添加到非代管式实例组可让您使用 Cloud Monitoring。非托管式实例组不提供负载均衡或虚拟机生命周期管理。
使用标签。通过标签,您可以使用键值对组织资源。