创建非代管实例组

非代管实例组是位于同一区域、VPC 网络和子网中的虚拟机 (VM) 的集合。非代管实例组有助于将需要个别配置设置或调整的虚拟机分组在一起。

对于需要一致的配置设置的虚拟机,您可以将代管实例组 (MIG)实例模板搭配使用。我们建议尽可能使用代管实例组,而不是非代管实例组。如需创建代管实例组,请参阅创建代管实例组

您可以将任一类型的实例组作为后端添加到 Google Cloud 负载平衡器。如需了解详情,请参阅 Cloud Load Balancing 概览。如需了解 Google Cloud 支持的每个实例组的虚拟机数,请参阅每个实例组的虚拟机数

如需详细了解实例组,请参阅实例组概览

准备工作

使用非代管实例组

创建非托管实例组

代管实例组不同,非代管实例组是不共用公共实例模板的不同虚拟机的集合。您只需创建一个组,然后向其逐个添加虚拟机。

控制台

  1. 在 Cloud Console 中,转到实例组页面。

    转到“实例组”页面

  2. 点击创建实例组
  3. 点击新建非托管式实例组
  4. 为该非托管实例组输入名称。
  5. 位置下,选择区域和地区。
  6. 选择网络子网
  7. 虚拟机实例下,选择要添加到该实例组的虚拟机。
  8. 点击创建

gcloud

如需创建新的非代管实例组,请使用 instance-groups unmanaged create 命令:

gcloud compute instance-groups unmanaged create instance-group-name \
    --zone=zone

替换以下内容:

  • instance-group-name:您要创建的实例组的名称。
  • zone:您要创建实例组的区域。

API

如需使用 API 创建非代管实例组,请使用 instanceGroups.insert 方法发送 POST 请求:

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups

{
   "name": "instance-group-name"
}

替换以下内容:

  • instance-group-name:您要创建的实例组的名称。
  • zone:您要创建实例组的区域。
  • project-id:该实例组所属项目的 ID。

当您使用 gcloud 命令行工具或 API 创建新的非代管实例组时,系统不会自动向其添加任何虚拟机。您可以手动将虚拟机添加到非代管实例组

列出和描述实例组

检索现有非托管实例组的列表。

控制台

在 Cloud Console 中,实例组页面列出了现有的非代管实例组和代管实例组

转到“实例组”页面

gcloud

如需使用 gcloud 命令行工具列出项目中的所有非代管实例组,请使用 instance-groups unmanaged list 命令:

gcloud compute instance-groups unmanaged list

如需查看特定非代管实例组的相关信息,请使用 instance-groups unmanaged describe 命令:

gcloud compute instance-groups unmanaged describe instance-group-name \
   --zone=zone

替换以下内容:

  • instance-group-name:要描述的实例组的名称。
  • zone:实例组的区域。

API

如需使用 API 列出实例组,请使用 instanceGroups.list 方法发送 GET 请求:

GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups

如需使用 API 获取特定非代管实例组的相关信息,请使用 instanceGroups.get 方法发送 GET 请求:

GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name

替换以下内容:

  • instance-group-name:要描述的实例组的名称。
  • zone:实例组的区域。
  • project-id:该实例组所属项目的 ID。

删除实例组

与代管实例组不同,删除非代管实例组不会删除该实例组内的任何虚拟机,而只会移除虚拟机的逻辑分组。

如果实例组是 Google Cloud 负载平衡器的后端,您无法将其删除。您必须先从后端服务移除该后端

控制台

  1. 在 Cloud Console 中,转到实例组页面。

    转到“实例组”页面

  2. 从列表中选择一个或多个非托管实例组。
  3. 点击删除,移除这些实例组。系统会移除实例组,但不会删除实例组中的虚拟机。

gcloud

如需删除非代管实例组,请使用 instance-groups unmanaged delete 命令:

gcloud compute instance-groups unmanaged delete instance-group-name \
    --zone=zone

替换以下内容:

  • instance-group-name:您要删除的实例组的名称。
  • zone:实例组的区域。

API

如需使用 API 删除非代管实例组,请使用 instanceGroups.delete 方法发送 DELETE 请求:

DELETE https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name

替换以下内容:

  • instance-group-name:您要删除的实例组的名称。
  • zone:实例组的区域。
  • project-id:该实例组所属项目的 ID。

实例组成员资格

添加虚拟机

创建非代管实例组后,您可以向该实例组添加虚拟机。

控制台

  1. 在 Cloud Console 中,转到实例组页面。

    转到“实例组”页面

  2. 在列表的名称列下,点击要添加虚拟机的实例组的名称。随即打开的页面中会显示实例组属性以及其中所含的虚拟机列表。
  3. 点击修改组以修改此非代管实例组。
  4. 虚拟机实例下,选择要添加到该实例组中的一个或多个现有虚拟机。您只能选择与现有虚拟机属于同一区域、VPC 网络和子网的虚拟机。
  5. 点击保存,将新虚拟机添加到该实例组中。

gcloud

如需向非代管实例组添加实例,请使用 instance-groups unmanaged add-instances 命令:

gcloud compute instance-groups unmanaged add-instances instance-group-name \
    --zone=zone \
    --instances=list-of-VM-names

替换以下内容:

  • instance-group-name:您要向其中添加虚拟机的实例组的名称。
  • zone:实例组的区域。
  • list-of-VM-names:属于同一区域、VPC 网络和子网的虚拟机列表(以英文逗号分隔)。

API

如需使用 API 将虚拟机添加到非代管实例组,请使用 instanceGroups.addInstances 方法发送 POST 请求:

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/addInstances

   {
      "instances": [
         {
         "instance": "https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-1-name",
         "instance": "https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-2-name",
         ....
         }
      ]
   }

替换以下内容:

  • instance-group-name:您要向其中添加虚拟机的实例组的名称。
  • zone:实例组的区域。
  • project-id:该实例组所属项目的 ID。
  • instance-1-nameinstance-2-name:这些是要添加到该实例组中且属于同一区域、VPC 网络和子网的虚拟机的名称。

列出虚拟机

您可以检索非托管实例组中的成员虚拟机列表。

控制台

  1. 在 Cloud Console 中,转到实例组页面。

    转到“实例组”页面

  2. 在列表的名称列下,点击您要查看的非代管实例组的名称。随即出现的页面中会以列表形式提供该实例组所包含的实例。

gcloud

如需列出非代管实例组中的虚拟机,请使用 instance-groups unmanaged list-instances 命令:

gcloud compute instance-groups unmanaged list-instances instance-group-name \
   --zone=zone

替换以下内容:

  • instance-group-name:您要列出其成员的实例组的名称。
  • zone:实例组的区域。

API

如需使用 API 列出非代管实例组中的虚拟机,请使用 instanceGroups.listInstances 方法发送 POST 请求:

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/listInstances

替换以下内容:

  • instance-group-name:您要列出其成员的实例组的名称。
  • zone:实例组的区域。
  • project-id:该实例组所属项目的 ID。

移除虚拟机

您可以从非代管实例组中移除虚拟机。从实例组中移除某个虚拟机并不会删除该虚拟机。

控制台

  1. 在 Cloud Console 中,转到实例组页面。

    转到“实例组”页面

  2. 在列表的名称列下,点击要从中移除虚拟机的实例组的名称。随即打开的页面中会显示实例组属性以及其中所含的虚拟机列表。
  3. 在此列表中,选择要从该实例组中移除的一个或多个虚拟机。
  4. 点击从组中移除。从非代管实例组中移除的虚拟机会继续留存并运行,除非您停止或删除这些虚拟机。

gcloud

如需从非代管实例组中移除虚拟机,请使用instance-groups unmanaged remove-instances 命令:

gcloud compute instance-groups unmanaged remove-instances instance-group-name \
    --zone=zone \
    --instances=list-of-VM-names

替换以下内容:

  • instance-group-name:包含要移除的实例的实例组的名称。
  • zone:实例组的区域。
  • list-of-VM-names:您要从该实例组中移除的虚拟机列表(以英文逗号分隔)。

API

