创建具有 H4D 机器类型和灵活启动的 MIG

本教程介绍了如何创建使用 H4D 机器类型的代管式实例组 (MIG)。 MIG 使用动态工作负载调度器灵活启动使用模式来获取最多七天的计算资源。

创建 MIG 后,您可以将多个虚拟机 (VM) 作为单个实体进行管理。MIG 中的每个虚拟机均基于实例模板。通过自动管理实例组中的虚拟机,MIG 可提供高可用性和可伸缩性。如需详细了解 MIG,请参阅托管式实例组

如需了解 HPC 虚拟机和 HPC 集群创建选项,请参阅 HPC 集群创建概览

本教程适用于 HPC 工程师、平台管理员和运维人员,以及有兴趣创建一组互连的 HPC 实例来处理短时工作负载的数据和 MPI 专家。生成的实例不使用编排程序进行实例管理或作业调度。

可选:申请抢占式配额

添加到 MIG 的虚拟机实例会使用区域配额。 虚拟机实例、实例组、CPU 和磁盘配额可以由相应区域中的任何虚拟机使用,无论虚拟机位于哪个可用区。

使用灵活启动时,配额可以是标准配额,也可以是抢占式配额。

  • 标准配额:如果您的项目没有抢占式配额,并且您从未申请过抢占式配额,则实例资源会使用标准配额。
  • 抢占式配额:申请抢占式配额有助于提高配额的可获取性,因为抢占式配额是为临时资源提供的单独配额。不过,在 Compute Engine 授予您某个区域的抢占式配额后,所有适用的资源都只会使用抢占式配额。如果此配额用尽,您必须为虚拟机资源申请额外的抢占式配额。

您可以按照申请配额调整中所述的步骤申请抢占式配额。

所需的配额类型

如需使用实例组,您必须拥有实例组使用的所有资源的可用配额(例如 CPU 配额)以及实例组资源本身的可用配额。对于 H4D 实例,可以使用以下配额类型,具体取决于实例使用的机器类型:

资源 标准配额 抢占式配额
CPU CPUS_PER_VM_FAMILY Preemptible CPUs
本地 SSD Local SSD per machine family (GB) Preemptible Local SSDs (GB)

如需创建本教程中的资源,可能需要以下额外的区域配额:

  • 可用区级(单可用区)托管式实例组:Instance group managersInstance groups
  • Google Cloud Hyperdisk:

    • Hyperdisk Balanced Capacity (GB)
    • Hyperdisk Balanced Throughput (MB/s)
    • Hyperdisk Balanced IOPS

可选:创建 VPC 网络

除非您选择停用默认网络,否则每个项目都有一个默认网络,可用于为实例提供网络连接。创建虚拟机时,您可以指定 VPC 网络和子网。如果省略此配置,则系统会使用默认网络和子网。

H4D 实例可以配置为使用 Cloud RDMA。Cloud RDMA 通过使用 IRDMA 网络驱动程序在 Compute Engine 实例之间支持远程直接内存访问 (RDMA),从而实现低延迟的可靠消息传递功能。

在本教程中:

  • 如果您要将 H4D 实例配置为使用 Cloud RDMA,请完成本部分中的步骤。
  • 如果您不想使用 Cloud RDMA,可以跳过本部分,改为使用默认网络。

支持 RDMA 的实例至少需要两个网络接口 (NIC):

  • NIC 类型 GVNIC:使用 gve 驱动程序处理 TCP/IP 和网络流量,以实现正常的虚拟机间和虚拟机到网络的通信。
  • NIC 类型 IRDMA:使用 IDPF/iRDMA 驱动程序在实例之间实现 Cloud RDMA 网络通信。

使用 Cloud RDMA 的实例只能有一个 IRDMA 接口。您最多可以添加 8 个额外的 GVNIC 网络接口,使每个实例的总 NIC 数达到 10 个。

如需设置 Falcon VPC 网络以供实例使用,您可以按照文档中的说明操作,也可以使用提供的脚本。

