首页/云/Kubernetes 速查/VPA:垂直调整资源请求
调度与资源52 条

VPA:垂直调整资源请求

VerticalPodAutoscaler 依据历史用量给出 requests 建议并可自动写回;适合难估资源的稳定服务,与 HPA 的 CPU 指标同时使用会互相干扰。

Kubernetes 速查云更新于 2026-10-13

VPA 用历史用量调 requests

VerticalPodAutoscaler 观察负载的历史资源用量,给出 requests 与 limits 的建议值,并按更新模式决定是否自动写回。它解决的是「给多少资源合适」的问题,适合长期稳定运行、资源画像不好估的服务。自动模式下调整 requests 通常伴随 Pod 重建,因此对中断敏感的服务先用只出建议的模式观察一段时间,确认建议稳定后再考虑开启自动调整。

基本信息

适用对象以 CRD 形式安装的 VerticalPodAutoscaler(autoscaling.k8s.io 组)
关键字段targetRef 指向目标工作负载,updatePolicy.updateMode 决定是否自动写回
常见更新模式Off(只出建议)、Initial(仅创建时应用)、Recreate(自动调整并重建)
查看建议kubectl get vpa -o yaml,读取 status.recommendation
已知冲突与按 CPU 指标的 HPA 同时自动调整会互相干扰

典型使用场景

  • 资源画像难估的服务:长期观察后给出比人工拍数更接近实际的 requests
  • 容量治理:把明显偏大或偏小的 requests 回归到合理区间
  • 上线观察期:先用 Off 模式收集建议,再据此修订清单
  • 成本优化:在保证稳定性的前提下压缩长期闲置的资源声明
  • 疑难件排查:判断某负载究竟是资源不足还是代码问题

VPA 示例

VPA 示例
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: api-vpa
  namespace: prod
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: api
  updatePolicy:
    updateMode: "Off"        # 先只出建议,不自动改工作负载

看建议值

看建议值
kubectl get vpa api-vpa -n prod
kubectl get vpa api-vpa -n prod -o jsonpath='{.status.recommendation.containerRecommendations}'
kubectl describe vpa api-vpa -n prod | tail -20
kubectl top pod -l app=api -n prod --containers        # 与真实用量对照

更新模式与适用

更新模式行为适用
Off只产出建议,不修改工作负载观察期与人工审批
Initial仅在 Pod 创建时应用建议不希望运行中被重建的负载
Recreate自动调整并重建 Pod可以接受重建的在线服务
与 HPA 组合需要错开指标同时自动会互相牵动,建议只保留一个
建议先在 Off 模式下运行一到两周,用 status 里的建议值校准清单,再决定是否开启自动调整:观察期数据太少时给出的建议波动往往较大。
同一负载同时使用按 CPU 的 HPA 与自动调整的 VPA,会让利用率的分母不断变化、副本数随之被带动,实践中通常只保留一个自动方案。

易错点

  • 直接开启自动模式:Pod 被反复重建,长连接业务出现周期性抖动,问题现象与资源无关
  • 与按 CPU 的 HPA 同时自动调整:副本与请求互相牵动,扩缩容动作难以解释
  • 只看建议值不看长期趋势:偶发高峰被计入建议,requests 被抬高后挤占节点可分配资源
  • 目标选择器或命名空间写错:VPA 对象存在但 status 里长期没有建议,容易被误判为组件故障

数据来源与参考

  • Kubernetes 社区项目文档 · Vertical Pod Autoscaler
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