K8s HPA 弹性伸缩:基于自定义 PromQL 指标驱动推理副本扩缩

发布时间:2026/11/3 2:56:11
K8s HPA 弹性伸缩:基于自定义 PromQL 指标驱动推理副本扩缩 K8s HPA 弹性伸缩基于自定义 PromQL 指标驱动推理副本扩缩在 KubernetesK8s集群中管理常规 Web 微服务的弹性伸缩通常非常简单配置一个基于 CPU 利用率或内存使用率如CPU 80%的HPAHorizontal Pod Autoscaler水平 Pod 自动扩缩器即可平稳运行。然而当我们要对托管私有化大模型如 vLLM、Triton、Ollama或重型 Agent 服务的 Pod 进行自动伸缩时默认的 CPU/内存指标会彻底失效GPU 推理服务的“假饱和”现象当模型加载进显存后无论是否有请求正在处理GPU 显存占用始终维持在 95% 以上被模型权重和 KV Cache 预分配占满而 GPU 核心算力GPU Utilization在处理 Prefill 阶段会瞬间拉满但在等待网络 IO 时又会突然跌到 0%。基于这种剧烈波动的指标做 HPA会导致 Pod 疯狂地扩容、缩容、再扩容引发集群剧烈颠簸Thrashing推理冷启动时间过长一个 14B 参数的模型从拉取镜像、分配 GPU 到加载权重进显存冷启动耗时通常需要 30 到 90 秒。如果等到 CPU 达到 80% 才开始扩容新 Pod 还没准备好现有的旧 Pod 早已被排队请求彻底压垮。如何通过Prometheus Adapter 自定义业务指标如当前请求排队队列深度、并发请求数、KV Cache 使用率构建灵敏、平滑的 AI 推理 HPA 架构一、AI 推理服务三大核心扩缩容黄金指标┌────────────────────────────────────────────────────────┐ │ 指标 1: 推理排队请求数 (vllm:num_requests_waiting) │ │ 意义最灵敏的扩容前瞻信号只要等待队列 5立即触发扩容│ ├────────────────────────────────────────────────────────┤ │ 指标 2: 活跃并发请求数 (vllm:num_requests_running) │ │ 意义反映当前每张 GPU 正在处理的负载饱和度 │ ├────────────────────────────────────────────────────────┤ │ 指标 3: KV Cache 显存占用率 (vllm:gpu_cache_usage_perc)│ │ 意义当 KV Cache 85% 时说明即将发生请求降级或截断 │ └────────────────────────────────────────────────────────┘二、基于 Prometheus Adapter 导出自定义 K8s 外部指标1. 配置 Prometheus Adapter ConfigMap将 Prometheus 中的 vLLM 业务指标转换为 K8s Custom Metrics APIapiVersion: v1 kind: ConfigMap metadata: name: adapter-config namespace: custom-metrics data: config.yaml: | rules: - seriesQuery: vllm:num_requests_waiting{namespace!,pod!} resources: overrides: namespace: {resource: namespace} pod: {resource: pod} name: matches: vllm:num_requests_waiting as: vllm_waiting_requests_per_pod metricsQuery: sum(.Series{.LabelMatchers}) by (.GroupBy)三、生产级 HPA YAML 声明实操在业务 Namespace 中创建 HPA 资源配置基于自定义指标的伸缩规则并加入防抖动冷却窗口Behavior Stabilization WindowapiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: vllm-inference-hpa namespace: ai-workload spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: vllm-qwen-14b minReplicas: 2 # 保底 2 副本支撑常态流量 maxReplicas: 8 # 最大允许扩容到 8 副本 (受 GPU 物理总卡数限制) metrics: # 核心指标当每个 Pod 平均等待排队请求数超过 4 个时触发扩容 - type: Pods pods: metric: name: vllm_waiting_requests_per_pod target: type: AverageValue averageValue: 4 # 行为控制快速扩容平稳慢速缩容关键 behavior: scaleUp: stabilizationWindowSeconds: 0 # 扩容无需等待0 秒瞬间响应突发流量 policies: - type: Percent value: 100 # 允许瞬间翻倍扩容 periodSeconds: 15 scaleDown: stabilizationWindowSeconds: 300 # 缩容必须经历 5 分钟的稳定观察期防止缩容后再次突发引发冷启动 policies: - type: Pods value: 1 # 每次最多只缩容 1 个 Pod periodSeconds: 60四、生产避坑与最佳实践预拉取镜像与节点预热Image Pre-pulling大模型镜像体量通常在 10GB~20GB 之间。必须在所有 GPU 物理节点上通过 DaemonSet 预先拉取镜像或使用远程分布式镜像加速方案将冷启动耗时从 3 分钟压缩至 20 秒以内。GPU 节点弹性联动K8s Cluster Autoscaler当 HPA 决定将 Pod 从 2 扩容到 4 时如果集群里没有空闲的 GPU 物理机Pod 会进入Pending状态。必须将 HPA 与云厂商的 Cluster Autoscaler 打通实现“HPA 扩 Pod - 触发云平台分钟级弹出 GPU 物理云主机”。告别粗放的 CPU 监控下沉到模型推理引擎底层的排队与显存指标才能构建出既能秒级抗住突发流量、又能在夜间平稳缩容省钱的企业级 AI 弹性算力平台。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询