说明指南

如需创建网络,您可以按照以下说明操作:

脚本

您最多可以为每个实例创建 9 个 GVNIC 网络接口和 1 个 IRDMA 网络接口。每个网络接口都必须连接到单独的网络。如需创建网络,您可以使用以下脚本,该脚本会为 GVNIC 创建两个网络,并为 IRDMA 创建一个网络。

  1. 可选:在运行脚本之前,列出 RDMA 网络配置文件以验证是否有可用的配置文件。
      gcloud beta compute network-profiles list
      
  2. 复制以下代码,然后在 Linux shell 窗口中运行该代码。

      #!/bin/bash
      # Set the number of GVNIC interfaces to create. You can create up to 9.
      NUM_GVNIC=NUMBER_OF_GVNIC
    
      # Create standard VPC (networks and subnets) for the GVNIC interfaces
        for N in $(seq 0 $(($NUM_GVNIC - 1))); do
          gcloud compute networks create GVNIC_NAME_PREFIX-net-$N \
              --subnet-mode=custom
    
          gcloud compute networks subnets create GVNIC_NAME_PREFIX-sub-$N \
              --network=GVNIC_NAME_PREFIX-net-$N \
              --region=REGION \
              --range=10.$N.0.0/16
    
          gcloud compute firewall-rules create GVNIC_NAME_PREFIX-internal-$N \
              --network=GVNIC_NAME_PREFIX-net-$N \
              --action=ALLOW \
              --rules=tcp:0-65535,udp:0-65535,icmp \
              --source-ranges=10.0.0.0/8
      done
    
      # Create SSH firewall rules
      gcloud compute firewall-rules create GVNIC_NAME_PREFIX-ssh \
          --network=GVNIC_NAME_PREFIX-net-0 \
          --action=ALLOW \
          --rules=tcp:22 \
          --source-ranges=IP_RANGE
    
      # Optional: Create a firewall rule for the external IP address for the
      #  first GVNIC network interface
      gcloud compute firewall-rules create GVNIC_NAME_PREFIX-allow-ping-net-0 \
          --network=GVNIC_NAME_PREFIX-net-0 \
          --action=ALLOW \
          --rules=icmp \
          --source-ranges=IP_RANGE
    
      # Create a network for the RDMA over Falcon network interface
      gcloud beta compute networks create RDMA_NAME_PREFIX-irdma \
          --network-profile=ZONE-vpc-falcon \
          --subnet-mode custom
    
      # Create a subnet for the RDMA network
      gcloud beta compute networks subnets create RDMA_NAME_PREFIX-irdma-sub \
          --network=RDMA_NAME_PREFIX-irdma \
          --region=REGION \
          --range=10.2.0.0/16  # offset to avoid overlap with GVNIC subnet ranges
      

    替换以下内容:

    • NUMBER_OF_GVNIC:要创建的 GVNIC 接口的数量。 指定一个介于 1 到 9 之间的数字。
    • GVNIC_NAME_PREFIX:用于使用 GVNIC NIC 类型的标准 VPC 网络和子网的名称前缀。
    • REGION:要在其中创建网络的区域。此区域必须与创建 RDMA 网络时为 --network-profile 标志指定的可用区对应。例如,如果您将可用区指定为 europe-west4-b,则区域为 europe-west4
    • IP_RANGE:VPC 网络外部用于 SSH 防火墙规则的 IP 地址范围。 最佳实践是指定您需要允许访问的特定来源 IP 地址范围,而不是所有 IPv4 或 IPv6 来源。 请勿使用 0.0.0.0/0::/0 作为来源范围,因为这会允许来自所有 IPv4 或 IPv6 来源(包括 Google Cloud外部的来源)的流量。
    • RDMA_NAME_PREFIX:用于使用 IRDMA NIC 类型的 VPC 网络和子网的名称前缀。
    • ZONE:您要在其中创建网络和计算实例的可用区。请使用 us-central1-aeurope-west4-b
  3. 可选:如需验证 VPC 网络资源是否已成功创建,请在 Google Cloud 控制台中检查网络设置:

    1. 在 Google Cloud 控制台中,前往 VPC 网络页面。

      进入 VPC 网络页面

    2. 在列表中搜索您在上一步中创建的网络。
    3. 如需查看子网、防火墙规则和其他网络设置,请点击网络的名称。

