本文档介绍了如何将 Pod 或工作负载中的一个或多个指标发送到负载均衡器。
这些指标来自您运行的服务或应用。例如,请参阅 vLLM Engine 公开的指标。
然后,负载均衡器可以将此数据与基于利用率的负载均衡搭配使用,以更高效地平衡工作负载。例如,您可以使用此功能监控工作负载使用量较高的区域,然后允许负载均衡器将流量重定向到资源更充足的区域。在 vLLM 示例中,可用于跟踪利用率的指标是 vllm:gpu_cache_usage_perc。
要求
Pod 的要求如下:
- GKE 1.35.1-gke.1396000 或更高版本。
- Gateways API 已启用。
- 将Pod 横向自动扩缩与性能配置文件搭配使用。
指标的要求如下。
- 指标必须可通过由网关进行负载平衡的 Pod 下的 HTTP 端点进行访问。默认端点路径为
/metrics。 - 指标的格式必须符合 Prometheus 标准。
负载平衡器对指标名称有限制。例如,名称不得超过 64 个字符。如需查看完整的限制列表,请参阅
BackendService的 API 参考文档中有关字段backends[].customMetrics[].name的详细信息。如果服务的指标不符合这些限制,您可以使用
exportName字段重命名该指标。仅支持介于 0 到 1 之间的测量指标,其中 1 表示利用率为 100%。
Pod 标签选择器中的标签名称不得包含特殊字符。仅支持 a-z 字母(小写或大写)、数字、连字符和下划线。
每个集群最多可公开 20 个唯一指标。其他服务有自己的限制。例如,请参阅负载平衡器的限制和要求。 请注意,一个集群可以使用多个负载均衡器。
基于自定义指标的 GKE 基于利用率的负载均衡 (UBB)
您可以使用 GKE 基于利用率的负载均衡 (UBB),让负载平衡器根据后端 Pod 的利用率来分配流量。您可以配置 UBB 以使用与应用性能更相关的自定义指标,而不是依赖于 CPU 等通用指标。
在 GKE 中将 UBB 与自定义指标搭配使用时,存在以下限制:
- 仅限 Gateway API:您只能将 UBB 与使用 Gateway API 公开的服务搭配使用。GKE 使用 GKE Gateway Controller 与 Gateway API 进行交互。Service 和 Ingress API 不支持使用自定义指标的 UBB。自定义指标必须源自属于相应服务的 Pod。
- 无 Cloud Service Mesh:您无法将 UBB 与 Cloud Service Mesh 的自定义指标搭配使用。
- 不支持的负载平衡器:您无法将 UBB 与自定义指标搭配使用,也无法将 UBB 与外部直通式网络负载平衡器和外部代理网络负载平衡器搭配使用。
公开负载均衡指标
选择要公开的指标。您可以选择服务器公开的任何指标,但前提是该指标还必须满足上一部分中列出的要求。此示例使用名为
queue_depth_util的自定义指标。添加以下自定义资源,替换特定于您的指标和 Pod 的详细信息:
apiVersion: autoscaling.gke.io/v1beta1 kind: AutoscalingMetric metadata: name: NAME namespace: NAMESPACE spec: metrics: - pod: selector: matchLabels: APP_LABEL_NAME: APP_LABEL_VALUE containers: - endpoint: port: METRIC_PORT path: METRIC_PATH metrics: - gauge: name: METRIC prometheusMetricName: METRIC_PROMETHEUS_NAME loadBalancing: enabled: true替换以下内容以与您的工作负载相符:
NAME:AutoscalingMetric 对象的名称。NAMESPACE:Pod 所在的命名空间。APP_LABEL_NAME和APP_LABEL_VALUE:与发出指标的 Pod 相匹配的标签名称和值。METRIC_PORT:端口号METRIC_PATH:指标的路径。验证您的服务或应用使用的路径;此路径通常为/metrics。METRIC:您要公开的指标的名称。名称必须与正则表达式^[a-z]([a-z0-9_-]*[a-z0-9])?匹配,且长度不得超过 63 个字符。这意味着第一个字符必须是小写字母,且所有后续字符必须是连字符、下划线、小写字母或数字,但最后一个字符必须是字母或数字。可选:
METRIC_PROMETHEUS_NAME:Pod 公开的 Prometheus 指标名称。您可以使用此字段重命名指标,例如,因为 Pod 公开的指标名称不符合负载均衡器设置的名称限制。如需查看完整的限制列表,请参阅
BackendService的 API 参考文档中有关字段backends[].customMetrics[].name的详细信息。
使用以下命令应用清单:
kubectl apply -f FILE_NAME.yaml将
FILE_NAME替换为相应 YAML 文件的名称。添加自定义资源后,指标会推送到自动扩缩 API。系统会每隔几秒读取一次该指标,并将其发送到负载平衡器。
如需将此信号用于负载均衡,请提供
GCPBackendPolicy。例如:kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy spec: targetRef: group: "" kind: Service name: store-v1 default: balancingMode: CUSTOM_METRICS customMetrics: - name: gke.named_metrics.queue_depth_util dryRun: false
请注意,Prometheus 报告的指标遵循不同的命名标准。在报告负载均衡的指标时,GKE 指标代理会以 gke.named_metrics. 为这些指标添加内部前缀,以符合 BackendService API 要求。
如需公开第二个指标,请按照相同的步骤创建另一个自定义资源。
现在,您已向负载均衡器公开了指标,接下来可以配置负载均衡器以使用这些指标。如需了解详情,请参阅将负载均衡器配置为使用自定义指标。
如需详细了解如何使用负载均衡器,请参阅为 GKE 服务配置基于利用率的负载均衡。
排查向负载均衡器公开的指标问题
如需验证指标是否已正确向负载均衡器公开,您可以执行以下操作:
- 验证 GKE 指标代理中的日志。如果在尝试公开指标时出错,日志可能会表明存在错误。如需详细了解如何查找错误,请参阅排查系统指标问题。
- 您可以使用处于试运行模式的负载均衡器来查看其接收的所有指标。如需详细了解如何使用
dryRun标志测试指标,请参阅将负载均衡器配置为使用自定义指标。
后续步骤
- 如需详细了解基于利用率的负载均衡,请参阅基于利用率的 GKE 服务负载平衡器简介。
- 了解如何为 GKE 服务配置基于利用率的负载均衡。