本页面介绍了 Google Kubernetes Engine (GKE) 服务的基于利用率的负载均衡,该功能可评估后端 Pod 的资源利用率,并使用实际工作负载容量智能地重新平衡流量,从而提高应用可用性和灵活的路由。
本页面适用于在 GKE 上管理服务并希望根据实时资源利用率优化流量分配的云架构师和网络专家。
在阅读本页面之前,请确保您熟悉以下内容:
- GKE 概念:包括 GKE 集群、节点和 Pod。
- Kubernetes 服务:应用在 Kubernetes 中的公开方式。
- Cloud Load Balancing:对 Cloud Load Balancing 的一般了解,尤其是Google Cloud 负载平衡器的工作方式。
- Kubernetes Gateway API:建议用于在 GKE 中公开服务和管理流量的方法。
- 网络端点组 (NEG):GKE 服务如何使用 NEG 与 Cloud Load Balancing 集成。
- 基本资源利用率指标:例如,CPU 利用率,这是目前用于基于利用率的负载均衡的指标。
概览
Cloud Load Balancing 基础架构会根据标准的可访问性指标(包括 HTTP、HTTPS、HTTP/2 和 gRPC)将流量路由到 GKE 服务,这些指标用于确定 Pod 的健康状况和资格。默认情况下,它会考虑 Pod 可用性,并根据可选的流量分配政策(例如 GCPTrafficDistributionPolicy
)将流量转发到所有运行状况良好的后端 Pod。
现代应用会跟踪 CPU 使用情况,以便您了解费用、监控性能并有效管理容量。为了满足这一需求,负载平衡器使用实时资源利用率数据作为指标,以便确定每个后端 Pod 可以处理的最佳流量,从而实现智能流量分配。
GKE 服务的基于利用率的负载均衡功能会将资源利用率作为一项指标来评估后端 Pod 处理应用流量的能力。如果一个或多个 Pod 的利用率过高,则会将流量重新均衡到其他后端。
特性和优势
基于利用率的负载均衡具有以下优势:
提高应用可用性:当后端承受压力时,优先将流量发送到资源利用率较低的 Pod,这有助于保持应用性能、防止速度变慢和中断,并有助于确保为用户提供可靠的体验。
提供灵活的路由:提供一组额外的指标,让您可以定义与您的业务用例完全一致的流量分配政策。
基于利用率的负载均衡的工作原理
基于利用率的 GKE 服务负载均衡功能可让 GKE 中运行的应用更快速地响应资源负载,从而改进流量管理方式。您的应用通过在不同机器上使用多个实例 (Pod) 在 GKE 中运行。它主要通过以下两种方式接收流量:
来自集群外部(南北向流量):集群接收来自互联网或其他外部来源的流量,称为南北向流量。GKE 托管的负载平衡器(网关)会将此流量从集群外部导向到集群内部。
从集群内部(东西向流量):您的集群会接收应用不同部分之间、GKE 集群内其他服务之间或多个集群之间的流量。这种内部流量称为东西向流量。
GKE 服务的基于利用率的负载均衡功能涉及一个持续的过程,其中 GKE 代理会收集 Pod 利用率指标,使 Cloud Load Balancing 基础架构能够智能地分配流量。以下步骤总结了 GKE 服务的基于利用率的负载均衡功能如何根据实时资源用量管理应用流量:
当您使用应用负载平衡器 (Gateway) 设置 GKE 服务时,GKE 会自动为每个可用区创建 NEG,并将应用的 Pod 分配给这些 NEG。最初,流量分配依赖于基本健康检查和您的默认设置。
您可以将 GKE 服务配置为使用 CPU 等资源利用率作为负载均衡的关键指标。
除了默认的 CPU 利用率指标之外,您还可以从应用中公开自定义指标,供负载均衡器使用。通过使用应用中的指标,您可以定义特定于工作负载的自定义信号。例如,您可以使用 vLLM 工作负载中的
gpu_cache_usage_perc metric
来帮助负载平衡器将流量定向到具有更多可用资源的区域。如需了解如何为负载均衡器公开自定义指标,请参阅为负载均衡器公开自定义指标。一个特殊的 GKE 代理会持续监控 Pod 的资源使用情况(例如 CPU),并定期将这些数据发送到 Cloud Load Balancing 基础架构。如果 Pod 有多个容器,代理会计算它们的总利用率。
Cloud Load Balancing 基础架构会分析实时利用率数据,以动态调整流量分配。它会评估每个 Pod 组(每个可用区级 NEG)的平均资源利用率(例如 CPU 负载)以及网络延迟时间等其他因素,从而确定要向每个 Pod 组发送多少流量。此流程会自动将流量从负载较高的 Pod 转移到负载较低的 Pod,从而确保在最近的区域内高效利用资源。
以下示例展示了基于利用率的负载均衡的工作原理。
示例:处理过度使用的 Pod
当您的服务在同一 Pod 内运行多个容器时,GKE 指标代理会分别报告每个容器的资源使用情况。然后,Cloud Load Balancing 基础架构会计算其利用率的加权平均值,以得出 Pod 的总容量。

图 1 显示了 Cloud Load Balancing 如何使用 GKE 的实时 CPU 利用率指标来优化跨多个可用区部署的 Pod 之间的流量分配。客户端请求通过 GKE Gateway 路由到分布在三个可用区中并分组到 NEG 中的后端 Pod。
在 Zone 1 中,Pod 报告的 CPU 用量为 90%。负载均衡器会减少流向此 Pod 的流量,以防止过载。
在可用区 2 中,Pod 的 CPU 利用率为 60%,属于中等利用率,并且继续接收流量。
在第 3 区,Pod 报告的 CPU 使用率为 40%,可能需要接收更多流量。GKE 会持续向 Cloud Load Balancing 基础架构发送元数据和利用率指标,后者会智能调整流量路由,以保持应用性能和可用性。
假设您的服务配置的 CPU 利用率上限为 80%。如果可用区 1 中的 Pod 报告的 CPU 利用率为 90%,超过了阈值,则会发生以下情况:
- Cloud Load Balancing 基础架构会检测到这种过度利用的情况。
- 然后,它会智能地重新平衡流量,并减少发送到可用区 1 中 Pod 的流量。这种再均衡会一直持续,直到相应可用区中 Pod 的平均 CPU 利用率降回 80% 的利用率阈值以下。
- 当 1 区中的 Pod 报告的 CPU 利用率较低(低于 80% 的阈值)时,Cloud Load Balancing 基础架构会重新评估流量分配。然后,它会逐渐在支持该服务的所有 Pod 之间重新平衡流量,并根据利用率继续高效地分配流量。