创建非托管实例组

非托管实例组是存在于单个地区中并且不共用公共实例模板的实例的集合。您可以使用非托管实例组使预先存在的配置能够处理负载平衡任务。但是,除非应用要求您将不相同的实例组合在一起,否则应始终创建托管实例组

如需详细了解实例组,请参阅实例组概览。要改为创建托管实例组 (MIG),请参阅创建托管实例组

准备工作

创建非托管实例组

托管实例组不同,非托管实例组是一个不共用公共实例模板的多个独特实例的集合。非托管组不会在组中创建或删除实例,也不会调节组中的实例数量。您只需创建一个组,然后向该组添加各个实例即可。

控制台

  1. 转到 GCP Console 中的实例组页面。

    转到“实例组”页面

  2. 点击创建实例组
  3. 为非托管实例组输入名称。
  4. 位置下方,选择单个地区
  5. 地区下方,选择要在其中定位该组的地区。
  6. 组类型下方,选择非托管实例组。
  7. 为该组选择网络。
  8. 虚拟机实例下方,选择要添加到此组的实例。
  9. 点击创建以创建新组。

gcloud

如需使用 gcloud 命令行工具创建新的非托管实例组,请使用 instance-groups unmanaged create 命令:

gcloud compute instance-groups unmanaged create [INSTANCE_GROUP]

API

在 API 中,构建一个向 instanceGroups 服务发出的 POST 请求。在请求正文中,请添加组名。

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroups

{
 "name": "[INSTANCE_GROUP]"
}

当您首次创建非托管实例组时,该组中不包含任何实例。创建组织后,您就可以将特定实例添加到组中了。

将实例添加到非托管实例组

创建非托管实例组后,您可以将现有实例添加到组中。

请注意以下事项:

  • 一个实例只能属于一个负载平衡实例组。此外,您还可以将实例添加到单个负载平衡实例组和多个非负载平衡实例组。

  • 如果实例组正在进行负载平衡,则组中的所有实例都必须属于同一个 VPC 网络或子网。

控制台

  1. 转到 GCP Console 中的实例组页面。

    转到“实例组”页面

  2. 在列表的名称列下方,点击要向其添加实例的实例组的名称。此时将打开一个页面,其中包含实例组属性以及已经属于该组的实例列表。
  3. 点击修改组以修改此非托管实例组。
  4. 虚拟机实例下方,选择一个或多个现有实例以添加到组中。只有实例与您的组位于同一地区时,您才可以选择实例。
  5. 点击保存以保存更改。之后,所选实例将加入非托管实例组。

gcloud

使用 gcloud instance-groups unmanagedadd-instances 子命令:

gcloud compute instance-groups unmanaged add-instances [INSTANCE_GROUP] \
  --instances [INSTANCE_NAME],[ANOTHER_INSTANCE_NAME]

API

使用要向其添加实例的非托管实例组的名称,构建一个向 instanceGroups 服务发出的请求。指定要添加到组中的一个或多个实例的网址。

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroups/[INSTANCE_GROUP]/addInstances

{
 "instances": [
  {
   "instance": "https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]",
   "instance": "https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]"
  }
 ]
}

列出项目中的非托管实例组

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

Console

在 GCP Console 中,转到实例组页面。

转到“实例组”页面

如果您已有实例组,页面会列出这些组。请注意,此页面还列出了托管实例组

gcloud

使用 list 命令确认是否已成功创建非托管实例组:

gcloud compute instance-groups unmanaged list [INSTANCE_GROUP]

要获取有关特定组的信息,请使用以下命令:

gcloud compute instance-groups unmanaged describe [INSTANCE_GROUP]

API

要列出项目中的所有实例组,请构建一个向 instanceGroups 服务发出的 GET 请求:

GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroups

要获取有关特定组的信息,请构建一个向 instanceGroups 服务发出的 GET 请求并包含特定非托管实例组的名称:

GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroups/[INSTANCE_GROUP]

列出非托管实例组中的实例

检索包含在非托管实例组中的实例列表。

控制台

  1. 转到 GCP Console 中的实例组页面。

    转到“实例组”页面

  2. 在列表的名称列下方,点击包含您要查看的实例的非托管实例组的名称。此时将打开一个页面,其中包含实例组属性和组中包含的实例的列表。

gcloud

要列出非托管实例组中的实例,请使用 gcloud compute instance-groups unmanagedinstances 命令组的 list-instances 子命令:

gcloud compute instance-groups unmanaged list-instances [INSTANCE_GROUP]

API

使用要列出其实例的非托管实例组的名称,构建一个向 instanceGroups 服务发出的请求。或者,您可以在请求正文中添加过滤条件。

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroups/[INSTANCE_GROUP]/listInstances

从组中移除实例

将实例从组中移除,而不删除这些实例。

如果该实例组属于已启用连接排空后端服务的一部分,则在连接排空结束后,最长可能需要等待 60 秒才能移除或删除虚拟机实例。

控制台

  1. 转到 GCP Console 中的实例组页面。

    转到“实例组”页面

  2. 在列表的名称列下方,点击要从中移除实例的实例组的名称。此时将打开一个页面,其中包含实例组属性和组中包含的实例的列表。
  3. 在实例列表中,选择要从组中移除的一个或多个实例。
  4. 点击从组中移除。选定的实例即会从组中移除,但会继续在组外运行。

gcloud

要从非托管实例组中移除实例,请使用 gcloud compute instance-groups unmanagedremove 子命令:

gcloud compute instance-groups unmanaged remove-instances [INSTANCE_GROUP] \
  --instances [INSTANCE_NAME],[ANOTHER_INSTANCE_NAME],[INSTANCES ...]

API

使用要移除其实例的非托管实例组的名称,构建一个向 instanceGroups 服务发出的请求。指定要从组中移除的一个或多个的实例的网址。

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroups/[INSTANCE_GROUP]/removeInstances

{
 "instances": [
  {
   "instance": "https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]",
   "instance": "https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[ANOTHER_INSTANCE_NAME]"
  }
 ]
}

将非托管实例组添加到后端服务

创建 HTTP(S)、SSL 代理、TCP 代理或内部负载平衡器需要后端服务。后端服务可以包含多个后端。实例组是一种后端。实例组中的实例会响应来自负载平衡器的流量,后端服务可借此了解可以使用哪些实例、可以处理多少流量,以及当前正在处理多少流量。此外,后端服务会监控运行状况检查,并且不会向运行状况不佳的实例发送新连接。

有关将实例组添加到后端服务的说明,请参阅将实例组添加到后端服务

将已命名端口分配给非托管实例组

已命名端口是键值对,用于表示服务名称和运行该服务的端口号。负载平衡服务使用这些已命名端口将流量引向各个实例上的特定端口。例如,如果您将已命名端口设置为 http:80,然后又将后端服务配置为将流量发送到名为 http 的端口,则负载平衡会将流量转发到实例组中个别实例的端口 80

已命名端口是负载平衡使用的简单元数据。但是,已命名端口不控制 Compute Engine 中的网络或防火墙资源。

您可以为每个服务名称分配多个端口,并为每个端口分配多个服务名称。但请注意,指定的后端服务一次只能将流量转发到一个已命名端口。

控制台

  1. 转到 GCP Console 中的实例组页面。

    转到“实例组”页面

  2. 在列表的名称列下方,点击您要指定已命名端口的实例组的名称。此时将打开一个页面,其中包含实例组属性。
  3. 点击修改组以修改此非托管实例组。
  4. 点击指定端口名称映射以展开已命名端口选项。
  5. 点击添加一项,然后根据需要输入端口名称以及要与该名称关联的端口号。如有必要,再次点击添加项目以添加更多条目。
  6. 点击保存以保存更改并将已命名端口应用于非托管实例组中的实例。

gcloud

使用 set-named-ports 命令设置一个或多个已命名端口:

gcloud compute instance-groups unmanaged set-named-ports [INSTANCE_GROUP] \
  --named-ports [PORT_NAME]:[PORT],[PORT_NAME]:[PORT]

例如:

gcloud compute instance-groups unmanaged set-named-ports [INSTANCE_GROUP] \
  --named-ports name1:80,name2:8080

要向每个服务名称分配多个端口或为每个服务分配多个名称,请为每个名称或端口创建多个条目。例如,将 name1 分配到端口 102080。然后,向端口 8080 分配 name2name3。最后,向 name4 分配端口 9000

gcloud compute instance-groups unmanaged set-named-ports [INSTANCE_GROUP] \
  --named-ports name1:10,name1:20,name1:80,\
                name2:8080,name3:8080,\
                name4:9000

使用 get-named-ports 命令检查非托管实例组的已命名端口分配情况,如下所示:

gcloud compute instance-groups unmanaged get-named-ports [INSTANCE_GROUP]
NAME  PORT
name1 10
name1 20
name1 80
name2 8080
name3 8080
name4 9000

API

请构建一个向 instanceGroups 服务发出的请求并包含特定非托管实例组的名称。通过获取有关特定组的信息,获取非托管实例组的当前 fingerprint 值。在请求正文中添加 fingerprint 以及一个或多个 namedPorts 值对:

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroups/[INSTANCE_GROUP]/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "[PORT_NAME]",
   "port": [PORT_NUMBER]
  },
  {
   "name": "[PORT_NAME]",
   "port": [PORT_NUMBER]
  }
 ]
}

例如:

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "name1",
   "port": 80
  },
  {
   "name": "name2",
   "port": 8080
  }
 ]
}

要为每个服务名称分配多个端口,请为该服务名称创建多个条目。例如,您可以将端口 102080 分配给 name1,同时将端口 8080 分配给 name2

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "name1",
   "port": 10
  },
  {
   "name": "name1",
   "port": 20
  }
  {
   "name": "name1",
   "port": 80
  }
  {
   "name": "name2",
   "port": 8080
  }
  {
   "name": "name3",
   "port": 80
  }
  {
   "name": "name4",
   "port": 8080
  }
 ]
}

要列出已分配给非托管实例组的已命名端口,请构建一个指向该组的 GET 请求,如下所示:

GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroups/[INSTANCE_GROUP]

删除非托管实例组

与托管实例组不同,删除非托管实例组不会删除该组中的任何实例。删除非托管实例组只是解散了实例的逻辑分组。

使用 gcloud 命令行工具API 删除非托管实例组。

控制台

  1. 转到 GCP Console 中的实例组页面。

    转到“实例组”页面

  2. 在列表中选择一个或多个要删除的组。
  3. 点击删除以删除组。但请注意,组中的实例不会被删除。

gcloud

要删除非托管实例组,请使用 delete 命令:

gcloud compute instance-groups unmanaged delete [INSTANCE_GROUP]

API

请构建一个向 instanceGroups 服务发出的 DELETE 请求,并包含要删除的特定非托管实例组的名称。

DELETE https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroups/[INSTANCE_GROUP]

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档