
VPA频繁调整资源靠3个关键配置让Pod推荐值稳定下来【免费下载链接】autoscalerAutoscaling components for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/au/autoscaler用 K8s 的同学大概都遇到过这种情况Vertical Pod AutoscalerVPA刚跑起来推荐值就跟着负载小幅波动来回变Pod 跟着反复重建业务被折腾得够呛。autoscaler 项目里的 vertical-pod-autoscaler 组件本身就是靠持续观察 Pod 用量、再生成推荐值来工作的如果推荐值没有被约束波动会被原封不动地放大。好消息是稳定推荐值只需要动 3 个配置参数minAllowed/maxAllowed、controlledResources、updateMode。理解VPA的推荐链路调整是从哪来的先看图recommender 根据集群里 Pod 的实际用量算出推荐值Recommendation写入 VPA 对象admission 插件在 Pod 创建时把推荐值注入进去updater 则负责已运行 Pod 的更新。理解这条链路能解释一个常见困惑推荐值在变但被 Pod 真正采用是有限额的场景——新 Pod 创建和 Pod 更新时才会用到推荐值。所以频繁的本质是推荐值一直在动而每到一个应用点就会触发一次变化。约束的思路也就清晰了要么让推荐值本身不再乱跳要么让更新动作本身更温和。下面 3 个参数正好分别对应这两个思路。配置minAllowed/maxAllowed给推荐值划出边界resourcePolicy.containerPolicies里的minAllowed和maxAllowed分别给推荐值设下限和上限。推荐值被钳在这个区间内之后CPU、内存用量的小幅抖动只会落在区间内部不会推动推荐值越界自然也就不会触发新的更新。resourcePolicy: containerPolicies: - containerName: * minAllowed: cpu: 500m memory: 200Mi maxAllowed: cpu: 1000m memory: 500Mi定区间有个简单的办法先把观察窗拉长比如取一周的 P95 用量下限贴着常态峰值留一点余量上限按扩容需求再留一档。区间别设得太窄否则推荐值会被顶在下限上失去弹性。用controlledResources收敛VPA的管理范围controlledResources决定 VPA 到底管哪些资源不填时默认是[cpu, memory]两种都管。如果你的 CPU 已经交给 HPA 管副本数了那让 VPA 再动 CPU 请求就是重复管理两个控制器互相拉锯时推荐值最容易不稳定。controlledResources: [memory] # 只让VPA管内存CPU交给HPA另外在containerPolicies里把某个容器的mode设为Off可以针对单个容器彻底关掉推荐适合那些用量稳定、不需要自动化的 sidecar 类容器。选择updateMode让更新动作更温和前两个参数解决推荐值变不变updateMode解决变了之后 Pod 怎么更新常见取值和适用场景updateMode行为适合场景Auto默认能原地更新就原地否则重建通用场景Recreate直接重建 Pod 生效无状态、重建无成本的工作负载InPlaceOrRecreate优先原地更新失败再重建想减少重启、但不能容忍完全不更新的场景Off只出推荐值不执行任何更新先观察推荐值再决策如果你希望尽量不重启 Pod可以选InPlaceOrRecreate它依赖 Kubernetes 的原地垂直更新能力1.33 起进入 beta先尝试原地修改容器资源原地更新失败时才回退到重建 Pod。注意这条路径要求集群 Kubernetes ≥1.33并启用InPlacePodVerticalScalingfeature gateVPA 1.4.0 需要手动开启该 gate1.5.0 起默认开启1.7.0 起 gate 本身被移除。详见 docs/features.md 的 In-Place Updates 一节。排查配置不生效与推荐值异常三个参数配完还不稳定时按这个顺序查先确认 admission 控制器在跑kubectl get pod -n kube-system | grep vpa-admission-controller没有它推荐值就注入不了新 Pod怎么配都没用。推荐值超出你设的区间一般是集群里同时挂了 LimitRange两套策略互相约束会把推荐值顶到边界上先统一资源策略来源。原地更新一直失败回退到重建核对上面第 2 节的版本和 feature gate 要求如果确认条件都满足仍失败暂时切回Recreate也能保证功能正确只是多几次重启。想验证配置是否真正生效kubectl describe vpa可以看当前推荐值是否落在你划定的区间内。把推荐值夹住、把管理范围收拢、把更新方式选对VPA 就能从天天折腾 Pod变成安静的后台工具。觉得有用的话点个赞或收藏一下吧【免费下载链接】autoscalerAutoscaling components for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/au/autoscaler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考