创建实例模板

如需使用灵活启动使用选项,请创建一个空 MIG,然后为该 MIG 创建规模调整请求。当您请求的容量可用时,Compute Engine 会预配该容量并在 MIG 中创建实例。您最多可获取七天的资源。

如需为 MIG 中的每个实例指定实例和使用属性,请使用以下方法之一创建实例模板:

gcloud

如需创建区域级实例模板,请使用 gcloud beta compute instance-templates create 命令

gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --machine-type=MACHINE_TYPE \
    --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT \
    --instance-template-region=REGION \
    --boot-disk-type=hyperdisk-balanced \
    --boot-disk-size=DISK_SIZE \
    --scopes=cloud-platform \
    
--network-interface=nic-type=GVNIC, \
      network=GVNIC_NAME_PREFIX-net-0, \
      subnet=GVNIC_NAME_PREFIX-sub-0, \
      stack-type=STACK_TYPE, \
      address=EXTERNAL_IPV4_ADDRESS \
--network-interface=nic-type=GVNIC, \
      network=GVNIC_NAME_PREFIX-net-1, \
      subnet=GVNIC_NAME_PREFIX-sub-1,no-address \
--network-interface=nic-type=IRDMA, \
      network=RDMA_NAME_PREFIX-irdma, \
      subnet=RDMA_NAME_PREFIX-irdma-sub, \
      stack-type=IPV4_ONLY,no-address \
    
    --reservation-affinity=none \
    --instance-termination-action=DELETE \
    --max-run-duration=RUN_DURATION \
    --maintenance-policy=TERMINATE \
    --provisioning-model=FLEX_START

替换以下内容:

  • INSTANCE_TEMPLATE_NAME:实例模板的名称。
  • MACHINE_TYPE:用于实例的 H4D 机器类型。
  • IMAGE_FAMILY:您要使用的操作系统映像所属的映像系列。如需查看受支持的操作系统列表,请参阅受支持的操作系统
  • IMAGE_PROJECT:操作系统映像的项目 ID。
  • REGION:要在其中创建实例模板的区域。 指定提供您要使用的机器类型的区域。
  • DISK_SIZE:启动磁盘的大小(以 GiB 为单位)。
  • GVNIC_NAME_PREFIX:您在为 gVNIC 接口创建标准 VPC 网络和子网时使用的名称前缀。

    如果您使用的是默认网络,请仅添加一个 --network-interface 字段,并将 nic-type 字段设置为 GVNIC。此外,还应省略此网络接口的 networksubnetwork 设置。

  • STACK_TYPE(可选):用于 gVNIC 接口的栈类型。 请指定 IPV4_ONLYIPV4_IPV6。 如果您未指定值,则系统会默认使用 IPV4_ONLY
  • EXTERNAL_IPV4_ADDRESS(可选):要与 gVNIC 网络接口搭配使用的静态外部 IPv4 地址。您之前必须已预留外部 IPv4 地址。 执行下列其中一项操作:

    • 指定子网中的有效 IPv4 地址。
    • 如果您不希望网络接口具有外部 IP 地址,请使用 no-address 标志。
    • 如果您希望网络接口接收临时外部 IP 地址,请指定 address=''

    如需为 GVNIC 网络接口指定外部 IPv6 地址,请改用 --external-ipv6-address 标志。

  • RDMA_NAME_PREFIX:您在为 IRDMA 网络接口创建 VPC 网络和子网时使用的名称前缀。

    如果您未将 Cloud RDMA 与 H4D 实例搭配使用,请省略 IRDMA 接口的 --network-interface 字段。

  • RUN_DURATION:您希望请求的实例运行的时长。您必须将该值的格式设置为天数、小时数、分钟数或秒数,后面分别跟 dhms。例如,指定 30m 表示 30 分钟,或指定 1d2h3m4s 表示 1 天 2 小时 3 分钟 4 秒。该值必须介于 10 分钟到 7 天之间。

