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,会让利用率的分母不断变化、副本数随之被带动,实践中通常只保留一个自动方案。