如需使用 API 从非代管实例组中移除虚拟机,请使用 instanceGroups.removeInstances 方法发送 POST 请求。您可以同时移除多个虚拟机,如下所示:

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/removeInstances
{
    "instances": [
        {
        "instance": "https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-1-name",
        "instance": "https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-2-name",
        ....
        }
    ]
}

替换以下内容:

  • instance-group-name:包含要移除的实例的实例组的名称。
  • zone:实例组的区域。
  • project-id:该实例组所属项目的 ID。
  • instance-1-nameinstance-2-name:这些是您想要与该实例组取消关联的虚拟机的名称。

使用已命名的端口

已命名的端口是表示端口名称和编号的键值对。它们与 Google Cloud 负载平衡器配合使用。充当代理的负载平衡器会订阅其后端服务配置中的一个已命名的端口。系统会根据每个实例组后端的已命名端口映射,将该端口的名称转换为端口号。

例如,后端服务可以订阅一个名为 http-port 的端口。后端实例组可以有一个名为 http-port:80 的端口。后端实例组指示负载平衡器在 80 端口上使用 TCP 等协议向该实例组中的虚拟机发送流量。该协议在负载平衡器的后端服务中定义。

您可以在实例组中定义多个已命名的端口。但是,负载平衡器的后端服务只能订阅其中一个已命名的端口。同一后端服务上的后端实例组可以使用不同的已命名端口映射。为了说明这一点,我们提供了一个示例后端服务,该服务订阅已命名的端口 http-port 且具有两个后端实例组:

  • instance-group-a 实例组(已命名的端口为 http-port:80
  • instance-group-b 实例组(已命名的端口为 http-port:79

此后端服务向 instance-group-a 中虚拟机的端口 80 和 instance-group-b 中虚拟机的端口 79 发送流量。

控制台

  1. 在 Cloud Console 中,转到实例组页面。

    转到“实例组”页面

  2. 在列表的名称列下方,点击您要指定已命名端口的实例组的名称。此时将打开一个页面,其中包含实例组属性。
  3. 点击修改组以修改此非代管实例组。
  4. 端口名称映射(可选)部分,点击添加一项,然后输入端口名称和端口号。根据需要添加或移除其他已命名的端口。
  5. 点击保存,更新非代管实例组的已命名端口列表。

gcloud

如需将已命名的端口添加到非代管实例组,请使用 instance-groups unmanaged set-named-ports 命令:

gcloud compute instance-groups unmanaged set-named-ports instance-group-name \
    --zone=zone \
    --named-ports=port-name:port-number,...

如需列出非代管实例组中已命名的端口,请使用 instance-groups unmanaged get-named-ports

gcloud compute instance-groups unmanaged get-named-ports instance-group-name \
    --zone=zone

如需使用 gcloud 命令行工具移除非代管实例组中的所有已命名端口,请使用 instance-groups unmanaged set-named-ports 并指定空的已命名端口列表:

gcloud compute instance-groups unmanaged set-named-ports instance-group-name \
    --zone=zone \
    --named-ports=""

在上面的所有示例中,您都需要替换以下内容(如果存在):

  • instance-group-name:实例组的名称。
  • zone:实例组的区域。
  • port-nameport-number:端口名称和端口号表示您选择的名称与端口号之间的映射关系。您可以英文逗号为分隔符指定多个映射;例如,port-one:80,port-two:8080 是有效的已命名端口列表。

API

  1. 描述实例组并记下 fingerprint

  2. 如需使用 API 添加已命名的端口,请使用 instanceGroups.setNamedPorts 方法发送 POST 请求。如果您要移除所有已命名的端口,请将 namedPorts 设置为空列表。

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/setNamedPorts
    
    {
        "fingerprint": "fingerprint",
        "namedPorts": [
            {
            "name": "port-name",
            "port": port-number
            },
            {
            "name": "port-name",
            "port": port-number
            },
            ....
        ]
    }
    

    替换以下内容:

    • instance-group-name:实例组的名称。
    • zone:实例组的区域。
    • project-id:该实例组所属项目的 ID。
    • port-nameport-number:端口名称和端口号表示您选择的名称与端口号之间的映射关系。
    • fingerprint:这是您在上一步中记下的指纹。
  3. 再次描述实例组并记下配置的已命名端口。

后续步骤