REST

如需创建区域级实例模板,请向 beta regionInstanceTemplates.insert 方法发出 POST 请求。

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceTemplates
{
  "name":"INSTANCE_TEMPLATE_NAME",
  "properties":{
    "disks":[
      {
        "boot":true,
        "initializeParams":{
          "diskSizeGb":"DISK_SIZE",
          "diskType":"hyperdisk-balanced",
          "sourceImage":"projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
        },
        "mode":"READ_WRITE",
        "type":"PERSISTENT"
      }
    ],
    "machineType":"MACHINE_TYPE",
    
        "networkInterfaces": [
        {
          "network": "GVNIC_NAME_PREFIX-net-0",
          "subnetwork": "GVNIC_NAME_PREFIX-sub-0",
          "accessConfigs": [
            {
                "type": "ONE_TO_ONE_NAT",
                "name": "External IP",
                "natIP": "EXTERNAL_IPV4_ADDRESS"
            }
          ],
          "stackType": "IPV4_ONLY",
          "nicType": "GVNIC",
      },
      {
          "network": "GVNIC_NAME_PREFIX-net-1",
          "subnetwork": "GVNIC_NAME_PREFIX-sub-1",
          "stackType": "IPV4_ONLY",
          "nicType": "GVNIC",
      },
      {
          "network": "RDMA_NAME_PREFIX-irdma",
          "subnetwork": "RDMA_NAME_PREFIX-irdma-sub",
          "stackType": "IPV4_ONLY",
          "nicType": "IRDMA",
      }
    ],
,
    "reservationAffinity": {
        "consumeReservationType": "NO_RESERVATION"
      },
    "scheduling": {
        "instanceTerminationAction": "DELETE",
        "maxRunDuration": {
          "seconds": RUN_DURATION
        },
        "onHostMaintenance": "TERMINATE",
        "provisioningModel": "FLEX_START"
      }

  }
}

替换以下内容:

  • INSTANCE_TEMPLATE_NAME:实例模板的名称。
  • MACHINE_TYPE:用于实例的机器类型。指定 H4D 机器类型。如需了解详情,请参阅 H4D 机器类型
  • IMAGE_FAMILY:您要使用的操作系统映像所属的映像系列。 如需查看受支持的操作系统列表,请参阅受支持的操作系统
  • IMAGE_PROJECT:操作系统映像的项目 ID。
  • REGION:要在其中创建实例模板的区域。 指定提供您要使用的机器类型的区域。 如需了解区域,请参阅区域和可用区
  • DISK_SIZE:启动磁盘的大小(以 GiB 为单位)。
  • GVNIC_NAME_PREFIX:您在为 gVNIC 接口创建标准 VPC 网络和子网时使用的名称前缀。

    如果您使用的是默认网络,请仅添加一个 --network-interface 字段,并将 nic-type 字段设置为 GVNIC。此外,还应省略此网络接口的 networksubnetwork 设置。

  • EXTERNAL_IPV4_ADDRESS(可选):要与 gVNIC 网络接口搭配使用的静态外部 IPv4 地址。您之前必须已预留外部 IPv4 地址

    如需为 GVNIC 网络接口指定外部 IPv6 地址,请改用 --external-ipv6-address 标志。

  • RDMA_NAME_PREFIX:您在为 IRDMA 网络接口创建 VPC 网络和子网时使用的名称前缀。

    如果您未将 Cloud RDMA 与 H4D 实例搭配使用,请省略 IRDMA 接口的 --network-interface 字段。

  • RUN_DURATION:您希望请求的实例运行的时长(以秒为单位)。该值必须介于 600(600 秒,即 10 分钟)到 604800(604,800 秒,即 7 天)之间。

