除 Kubernets 原生支持的 CPU 和内存指标外,容器服务还为您预置了 GPU 和网络指标映射规则,允许通过容器的 GPU 指标或网络指标实现弹性伸缩。本文介绍如何配置基于 GPU 或网络指标的弹性伸缩。
说明
【邀测·申请试用】:该功能目前处于邀测阶段,如需使用,请提交申请。
默认情况下,HPA (Horizontal Pod Autoscaler,水平 Pod 弹性伸缩)只支持基于 CPU 和内存的自动扩缩容,并不能满足复杂业务的诉求。在实际生产业务中,用户常常希望通过 Pod 的 GPU 负载或网络流量来触发扩容和缩容。
容器服务提供 prometheus-adapter 组件,支持将原生 Prometheus 指标转化成自定义指标 API 的格式,同时在组件中预置了 GPU 指标和网络指标的转化规则。当您在集群中开启 云原生观测 功能后,能够基于采集的容器 GPU 指标和网络指标,实现工作负载的自动扩缩容,使得业务负载可以更好地按需扩展,保证稳定性并平衡成本。
使用 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 原始指标。配置项 | 说明 |
---|---|
名称 | 根据系统提示,配置指标伸缩策略的名称。在同一个命名空间下,名称必须唯一。 |
命名空间 | 选择伸缩策略所属的命名空间。建议选择您自定义的命名空间或系统默认创建的 default 命名空间。命名空间相关介绍,请参见 命名空间概述。 |
标签 | 对应 Kubernetes 中的 Label,用于指定该伸缩策略的标识属性。单击 添加标签,根据界面提示输入符合要求的 键 和 值。 |
注解 | 对应 Kubernetes 中的 Annotation,用于为伸缩策略附加任意非标识的元数据,包括 标签 不允许的字符,方便客户端能够检索此元数据。单击 添加注解,根据界面提示输入符合要求的 键 和 值。 |
配置项 | 说明 |
---|---|
伸缩对象 | 配置需要伸缩的工作负载。在下拉菜单中选择工作负载的类型和具体的工作负载。 |
监测指标 | 配置伸缩的监测指标,系统基于此指标决定是否需要进行伸缩。容器服务中支持的 GPU 和网络指标包括:
说明
|
最小实例数 | 配置伸缩时的最小实例数和最大实例数。策略触发时,工作负载实例将在此范围内伸缩。 |
最大实例数 |
配置项 | 说明 |
---|---|
扩缩容策略 | 配置工作负载的扩缩容行为,勾选 扩容策略 或 缩容策略,分别配置扩容策略行为和缩容策略行为。 |
静默时间 | 扩容策略或缩容策略的静默时间,整数形式,单位为秒。 |
策略类型 | 配置策略类型,包括:
|
策略 | 配置扩缩容的具体策略行为,包括:
|
apiVersion: apps/v1 kind: Deployment metadata: name: example-gpu-workload # 工作负载名称。 spec: replicas: 1 selector: matchLabels: app: example-gpu-workload template: metadata: labels: app: example-gpu-workload spec: containers: - name: workload image: example-gpu-workload resources: limits: nvidia.com/gpu: 1 # GPU 显卡数量。
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: gpu-hpa # 指标伸缩名称。 spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: example-gpu-workload # 指定指标伸缩的工作负载对象。 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
预期返回结果如下,Deployment 的副本数扩容到 2:kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE gpu-hpa Deployment/example-gpu-workload 23/20 1 10 2 62s
预期返回结果如下,Deployment 的副本数缩容到 1:kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE gpu-hpa Deployment/example-gpu-workload 0/20 1 10 1 15m
不同版本的 HPA 资源对于扩缩容行为有不同粒度的控制能力。详细说明,请参见 开源社区文档。
您可参考官方文档,根据使用容器服务创建的集群 Kubernetes 版本,结合您自身业务使用弹性伸缩的期望,合理控制工作负载的弹性伸缩行为。