公开负载均衡器的自定义指标

本文档介绍了如何将 Pod 或工作负载中的一个或多个指标发送到负载均衡器。

这些指标来自您运行的服务或应用。例如,请参阅 vLLM Engine 公开的指标

然后,负载均衡器可以将此数据与基于利用率的负载均衡搭配使用,以更高效地平衡工作负载。例如,您可以使用此功能监控工作负载使用量较高的区域,然后允许负载均衡器将流量重定向到资源更充足的区域。在 vLLM 示例中,可用于跟踪利用率的指标是 vllm:gpu_cache_usage_perc

要求

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 与外部直通式网络负载平衡器和外部代理网络负载平衡器搭配使用。

公开负载均衡指标

  1. 选择要公开的指标。您可以选择服务器公开的任何指标,但前提是该指标还必须满足上一部分中列出的要求。此示例使用名为 queue_depth_util 的自定义指标。

  2. 添加以下自定义资源,替换特定于您的指标和 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_NAMEAPP_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 的详细信息。

  3. 使用以下命令应用清单:

    kubectl apply -f FILE_NAME.yaml
    

    FILE_NAME 替换为相应 YAML 文件的名称。

    添加自定义资源后,指标会推送到自动扩缩 API。系统会每隔几秒读取一次该指标,并将其发送到负载平衡器。

  4. 如需将此信号用于负载均衡,请提供 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 标志测试指标,请参阅将负载均衡器配置为使用自定义指标

后续步骤