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

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

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

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

要求

Pod 的要求如下:

指标的要求如下。

  • 指标必须可通过 Gateway 负载均衡的 Pod 下的 HTTP 端点访问。默认端点路径为 /metrics
  • 指标的格式必须符合 Prometheus 标准
  • 负载平衡器对指标名称有限制。例如,名称不得超过 64 个字符。如需查看完整的限制列表,请参阅 有关字段 backends[].customMetrics[].nameBackendService 的 API 参考文档中的详细信息。

    如果服务的指标不符合这些限制,您可以使用 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 控制器与 Gateway API 进行交互。 Service 和 Ingress API 不支持将 UBB 与自定义指标搭配使用。自定义指标必须源自属于服务的 Pod。
  • 无 Cloud Service Mesh: 您无法将 UBB 与 Cloud Service Mesh 搭配使用自定义指标。
  • 不支持的负载平衡器: 您无法将 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 公开的指标名称不符合负载均衡器设置的名称限制。

      如需查看完整的限制列表,请参阅 有关字段 backends[].customMetrics[].nameBackendService 的 API 参考文档中的详细信息。

  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 标志进行测试,请参阅 将负载均衡器配置为使用自定义指标

后续步骤