最近更新时间:2024.02.29 10:33:30
首次发布时间:2022.12.30 19:03:45
本文主要介绍创建指标伸缩时,通过 YAML 方式定义 HPA(Horizontal Pod Autoscaler,水平 Pod 弹性伸缩)的 GPU 指标,并进行弹性伸缩的操作步骤。
注意
请确保安装 prometheus-adapter 组件和安装 prometheus-agent 组件时配置的工作区一致。否则 prometheus-adapter 组件将无法正常转换数据。
目前支持使用如下三种指标,对应用进行弹性伸缩。
指标名 | 含义 | 单位 |
---|---|---|
k8s_pod_gpu_memory_used | Pod GPU 显存使用量。 | MiB |
k8s_pod_rate_gpu_memory_used | Pod GPU 显存使用率。 | % |
k8s_pod_rate_gpu_used | Pod 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 版本,结合您自身业务使用弹性伸缩的期望,合理控制工作负载的弹性伸缩行为。