You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
指标伸缩(HPA)
使用 GPU 和网络指标实现弹性伸缩
复制全文
下载 pdf
使用 GPU 和网络指标实现弹性伸缩
除 Kubernets 原生支持的 CPU 和内存指标外,容器服务还为您预置了 GPU 和网络指标映射规则,允许通过容器的 GPU 指标或网络指标实现弹性伸缩。本文介绍如何配置基于 GPU 或网络指标的弹性伸缩。
背景信息
基本概念
默认情况下,HPA (Horizontal Pod Autoscaler,水平 Pod 弹性伸缩)只支持基于 CPU 和内存的自动扩缩容,并不能满足复杂业务的诉求。在实际生产业务中,用户常常希望通过 Pod 的 GPU 负载或网络流量来触发扩容和缩容。
容器服务提供 prometheus-adapter 组件,支持将原生 Prometheus 指标转化成自定义指标 API 的格式,同时在组件中预置了 GPU 指标和网络指标的转化规则。当您在集群中开启 云原生观测 功能后,能够基于采集的容器 GPU 指标和网络指标,实现工作负载的自动扩缩容,使得业务负载可以更好地按需扩展,保证稳定性并平衡成本。
使用 GPU 和网络指标进行弹性伸缩,主要步骤如下:
  1. 在集群中安装 prometheus-adapter 组件。
  1. 在集群中开启云原生观测,采集相关指标。详情请参见 开启观测基础观测
  1. 配置 HPA,使用 GPU 或网络指标实现工作负载自动扩缩容。
指标说明
容器服务支持基于工作负载的 GPU 和网络指标实现弹性伸缩,预置指标如下表所示。
监控指标
指标名称
单位
GPU 使用率
k8s_pod_rate_gpu_used
%
GPU 显存使用率
k8s_pod_rate_gpu_memory_used
%
GPU 显存量
k8s_pod_gpu_memory_used
MiB
网络入吞吐率
k8s_pod_network_receive_throughput
%
网络出吞吐率
k8s_pod_network_transmit_throughput
%
说明
  • 您可以在集群kube-system命名空间中,查看prometheus-adapter-config配置项,确认系统中的预置指标名称,以及该指标名称对应的 Prometheus 原始指标。
使用限制
  • HPA 配置多种指标时,会分别基于每种指标计算,并取最大值作为最终结果。
  • 指标伸缩仅支持配置无状态负载(Deployment)、有状态负载(Statefulset)和自定义资源(CRD)。
  • 使用 GPU 指标实现弹性伸缩时,目前仅支持普通 GPU Pod 的 HPA 能力,暂不支持 mGPU Pod。
前提条件
  • 已开启云原生观测。详情请参见 开启观测
  • 使用 kubectl 连接目标集群。详情请参见 连接集群
  • 已安装 nvidia-device-plugin 组件,且 部署插件 必须勾选 安装 dcgm-exporter。详情请参见 nvidia-device-plugin
  • 已安装 prometheus-agent 组件,且 部署插件 必须勾选 安装 node-exporter。详情请参见 prometheus-agent
