批量创建具有实例灵活性的虚拟机

本文档介绍了如何在批量创建虚拟机 (VM) 时指定实例灵活性。进行此规范时,您需要指定适合虚拟机的机器类型列表,然后 Compute Engine 会根据区域中的容量和配额可用性,使用任何指定的机器类型来预配虚拟机。

如需详细了解批量创建的虚拟机的实例灵活性,请参阅批量创建的虚拟机的实例灵活性简介

准备工作

  • 对于您打算创建的虚拟机和任何相关资源,请确保您有足够的配额所需权限
  • 如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. 安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

    2. Set a default region and zone.

    REST

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

      安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init

      如果您使用的是外部身份提供方 (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=test-bulk-# \
    --region=REGION \
    --count=COUNT \
    --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": "test-bulk-#",
  "instanceFlexibilityPolicy": {
    "instanceSelections": {
      "selection-1": {
        "machineTypes": [
          "c3-standard-8",
          "n2-standard-8",
          "c2-standard-8"
        ]
      }
    }
  }
}

替换以下内容:

  • COUNT:要创建的虚拟机数量。
  • PROJECT_ID:您的项目 ID。
  • REGION:要在其中创建虚拟机的区域。

创建具有多个按偏好程度排序的机器类型的虚拟机

如果您希望 Compute Engine 按特定顺序选择机器类型,可以配置多个实例选择。每个实例选择都包含一个机器类型列表和一个排名(一个用于定义机器类型偏好级别的整数)。排名越低,偏好程度越高。 Compute Engine 会尝试使用偏好级别更高(排名更低)的机器类型创建虚拟机。如果这些机器类型不可用,Compute Engine 会使用偏好级别较低(排名较高)的机器类型。

以下示例展示了如何指定具有排名的多个实例选择。

gcloud

如需批量创建具有多个实例选择的虚拟机,请使用 gcloud compute instances bulk create 命令并多次指定 --instance-selection 标志。

gcloud beta compute instances bulk create \
    --name-pattern=test-bulk-# \
    --region=REGION \
    --count=COUNT \
    --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": "test-bulk-#",
  "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
      }
    }
  }
}

替换以下内容:

  • COUNT:要创建的虚拟机数量。
  • PROJECT_ID:您的项目 ID。
  • REGION:要在其中创建虚拟机的区域。

在实例选择中指定磁盘替换项

默认情况下,通过批量请求创建的虚拟机会使用 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": "test-bulk-#",
  "instanceFlexibilityPolicy": {
    "instanceSelections": {
      "selection-1": {
        "machineTypes": [
          "n2-standard-8",
          "c2-standard-8"
        ],
        "disks": [
          {
            "type": "PERSISTENT",
            "initializeParams": {
              "diskType": "pd-ssd",
              "diskSizeGb": 50,
              "sourceImage": "IMAGE_URL"
            },
            "boot": true
          },
          {
            "type": "SCRATCH",
            "initializeParams": {
              "diskType": "local-ssd"
            }
          }
        ]
      },
      "selection-2": {
        "machineTypes": [
          "c3-standard-8"
        ],
        "disks": [
          {
            "type": "PERSISTENT",
            "initializeParams": {
              "diskType": "hyperdisk-balanced",
              "diskSizeGb": 50,
              "sourceImage": "IMAGE_URL"
            },
            "boot": true
          },
          {
            "type": "PERSISTENT",
            "initializeParams": {
              "diskType": "hyperdisk-balanced",
              "diskSizeGb": 128,
              "sourceImage": "IMAGE_URL"
            }
          }
        ]
      }
    }
  }
}

替换以下内容:

  • COUNT:要创建的虚拟机数量。
  • IMAGE_URL:启动磁盘映像的网址。
  • PROJECT_ID:您的项目 ID。
  • REGION:要在其中创建虚拟机的区域。