- 文档首页
容器服务
容器服务 VKE
用户指南
弹性伸缩
工作负载弹性伸缩
指标伸缩(HPA)
使用自定义指标实现弹性伸缩
使用自定义指标实现弹性伸缩
本文主要介绍创建指标伸缩时,通过 YAML 方式定义 HPA(Horizontal Pod Autoscaler,水平 Pod 弹性伸缩)的自定义指标,并进行弹性伸缩的操作步骤。
背景信息
基本概念
默认情况下,HPA (Horizontal Pod Autoscaler,水平 Pod 弹性伸缩)只支持基于 CPU 和内存的自动扩缩容,并不能满足复杂业务的诉求。通过在集群中开启云原生观测接入,可以监控、采集和查询集群中组件的各项指标。配合 prometheus-adapter 组件即可通过这些指标实现工作负载的自动扩缩容,使得业务负载可以更好地按需扩展,保证稳定性并平衡成本。
使用自定义指标进行弹性伸缩主要分为三个步骤:
- 在 VKE 集群中开启云原生观测,采集并透出指标。支持按需采集指标,详情请参见 基础观测。
- 配置原始指标与自定义指标间的映射关系,通过 prometheus-adapter 实现两者的映射。
- 配置 HPA,使用自定义指标实现工作负载自动扩缩容。
指标映射
默认情况下,系统中的 HPA 组件无法识别托管 Prometheus 中采集到的原始指标。因此,需要使用 prometheus-adapter 组件进行指标映射,将托管 Prometheus 中的原始指标映射为自定义指标,然后 HPA 组件才能识别和使用。
prometheus-adapter 组件安装完成后,会在集群的kube-system命名空间下新增配置项prometheus-adapter-config,用于记录预置的指标映射关系,配置项中的参数样式如下所示:
映射配置中的参数说明,如下表所示。
注意
为了避免 prometheus-adapter 查询的指标量过大,seriesQuery和metricsQuery建议配置过滤标签。同时,由于托管 Prometheus 的工作区可以对接多个集群,因此为查询参数配置标签时务必添加集群标签。
配置自定义指标后,您可以通过kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta2/" | jq .命令查看自定义指标。
您可以通过kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta2/namespaces/kube-system/pods/*/k8s_pod_network_receive_throughput" | jq .查询kube-system命名空间下所有 Pod 的入带宽指标。
前提条件
说明
请将 prometheus-adapter 组件升级至 v1.1.0 及以上版本。如使用旧版本,则需要确保安装 prometheus-adapter 组件时配置的托管 Prometheus 工作区与集群绑定的托管 Prometheus 工作区一致。否则 prometheus-adapter 组件将无法正常转换数据。
- (可选)使用 kubectl 连接目标集群,详情请参见 连接集群。
步骤一:创建自定义指标并配置映射
- 在集群管理页面的左侧导航栏中,选择 配置管理 > 配置项,在kube-system命名空间下找到prometheus-adapter-config配置项,在 操作 栏中单击 编辑 Yaml,增加自定义指标的映射关系,本文以container_network_receive_bytes_total指标为例,自定义指标名称为k8s_pod_network_receive_throughput。
步骤二:使用自定义指标配置 HPA
- 创建工作负载。本示例以创建无状态负载(Deployment)为例。
- 创建与工作负载关联的 HPA,指定按照自定义指标进行弹性伸缩。其中:
- metrics.pods.metric.name为上文中配置的自定义指标名称,即k8s_pod_network_receive_throughput。
- metrics.pods.target.type指定为AverageValue类型。
- metrics.pods.target.averageValue指定为触发扩容行为的阈值。
结果验证
- 当 Pod 自定义指标达到阈值后会触发扩容,通过如下命令查看 HPA 信息。
- 预期返回结果如下,Deployment 的副本数扩容到 2。
- 当 Pod 自定义指标的使用率下降到阈值以下会触发缩容,通过如下命令查看 HPA 信息。
- 预期返回结果如下,Deployment 的副本数缩容到 1。
最近更新时间:2026.04.01 17:14:09