创建实例模板后,您可以查看该模板以查看其 ID 并检查其实例属性。

创建包含规模调整请求的 MIG

如需同时创建所有请求的灵活启动实例,请创建一个 MIG,然后在该 MIG 中创建规模调整请求,如本部分中所述。

创建 MIG

如需创建 MIG,请选择以下选项之一:

gcloud

按如下所示创建可用区级或区域级 MIG:

  • 如需创建可用区级 MIG,请按如下所示使用 instance-groups managed create 命令

        gcloud compute instance-groups managed create MIG_NAME \
            --template=INSTANCE_TEMPLATE_URL \
            --size=0 \
            --default-action-on-vm-failure=do-nothing \
            --zone=ZONE
        
  • 如需创建区域级 MIG,请按如下所示使用 instance-groups managed create 命令

        gcloud compute instance-groups managed create MIG_NAME \
            --template=INSTANCE_TEMPLATE_URL \
            --size=0 \
            --default-action-on-vm-failure=do-nothing \
            --zones=ZONE \
            --target-distribution-shape=any-single-zone \
            --instance-redistribution-type=none
        

REST

按如下所示创建可用区级或区域级 MIG:

  • 如需创建可用区级 MIG,请按如下所示向 instanceGroupManagers.insert 方法发出 POST 请求。
          POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers
          {
            "versions": [
            {
              "instanceTemplate": "INSTANCE_TEMPLATE_URL"
            }
            ],
            "name": "MIG_NAME",
            "targetSize": 0,
            "instanceLifecyclePolicy": {
                "defaultActionOnFailure": "DO_NOTHING"
            }
          }
         
  • 如需创建区域级 MIG,请按如下所示向 regionInstanceGroupManagers.insert 方法发出 POST 请求。
          POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers
          {
            "versions": [
              {
                "instanceTemplate": "INSTANCE_TEMPLATE_URL"
              }
            ],
            "name": "MIG_NAME",
            "targetSize": 0,
            "distributionPolicy": {
              "targetShape": "ANY_SINGLE_ZONE",
              "zones": [
                {
                "zone": "projects/PROJECT_ID/zones/ZONE"
                }
              ]
            },
            "updatePolicy": {
              "instanceRedistributionType": "NONE"
            },
            "instanceLifecyclePolicy": {
              "defaultActionOnFailure": "DO_NOTHING"
            }
          }
         

创建规模调整请求

如需在 MIG 中创建规模调整请求,请选择以下选项之一:

gcloud

按如下所示创建规模调整请求:

  • 如需在可用区级 MIG 中创建规模调整请求,请按如下所示使用 instance-groups managed resize-requests create 命令

        gcloud compute instance-groups managed resize-requests create MIG_NAME \
            --resize-request=RESIZE_REQUEST_NAME \
            POPULATION_METHOD \
            --zone=ZONE
        
  • 如需在区域级 MIG 中创建规模调整请求,请按如下所示使用 Beta 版 instance-groups managed resize-requests create 命令

          gcloud beta compute instance-groups managed resize-requests create MIG_NAME \
              --resize-request=RESIZE_REQUEST_NAME \
              POPULATION_METHOD \
              --region=REGION
          

REST

按如下所示在可用区级或区域级 MIG 中创建规模调整请求:

  • 如需在可用区级 MIG 中创建规模调整请求,请按如下所示向 instanceGroupManagerResizeRequests.insert 方法发出 POST 请求:
          POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME/resizeRequests
          {
            "name": "RESIZE_REQUEST_NAME",
            POPULATION_METHOD
          }
          
  • 如需在区域级 MIG 中创建规模调整请求,请按如下所示向 beta.regionInstanceGroupManagerResizeRequests.insert 方法发出 POST 请求:
          POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME/resizeRequests
          {
            "name": "RESIZE_REQUEST_NAME",
            POPULATION_METHOD
          }