本文档介绍了如何在批量创建虚拟机 (VM) 时指定实例灵活性。进行此规范时,您需要指定适合虚拟机的机器类型列表,然后 Compute Engine 会根据区域中的容量和配额可用性,使用任何指定的机器类型来预配虚拟机。
如需详细了解批量创建的虚拟机的实例灵活性,请参阅批量创建的虚拟机的实例灵活性简介。
准备工作
- 对于您打算创建的虚拟机和任何相关资源,请确保您有足够的配额和所需权限。
-
如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:
选择标签页以了解您打算如何使用本页面上的示例:
gcloud
-
安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:
gcloud init如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
- 设置默认区域和可用区。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。
安装 Google Cloud CLI。
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
如需了解详情,请参阅 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.subnetworks.use权限 -
为虚拟机指定静态 IP 地址:针对项目的
compute.addresses.use权限 -
在使用 VPC 网络时为虚拟机分配外部 IP 地址:针对项目或所选子网的
compute.subnetworks.useExternalIp权限 -
为虚拟机分配旧版网络:针对项目的
compute.networks.use权限 -
使用旧版网络时为虚拟机分配外部 IP 地址:针对项目的
compute.networks.useExternalIp权限 -
为虚拟机设置虚拟机实例元数据:针对项目的
compute.instances.setMetadata权限 -
为虚拟机设置标记:针对虚拟机的
compute.instances.setTags权限 -
为虚拟机设置标签:针对虚拟机的
compute.instances.setLabels权限 -
为虚拟机设置要使用的服务账号:针对虚拟机的
compute.instances.setServiceAccount权限 -
为虚拟机创建新磁盘:针对项目的
compute.disks.create权限 -
以只读或读写模式挂接现有磁盘:针对磁盘的
compute.disks.use权限 -
以只读模式挂接现有磁盘:针对磁盘的
compute.disks.useReadOnly权限
创建具有多个同等偏好机器类型的虚拟机
如果您的工作负载可以在多种不同的机器类型上运行,您可以在单个实例选择中指定所有兼容的机器类型的列表。以下示例展示了如何指定多个偏好程度相同的机器类型。
gcloud
如需批量创建具有单个实例选择的虚拟机,请将 gcloud compute instances bulk create 命令与 --instance-selection-machine-types 标志结合使用。
gcloud compute instances bulk create \
--name-pattern=NAME_PATTERN \
--region=REGION \
--count=COUNT \
--instance-selection-machine-types=MACHINE_TYPE_1,MACHINE_TYPE_2
替换以下内容:
COUNT:要创建的虚拟机数量NAME_PATTERN:虚拟机的名称模式MACHINE_TYPE_1、MACHINE_TYPE_2:要用于虚拟机的机器类型REGION:要在其中创建虚拟机的区域
示例
gcloud compute instances bulk create \
--name-pattern=test-bulk-# \
--region=us-central1 \
--count=10 \
--instance-selection-machine-types=c3-standard-8,n2-standard-8,c2-standard-8
REST
在 Compute Engine API 中,向 regionInstances.bulkInsert 方法发出 POST 请求。
在请求正文中,添加 instanceFlexibilityPolicy,其中包含一个列出机器类型的 instanceSelections 条目。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
"count": COUNT,
"namePattern": "NAME_PATTERN",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"selection-1": {
"machineTypes": [
"MACHINE_TYPE_1",
"MACHINE_TYPE_2"
]
}
}
}
}
替换以下内容:
COUNT:要创建的虚拟机数量NAME_PATTERN:虚拟机的名称模式MACHINE_TYPE_1、MACHINE_TYPE_2:要用于虚拟机的机器类型IMAGE_PROJECT:包含映像的项目IMAGE:要使用的映像或映像系列的名称PROJECT_ID:您的项目 IDREGION:要在其中创建虚拟机的区域
示例
POST https://compute.googleapis.com/compute/v1/projects/my-project/regions/us-central1/instances/bulkInsert
{
"count": 10,
"namePattern": "test-bulk-#",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/debian-12"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"selection-1": {
"machineTypes": [
"c3-standard-8",
"n2-standard-8",
"c2-standard-8"
]
}
}
}
}
创建具有多个按偏好程度排序的机器类型的虚拟机
如果您希望 Compute Engine 按特定顺序选择机器类型,可以配置多个实例选择。每个实例选择都包含一个机器类型列表和一个排名(一个用于定义机器类型偏好级别的整数)。排名越低,偏好程度越高。 Compute Engine 会尝试使用偏好级别更高(排名更低)的机器类型创建虚拟机。如果这些机器类型不可用,Compute Engine 会使用偏好级别较低(排名较高)的机器类型。
以下示例展示了如何指定具有排名的多个实例选择。
gcloud
如需批量创建具有多个实例选择的虚拟机,请使用 gcloud compute instances bulk create 命令并多次指定 --instance-selection 标志。
gcloud compute instances bulk create \
--name-pattern=NAME_PATTERN \
--region=REGION \
--count=COUNT \
--instance-selection "name=INSTANCE_SELECTION_1,rank=0,machine-type=MACHINE_TYPE_1,machine-type=MACHINE_TYPE_2" \
--instance-selection "name=INSTANCE_SELECTION_2,rank=1,machine-type=MACHINE_TYPE_3,machine-type=MACHINE_TYPE_4"
替换以下内容:
COUNT:要创建的虚拟机数量NAME_PATTERN:虚拟机的名称模式INSTANCE_SELECTION_1:第一个实例选择的名称INSTANCE_SELECTION_2:第二个实例选择的名称MACHINE_TYPE_1、MACHINE_TYPE_2:第一个实例选择的机器类型MACHINE_TYPE_3、MACHINE_TYPE_4:第二个实例选择的机器类型REGION:要在其中创建虚拟机的区域
示例
gcloud compute instances bulk create \
--name-pattern=test-bulk-# \
--region=us-central1 \
--count=10 \
--instance-selection "name=most-preferred,rank=0,machine-type=c3-standard-16,machine-type=n2-standard-16, machine-type=c2-standard-16" \
--instance-selection "name=least-preferred,rank=1,machine-type=c3-standard-8,machine-type=n2-standard-8, machine-type=c2-standard-8"
REST
在 Compute Engine API 中,向 regionInstances.bulkInsert 方法发出 POST 请求。
在请求正文中,添加 instanceFlexibilityPolicy 并在 instanceSelections 中指定多个条目,每个条目都包含一个机器类型列表和一个 rank。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
"count": COUNT,
"namePattern": "NAME_PATTERN",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"INSTANCE_SELECTION_1": {
"machineTypes": [
"MACHINE_TYPE_1",
"MACHINE_TYPE_2"
],
"rank": 1
},
"INSTANCE_SELECTION_2": {
"machineTypes": [
"MACHINE_TYPE_3",
"MACHINE_TYPE_4"
],
"rank": 2
}
}
}
}
替换以下内容:
COUNT:要创建的虚拟机数量NAME_PATTERN:虚拟机的命名模式INSTANCE_SELECTION_1:第一个实例选择的名称INSTANCE_SELECTION_2:第二个实例选择的名称MACHINE_TYPE_1、MACHINE_TYPE_2:第一个实例选择的机器类型MACHINE_TYPE_3、MACHINE_TYPE_4:第二个实例选择的机器类型IMAGE_PROJECT:包含映像的项目IMAGE:要使用的映像或映像系列的名称PROJECT_ID:您的项目 IDREGION:要在其中创建虚拟机的区域
示例
POST https://compute.googleapis.com/compute/v1/projects/my-project/regions/us-central1/instances/bulkInsert
{
"count": 10,
"namePattern": "test-bulk-#",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/debian-12"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"most-preferred": {
"machineTypes": [
"c3-standard-16",
"c2-standard-16"
],
"rank": 1
},
"least-preferred": {
"machineTypes": [
"n2-standard-16",
"c3-standard-8",
"n2-standard-8",
"c2-standard-8"
],
"rank": 2
}
}
}
}
在实例选择中指定磁盘替换项
默认情况下,通过批量请求创建的虚拟机会使用 instanceProperties 中的磁盘配置。不过,您可以在实例选择中指定磁盘配置。如果您在实例选择中指定了磁盘,那么对于使用该实例选择的虚拟机,该磁盘配置会替换 instanceProperties 中的磁盘配置。
以下示例展示了如何在实例选择中指定磁盘。
REST
在 Compute Engine API 中,向 regionInstances.bulkInsert 方法发出 POST 请求。
在请求正文中,添加 instanceFlexibilityPolicy,并针对任何 instanceSelections 条目添加 disks 字段以替换 instanceProperties.disks。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
"count": COUNT,
"namePattern": "NAME_PATTERN",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"INSTANCE_SELECTION_1": {
"machineTypes": [
"MACHINE_TYPE_1",
"MACHINE_TYPE_2"
],
"disks": [
{
"type": "PERSISTENT",
"initializeParams": {
"diskType": "pd-ssd",
"diskSizeGb": 50,
"sourceImage": "projects/IMAGE_PROJECT_1/global/images/IMAGE_1"
},
"boot": true
},
{
"type": "SCRATCH",
"initializeParams": {
"diskType": "local-ssd"
}
}
]
},
"INSTANCE_SELECTION_2": {
"machineTypes": [
"MACHINE_TYPE_3"
],
"disks": [
{
"type": "PERSISTENT",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 50,
"sourceImage": "projects/IMAGE_PROJECT_2/global/images/IMAGE_2"
},
"boot": true
},
{
"type": "PERSISTENT",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 128,
"sourceImage": "projects/IMAGE_PROJECT_3/global/images/IMAGE_1"
}
}
]
}
}
}
}
替换以下内容:
COUNT:要创建的虚拟机数量NAME_PATTERN:虚拟机的命名模式INSTANCE_SELECTION_1:第一个实例选择的名称INSTANCE_SELECTION_2:第二个实例选择的名称MACHINE_TYPE_1、MACHINE_TYPE_2、MACHINE_TYPE_3:要用于虚拟机的机器类型IMAGE_PROJECT:包含映像的项目IMAGE:要使用的映像或映像系列的名称PROJECT_ID:您的项目 IDREGION:要在其中创建虚拟机的区域