可以使用 gcloud 更改 LB 指向的实例组吗?

Can gcloud be used to change the instance group a LB is pointing to?

我正在尝试使我目前手动执行的流程自动化。 我有一个 TCP 负载均衡器,我需要更改它将流量定向到的实例组。 手动操作时,非常简单明了,我只是在 Web 界面中编辑 LB 设置,然后在“后端配置”下在实例组之间切换: Manually changing via web interface

我正在尝试使用 gcloud 复制该过程,使用以下命令:

gcloud compute backend-services update-backend BACKEND-SERVICE-NAME --instance-group=INSTANCE-GROUP-NAME --instance-group-region=us-east4  --project=PROJECT

但是出现如下错误:

(gcloud.compute.backend-services.update-backend) At least one property must be modified.

gcloud compute backend-services update-backend 的文档中说:

To add, remove, or swap backends, use the gcloud compute backend-services remove-backend and gcloud compute backend-services add-backend commands.

这是否意味着无法使用 gcloud 复制该过程? 我必须先删除实例组,然后再添加新的实例组,这将意味着 LB 的部分流量丢失。 我怎样才能在不停机的情况下在后端之间进行交换,尽可能通过 Web GUI 进行?

gcloud compute backend-services update-backend 根据 GCP 官方 documentation 更新已经与后端服务关联的后端属性。它不能删除实例组或添加新的实例组到 LB 后端服务。为此,以下命令将帮助您实现这种情况,但正如您提到的那样,LB 会造成流量损失。

  • 移除LB后端服务的实例组。
 gcloud compute backend-services remove-backend BACKEND_SERVICE_NAME --instance-group=INSTANCE_GROUP   --instance-group-zone=INSTANCE_GROUP_ZONE --region=REGION --project=PROJECT
  • 为LB后端服务添加新的实例组。
 gcloud compute backend-services add-backend BACKEND_SERVICE_NAME --instance-group=INSTANCE_GROUP --instance-group-zone=INSTANCE_GROUP_ZONE --region=REGION --project=PROJECT
  • 获取可用的 LB 后端服务列表。
 gcloud compute backend-services list.

为避免停机,您可以在 GCE 实例组中使用滚动更新功能。此 document 解释了如何自动推出对 MIG 中实例的更新。