本文档介绍了如何将 Pod 或工作负载中的一个或多个指标发送到自动扩缩器。
这些指标来自您运行的服务或应用。如需查看公开指标的一个示例,请参阅 vLLM Engine 公开的指标。
然后,工作负载自动调节程序可以使用这些数据更高效地扩缩工作负载。例如,您可以使用此功能来监控队列深度或有效请求,然后允许自动扩缩器增加或减少 Pod 数量。
在 vLLM 示例中,可用于跟踪利用率的指标是 vllm:gpu_cache_usage_perc。
要求
Pod 的要求如下:
- 使用快速渠道提供的 GKE 1.35.1-gke.1396000 版或更高版本。
- 将Pod 横向自动扩缩与性能配置文件搭配使用。
指标的要求如下。
- 指标必须可通过 HTTP 端点访问。端点路径默认为
/metrics。 - 指标的格式必须符合 Prometheus 标准。
- 仅支持指标。
- Pod 标签选择器中的标签名称不得包含特殊字符。仅支持 a-z 字母(小写或大写)、数字、连字符和下划线。
- 使用基于指标标签的过滤时,标签键必须与正则表达式
^[a-zA-Z_][a-zA-Z0-9_]*相匹配(以字母或下划线开头,并且仅包含字母、数字或下划线)。 - 每个集群最多可公开 20 个唯一指标。
公开自动扩缩指标
选择要公开的指标。您可以选择工作负载公开的任何指标,前提是该指标还需满足上一部分中列出的要求。
如果您的工作负载公开了多个名称相同但标签不同的指标,请添加标签过滤条件,以确保仅选择一个指标。
添加以下自定义资源,替换特定于您的指标和 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替换以下内容以与您的工作负载相符:
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 公开的指标名称不符合自动扩缩器设置的名称限制。如需详细了解名称限制,请参阅 Pod 横向自动扩缩的限制。
使用以下命令应用清单:
kubectl apply -f FILE_NAME_AUTOSCALING_METRIC.yaml将
FILE_NAME_AUTOSCALING_METRIC替换为 YAML 文件的名称。添加自定义资源后,指标会推送到自动扩缩 API。系统每隔几秒读取一次该指标,并将其发送给工作负载自动扩缩器。
现在,您已将指标公开给自动扩缩器,接下来可以配置工作负载自动扩缩器以使用这些指标。 为此,请添加以下自定义资源:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: NAME_HPA namespace: NAMESPACE spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: DEPLOYMENT minReplicas: MIN_REPLICAS maxReplicas: MAX_REPLICAS metrics: - type: Pods pods: metric: name: autoscaling.gke.io|NAME|METRIC target: type: AverageValue averageValue: AVERAGE_VALUE替换以下内容以与您的工作负载相符:
NAME_HPA:HorizontalPodAutoscaler对象的名称。NAMESPACE:Pod 所在的命名空间。DEPLOYMENT:您要定位的部署的名称。MIN_REPLICAS:部署可扩缩到的副本数下限。MAX_REPLICAS:部署可扩缩到的副本数上限。NAME:AutoscalingMetric 对象的名称。METRIC:您要公开的指标的名称。AVERAGE_VALUE:相应指标的目标平均值。自动扩缩器会调整副本数量,以使所有 Pod 的平均指标值保持在目标值。
使用以下命令应用清单:
kubectl apply -f FILE_NAME_HPA.yaml将
FILE_NAME_HPA替换为 YAML 文件的名称。
使用指标标签过滤指标
在 GKE 1.36.0-gke.1759000 或更高版本中,可以使用指标标签过滤指标。
指标通常包含标签。标签是键值对,可用于为值添加维度。例如,一个按方法和环境细分的 HTTP 端点请求数指标可以使用标签来指定此上下文。此示例可能如下所示:
http_requests_total{method="GET", env="prod"} 11111
http_requests_total{method="PUT", env="staging"} 22222
您可以使用标签过滤条件来确保指标规范与某个指标完全匹配。例如,如需仅选择上例中的第一个指标,请为 AutoscalingMetric gauge 指标使用以下规范:
apiVersion: autoscaling.gke.io/v1beta1
kind: AutoscalingMetric
metadata:
name: filter-sample
spec:
# Several lines are omitted here.
metrics:
- gauge:
name: http_requests_total
filter:
matchLabels:
method: GET
env: prod
matchLabels 键值对的键必须与正则表达式 ^[a-zA-Z_][a-zA-Z0-9_]* 匹配:也就是说,以字母或下划线开头,并且仅包含字母、数字或下划线。
排查为自动扩缩公开的指标
您可以查看 AutoscalingMetric 自定义资源的状态,以查找配置错误。为此,请执行以下操作:
运行以下命令,检查 AutoscalingMetric 自定义资源:
kubectl describe autoscalingmetric NAME -n NAMESPACE查看
Status字段,了解有关已配置指标的信息,例如有关配置错误的警告,以及指标应在HorizontalPodAutoscaler对象中显示的准确名称。
后续步骤
- 如需详细了解如何根据指标自动扩缩工作负载,请参阅关于根据指标自动扩缩工作负载。
- 了解如何配置 Pod 横向自动扩缩。
- 如需详细了解如何排查横向自动扩缩问题,请参阅排查 Pod 横向自动扩缩问题。