服务器K8s VPA配置实战:从安装到验证的完整教程

在Kubernetes集群中,手动调整Pod的CPU和内存请求往往滞后且容易出错。
VPA(Vertical Pod Autoscaler)能根据历史负载自动推荐或更新Pod的资源请求,让资源分配更贴近实际用量。
这篇教程会带你从零完成服务器K8s VPA配置,每一步都给出可执行的命令和验证方法。

部署前需要确认的环境条件

VPA依赖Metrics Server提供Pod资源指标,所以第一件事是确认Metrics Server已经正常运行。
用下面的命令检查:

kubectl top nodes
kubectl top pods -A

如果提示 error: Metrics API not available,说明Metrics Server未安装或未就绪。
先安装Metrics Server再继续。
同时确认你的Kubernetes版本,VPA对1.21及以上版本支持较好,老版本可能需要调整API版本。
另外,确保你有集群管理员权限,因为安装VPA需要创建CRD和RBAC资源。

安装VPA组件与自定义资源

VPA的官方仓库在GitHub上,推荐用git clone获取最新稳定版清单。

git clone https://github.com/kubernetes/autoscaler.git
cd autoscaler/vertical-pod-autoscaler

进入目录后,执行安装脚本:

./hack/vpa-up.sh

这个脚本会创建CustomResourceDefinition、ServiceAccount、RBAC以及三个核心组件:vpa-admission-controller、vpa-recommender、vpa-updater。
安装完成后,用以下命令验证Pod是否全部Running:

kubectl get pods -n kube-system | grep vpa

如果看到三个Pod处于Running状态,说明组件安装成功。

为工作负载创建VPA对象

VPA通过自定义资源VerticalPodAutoscaler来定义目标负载和更新策略。
下面是一个针对Deployment的示例,保存为vpa-demo.yaml:

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: my-app-vpa
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  updatePolicy:
    updateMode: "Auto"

updateMode支持四种模式:Off只推荐不更新、Initial只在Pod创建时设置、Auto自动更新运行中的Pod、Recreate重建Pod以应用新资源。
生产环境建议先用Off观察推荐值,确认无误后再切换。
应用配置:

kubectl apply -f vpa-demo.yaml

验证VPA推荐值与更新效果

创建VPA后,等待几分钟让推荐器收集数据,然后查看推荐结果:

kubectl describe vpa my-app-vpa

关注Status部分的Recommendation,它会给出Target、Lower Bound和Upper Bound三个资源建议值。
如果updateMode是Auto,VPA会逐步驱逐Pod并重建,使新Pod使用推荐值。
你可以用以下命令观察Pod资源变化:

kubectl get pods -l app=my-app -o jsonpath='{.items[*].spec.containers[*].resources}'

如果VPA没有产生推荐值,检查vpa-recommender的日志:

kubectl logs -n kube-system -l app=vpa-recommender

常见原因是Metrics Server未返回数据或目标负载没有历史指标。

避坑与常见报错处理

VPA与HPA不要同时作用于CPU:如果水平扩缩容(HPA)也基于CPU指标,VPA的调整可能引发冲突。
建议VPA主要管理内存,HPA管理CPU,或明确划分职责。

更新模式选择要谨慎:Auto模式会主动驱逐Pod,对可用性敏感的服务应配合PodDisruptionBudget使用,避免同时驱逐过多副本。

资源请求不能为零:VPA需要初始的资源请求作为计算基础,如果Deployment中未设置resources.requests,推荐器可能无法给出有效建议。

CRD版本兼容性:不同Kubernetes版本对应的VPA API版本不同,v1是较新的稳定版,若集群较老,可能需要改用autoscaling.k8s.io/v1beta2。

卸载VPA:如果不再需要,用./hack/vpa-down.sh清理组件,但已创建的VPA对象和CRD需要手动删除,否则残留资源可能影响后续操作。

检查配置是否真正生效

最后做一次完整验证:确认Metrics Server数据正常、VPA组件健康、目标负载的VPA状态中有推荐值。
如果使用Auto模式,观察一到两个更新周期后,Pod的资源请求是否已调整为推荐值。
你可以通过kubectl top pods对比实际用量与请求值,判断VPA是否在按预期工作。

服务器K8s VPA配置的关键在于先让指标管道畅通,再根据业务容忍度选择更新模式。
初次部署建议从Off模式开始,积累几天推荐数据后再决定是否开启自动更新。
这样既能获得资源优化,又不会因为突然的Pod重建影响服务稳定性。

常见疑问

VPA会立即调整资源吗? 不会。
推荐器需要收集一段时间的指标才会产生建议,通常需要数分钟到数小时,取决于负载波动情况。

VPA和HPA可以一起用吗? 可以,但建议VPA管理内存,HPA管理CPU,避免两者对同一指标做出矛盾决策。

为什么VPA推荐值一直是空? 检查Metrics Server是否正常,以及目标负载是否设置了初始资源请求。
没有历史指标时推荐器无法计算。

VPA更新Pod时会中断服务吗? Auto模式下VPA会驱逐Pod,如果副本数大于1且配置了PodDisruptionBudget,可以控制中断范围。
单副本服务需谨慎使用。

分享到:
上一篇
K8s污点与容忍怎么配:让Pod避开特定节点的实操方法
下一篇
服务器Docker安全扫描:从安装到验证的实操指南
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意