通过控制台配置
  1. 单击左侧导航栏中的 集群
  1. 在集群列表页面,单击需要配置的目标集群。
  1. 在集群管理页面的左侧导航栏中,选择 弹性伸缩 > 指标伸缩,单击 创建指标伸缩,配置指标伸缩。
  • 基本信息
  • 配置项
    说明
    名称
    根据系统提示,配置指标伸缩策略的名称。在同一个命名空间下,名称必须唯一。
    命名空间
    选择伸缩策略所属的命名空间。建议选择您自定义的命名空间或系统默认创建的 default 命名空间。命名空间相关介绍,请参见 命名空间概述
    标签
    对应 Kubernetes 中的 Label,用于指定该伸缩策略的标识属性。单击 添加标签,根据界面提示输入符合要求的
    注解
    对应 Kubernetes 中的 Annotation,用于为伸缩策略附加任意非标识的元数据,包括 标签 不允许的字符,方便客户端能够检索此元数据。单击 添加注解,根据界面提示输入符合要求的
  • 伸缩策略
  • alt
  • 配置项
    说明
    伸缩对象
    配置伸缩对象。当前支持 无状态负载有状态负载自定义资源。指定伸缩对象后,在后面的下拉菜单中选择具体的对象实例。
    监测指标
    配置伸缩的监测指标,系统基于此指标决定是否需要进行伸缩。容器服务中支持的 GPU 和网络指标包括:
    • GPU 使用率:按所有 Pod 实例 GPU 平均使用率,作为监测指标,当 GPU 使用率达到该值,则进行伸缩。
    • GPU 显存使用率:按所有 Pod 实例共享 GPU 显存使用量 / 所有 Pod 实例共享 GPU 显存请求(Request)量的百分比,作为监测指标,当 GPU 显存使用率达到该值,则进行伸缩。
    • GPU 显存量:按所有 Pod 实例共享 GPU 显存使用量,作为监测指标,当 GPU 显存量达到该值,则进行伸缩。
    • 网络入吞吐率:按工作负载中所有 Pod 实例下所有容器的入方向带宽之和,作为监测指标,当网络入吞吐率达到该值,则进行伸缩。
    • 网络出吞吐率:按工作负载中所有 Pod 实例下所有容器的出方向带宽之和,作为监测指标,当网络出吞吐率达到该值,则进行伸缩。
    说明
    • 一个 HPA 伸缩规则里,不能同时设置两个相同种类的伸缩指标。
    • 目前最多支持添加两个监测指标。
    • 使用 CPU 和内存指标配置弹性伸缩的方法,请参见 创建指标伸缩
    最小实例数
    配置伸缩时的最小实例数和最大实例数。策略触发时,工作负载实例将在此范围内伸缩。
    最大实例数
  • 伸缩规则
  • alt
  • 配置项
    说明
    扩缩容策略
    配置工作负载的扩缩容行为,勾选 扩容策略缩容策略,分别配置扩容策略行为和缩容策略行为。
    静默时间
    扩容策略或缩容策略的静默时间,整数形式,单位为秒。
    系统完成扩缩容后,在静默时间内,不会再次执行扩缩容策略,避免工作负载副本数频繁变更造成系统震荡。
    策略类型
    配置策略类型,包括:
    • 最大值:执行影响 Pod 数量最大的策略。
    • 最小值:执行影响 Pod 数量最小的策略。
    • 禁用:禁用该扩容策略或缩容策略。
    策略
    配置扩缩容的具体策略行为,包括:
    • 类型:配置扩缩容策略行为的类型。
    • 容器组:基于 Pod 数量执行扩缩容。
    • 百分比:基于 Pod 百分比执行扩缩容。
    • 阈值:配置扩缩容行为的阈值,与 类型 配合使用。例如:当 类型 配置为 容器组,阈值配置为 10 时,表示在 时间间隔 内扩容或缩容 10 个副本。
    • 时间间隔:配置扩缩容速率,整数形式,取值范围为 1~1800,单位为秒。
  1. 单击 确定,完成配置。
通过 kubectl 命令行配置
使用如下代码示例,创建与伸缩对象关联的 HPA,并指定按照 GPU 进行弹性伸缩。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: gpu-hpa # 指标伸缩名称
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment # 指标伸缩的对象类型,支持 Deployment、StatefulSet 和 CustomResourceDefinition
name: deployment-demo # 指定指标伸缩的具体对象实例
minReplicas: 1 # 配置 HPA 的最小实例数
maxReplicas: 10 # 配置 HPA 的最大实例数
metrics:
- type: Pods
pods:
metric:
name: k8s_pod_rate_gpu_used # 配置 HPA 的触发指标,本例中配置为 Pod 的 GPU 利用率
target:
averageValue: 20 # 当 GPU 利用率超过 20%,触发扩容
type: AverageValue
结果验证
查看配置
在集群管理页面的左侧导航栏中,选择 弹性伸缩 > 指标伸缩,查看已配置的弹性伸缩规则。
伸缩验证
  1. 当 Pod GPU 使用率增加后会触发扩容,此时可通过如下命令查看 HPA 信息。
  • kubectl get hpa
  • 预期返回结果如下,Deployment 的副本数扩容到 2。
  • NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
    gpu-hpa Deployment/example-gpu-workload 23/20 1 10 2 62s
  1. 当 Pod GPU 使用率下降到指定值以下会触发缩容,此时可通过如下命令查看 HPA 信息。
  • kubectl get hpa
  • 预期返回结果如下,Deployment 的副本数缩容到 1。
  • NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
    gpu-hpa Deployment/example-gpu-workload 0/20 1 10 1 15m
参考信息
不同版本的 HPA 资源对于扩缩容行为有不同粒度的控制能力。详细说明,请参见 开源社区文档
您可参考官方文档,根据使用容器服务创建的集群 Kubernetes 版本,结合您自身业务使用弹性伸缩的期望,合理控制工作负载的弹性伸缩行为。
最近更新时间:2026.02.04 16:34:16
这个页面对您有帮助吗?
有用
有用
无用
无用