跳至主要內容

HPA 弹性伸缩

Clay云原生Kubernetes大约 3 分钟

HPA 弹性伸缩

概念

什么是 HPA ?

HPA(Horizontal Pod Autoscaler)是 Kubernetes 中的一种资源自动伸缩机制,用于根据某些指标动态调整 Pod 的副本数量。

价值

生产环境中,业务面临的负载压力变化是不定的,为了保障业务的稳定性,需要根据负载大小的变化调整应用实例的数量或资源规格,同时从资源成本角度考虑,需要在保障业务稳定性的同时,尽量减少不必要的资源占用。

  • 定时弹性:大促期间,设置开始和结束时间,自动弹性扩缩容,不用人工干预,提高效率
  • 基于资源的弹性:根据 cpu,mem 等资源使用率,自动扩缩容,低负载缩容,减小不必要资源占用,高负载自动扩容,保证应用有足够的资源使用,防止应用等待资源调度
  • 基于业务指标的弹性:上 生产前,在 ut 环境压测,确定 最大 QPS、最高接受的 RT、最大接受 消息积压数等,监控平台提供接口,根据阀值,自动扩容,自动应对突然流量或压力,保障应用质量
  • 基于事件的弹性:实际生产中,时间因素、资源使用率、业务指标 不是互斥的,通常是混合出现。如在业务潮汐流量阶段,会出现资源使用率、业务指标飙升情况,此时需要更为灵敏的基于资源的弹性策略和基于业务指标的弹性策略。 这种场景可以将时间、资源使用率、业务指标作为无差别的事件,根据事件做弹性行为触发的判断,即基于事件的弹性。

具体方案

对于弹性能力的实现,不得不提 KEDA 项目,它是微软推出的基于事件的弹性伸缩项目,已捐赠给 CNCF,是 CNCF 孵化中的项目,被广泛用于生产环境

KEDA 的工作原理

KEDA 监控来自外部指标提供程序系统(例如 Azure Monitor)的指标,然后根据基于指标值的缩放规则进行缩放。它直接与度量提供者系统通信。它作为 Kubernetes Operator 运行,它只是一个 pod 并持续监控。

KEDA architecture

KEDA 将 K8s Core Metrics Pipeline 和 Monitoring Pipeline 处理流程统一化,并内置多种 scaler ( link ),提供开箱即用的弹性策略支持,如常见的基于 CPU/Memory 的弹性策略、定时弹性等:

比较推荐平台层面使用 KEDA 来统一弹性能力的实现,将时间、CPU/Memory 等资源使用率、业务指标等作为 KEDA 的数据源,统一化为事件,基于事件满足对弹性策略的需求。

最佳实践

在业务场景中,需要根据业务需求,实现和使用与需求匹配的弹性能力,避免过度使用高级能力影响业务稳定性,如:

  • 有明显潮汐流量特征的业务,可以重点使用 定时弹性
  • 突发流量特征的业务,可重点使用 基于资源的弹性 或 指标弹性
  • 若业务是混合流量特征,即既有潮汐流量特征,又有突发流量特征,可重点使用 基于事件的弹性,根据多种事件综合做弹性决策