Pod 水平扩缩容支持自定义指标,需通过 Prometheus 等监控系统与适配器将指标暴露至 custom.metrics.k8s.io API,HPA 依据如 QPS、队列长度等业务指标调整副本数,配置时在 metrics 字段指定指标名称与目标值,实现精准弹性伸缩。

Kubernetes 的 Pod 水平扩缩容(Horizontal Pod Autoscaler,简称 HPA)可以根据工作负载的实际资源使用情况自动调整 Pod 的副本数量。除了 CPU 和内存这类默认指标外,HPA 还支持使用自定义指标(Custom Metrics)进行扩缩容决策,这就是所谓的“Pod 水平扩缩容自定义指标”。
自定义指标允许你基于应用特有的业务或性能数据来触发扩缩容,比如每秒请求数(QPS)、消息队列长度、订单处理速率等,从而更精准地响应真实负载变化。
自定义指标的工作原理
HPA 通过 Kubernetes 的 metrics API 获取指标数据。对于自定义指标,需要有相应的监控系统(如 Prometheus)配合适配器(如 Prometheus Adapter)将指标暴露给 Kubernetes 集群。
- 自定义指标由 custom.metrics.k8s.io API 提供
- HPA 配置中引用这些指标,设定目标值(如目标 QPS 为 100)
- 控制器周期性获取指标值,并计算是否需要增加或减少 Pod 副本数
常见的自定义指标类型
你可以使用多种维度的自定义指标来驱动扩缩容:
-
HTTP 请求速率:例如来自 Prometheus 的
http_requests_per_second - 消息队列积压数:如 Kafka 分区未处理消息数量
- 任务队列长度:Celery 或 RabbitMQ 中待处理任务数
- 业务延迟指标:平均响应时间超过阈值时扩容
如何配置自定义指标扩缩容
你需要在 HPA 资源中明确指定使用的自定义指标名称和目标值。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Pods
pods:
metric:
name: http_requests_per_second
target:
type: AverageValue
averageValue: 100
这个配置表示:当每个 Pod 的平均每秒 HTTP 请求达到 100 时,HPA 会自动调整副本数以维持该水平。
实现前提与注意事项
- 集群需部署指标服务器和自定义指标适配器(如 Prometheus + Prometheus Adapter)
- 确保指标命名唯一且可被 HPA 查询到
- 避免使用波动剧烈的指标,可能导致频繁震荡扩缩(thrashing)
- 建议结合多指标(如 CPU + 自定义)做综合判断
基本上就这些。使用自定义指标让 HPA 更贴近实际业务需求,提升资源利用率和用户体验。









