K8S中HPA和VPA
K8S中HPA和VPA
在 Kubernetes 的运维管理中,资源的自动扩缩是一项至关重要的功能。Horizontal Pod Autoscaler (HPA) 和 Vertical Pod Autoscaler (VPA) 是 Kubernetes 提供的两种自动扩缩工具,它们各自有独特的使用场景和优势。
因此对于我们的业务POD来说,弹性伸缩总体上使用如下两种:
Vertical Pod Autoscaler(VPA)
Horizontal-Pod-Autoscaler(HPA)
HPA
什么是HPA
HPA 是 Kubernetes 中的一个资源对象,能够根据预设的指标(如 CPU 使用率、内存使用率等)动态调整 Pod 的数量。当 Pod 的指标超过预设的阈值时,HPA 会自动增加 Pod 的数量以应对负载压力;反之,当负载降低时,HPA 会减少 Pod 的数量以节省资源。
HPA使用场景
HPA 主要适用于那些对负载变化敏感、需要快速响应的应用。例如,在在线购物网站的高峰期,访问量可能会急剧增加,此时可以通过 HPA 自动增加 Web 服务器的 Pod 数量来应对流量压力。
HPA优势
优势
- 灵活性:HPA 可以根据实时负载情况动态调整 Pod 数量,确保应用始终保持最佳性能。
- 易用性:HPA 提供了丰富的配置选项,可以根据不同应用的需求进行定制。
VPA
什么是VPA
与 HPA 不同,VPA 着眼于 Pod 的资源需求(如 CPU、内存等)而不是数量。VPA 通过监控 Pod 的实际资源使用情况,自动调整 Pod 的资源限制和请求,以优化资源利用率。
VPA使用场景
VPA 更适用于那些资源使用相对稳定,但需要精细化管理的应用。例如,某些后台服务可能对 CPU 和内存的需求较为稳定,但初始设置的资源请求和限制可能不够精确。通过使用 VPA,可以根据实际使用情况自动调整资源配置,避免资源浪费或性能瓶颈。
VPA优势
- 资源优化:VPA 可以根据 Pod 的实际使用情况自动调整资源配置,提高资源利用效率。
- 减少维护成本:通过自动调整资源配置,可以减少手动干预的需求,降低维护成本。
VPA原理
VPA架构图
VPA 主要包括两个组件:
- 1)VPA Controller
- Recommendr:给出 pod 资源调整建议
- Updater:对比建议值和当前值,不一致时驱逐 Pod
- 2)VPA Admission Controller
- Pod 重建时将 Pod 的资源请求量修改为推荐值
VPA工作流程
**首先 *Recommender 会*根据应用当前的资源使用情况以及历史的资源使用情况,计算接下来可能的资源使用阈值,如果计算出的值和当前值不一致则会给出一条资源调整建议。
然后 Updater 则根据这些建议进行调整,具体调整方法为:
- 1)Updater 根据建议发现需要调整,然后调用 api 驱逐 Pod
- 2)Pod 被驱逐后就会重建,然后再重建过程中VPA Admission Controller 会进行拦截,根据 Recommend 来调整 Pod 的资源请求量
- 3)最终 Pod 重建出来就是按照推荐资源请求量重建的了。
根据上述流程可知,调整资源请求量需要重建 Pod,这是一个破坏性的操作,所以 VPA 还没有生产就绪。
HPA 与 VPA 的比较
扩缩对象
- HPA 主要针对 Pod 的数量进行扩缩,通过增减 Pod 数量来应对负载变化。
- VPA 则关注 Pod 的资源需求,通过调整 Pod 的资源配置来提高资源利用效率。
扩缩方式
- HPA 根据预设的指标和阈值进行扩缩,通过增加或减少 Pod 数量来应对负载压力。
- VPA 则根据Pod 的实际资源使用情况进行扩缩,自动调整 Pod 的资源限制和请求。
适用场景
- HPA 更适用于负载变化较大的场景,需要快速响应负载变化。
- VPA 更适用于资源使用稳定但需要精细化管理的场景,以提高资源利用效率。
- VPA是解决资源配额(Pod的CPU、内存的limit/request)评估不准的问题。
- HPA则要解决的是业务负载压力波动很大,需要人工根据监控报警来不断调整副本数的问题。