前言

云计算带来的劣势之一便是弹性能力,云原生场景下Kubernetes提供了程度弹性扩容能力(HPA),让利用能够随着实时指标进行扩/缩。然而HPA的理论工作状况可能和咱们直观料想的状况是不一样的,这外面存在一些认知误区。本文总结了一下 EDAS 用户在应用 HPA 时常遇到的三个认知误区,具体如下:

误区一:HPA存在扩容死区

景象:当Request=Limit时,冀望利用率超过90%时,无奈失常扩容。

起因分析:HPA中存在容忍度(默认为10%),指标变动幅度小于容忍度时,HPA会疏忽本次扩/缩动作。若当冀望利用率为90%时,则理论利用率在81%-99%之间,都会被HPA疏忽。

避坑指南:当Request=Limit时,防止设置过高的冀望利用率,一来防止扩容死区;二来被动扩容有肯定的通畅工夫,留下更多的缓冲余量以应答突增流量。

误区二:误会利用率计算方法,HPA扩容与预期使用量不符

景象:当Limit > Request时,配置50%的利用率,使用量未达到Limit的50%便扩容。

起因分析:HPA计算利用率是基于Request计算,当Limit > Request时,理论利用率是能够超过100%。

避坑指南:对于较为重要的利用,该当设置Request=Limit保障资源的独占。对于能够容忍资源共享的利用,对应的冀望利用率也不应设置的过高,在集群资源缓和时,超量应用资源的Pod很有可能会被杀死,从而造成服务中断。

误区三:弹性行为总是滞后的,扩缩行为与心理预期不符

景象:指标突增时,HPA不会立即扩容,且扩容可能是分屡次进行,最终稳固时的实例数也与预期不同。

起因分析:HPA的设计架构决定了,HPA扩/缩容总是滞后的,且扩/缩容收到弹性行为(behavior)与容忍度独特作用。其中弹性行为限度了扩/缩容速率,不会一口气扩/缩到冀望实例数。而容忍度会疏忽指标的小幅度变动,从而导致在屡次扩容的场景下,最终计算的实例数可能与一开始计算出的实例数不同。

避坑指南:浏览下文理解一下HPA工作原理,配置正当的弹性行为(behavior)。

HPA工作机理

在突破认知误区前,咱们有必要梳理一下HPA的工作机理

  1. 如图所示,HPA控制器执行弹性性能次要分为四个步骤:
  2. 监听HPA资源,一旦生成HPA资源或者是更改HPA配置,HPA控制器能及时感知并调整。
    从Metrics API获取对应的指标数据,这里的Metrics Server又能够分为三类
  • Kubernetes MetricServer:提供容器级别CPU/内存使用量
  • Custom MetricServer:提供来自Kubernetes集群自定义资源的指标数据
  • External MetricServer:提供来自Kubernetes集群外的指标数据
  1. 每个指标项独自计算冀望实例数,最初取所有冀望实例数中的最大值,作为当前工作负载的冀望实例数
  2. 调整对应的工作负载

其中步骤2-4约每15秒执行一次,如需扭转工夫周期,能够调整KCM的配置参数--horizontal-pod-autoscaler-sync-period。

数据源

如上图所示,HPA目前提供了五种指标起源,以及三种指标服务(MetricsServer),简略介绍如下:

  • Resource:提供Pod级别的CPU/内存使用量
  • ContainerResource:提供容器级别的CPU/内存使用量
  • Object:提供Kubernetes集群内任意资源的相干指标
  • Pods:提供Kubernetes集群内pod相干的指标
  • External:提供Kubernetes集群外的指标数据

值得一提的是,在自建Kubernetes场景下,这三种MetricsServer都须要额定装置,它们均运行于KCM之外。下表列举了几种Kubernetes集群MetricsServer的部署状况。

指标计算方法

HPA提供了三种期望值类型

  • 总量(Value)
  • 均匀量(AverageValue)= 总量 / 以后实例数
  • 利用率(Utilization)= 均匀量 / Request

值得一提的是,利用率是基于Request进行计算的,所以没有设置Request的场景下,HPA可能无奈失常工作。

下图介绍了五种指标起源反对的冀望类型,不难看出所有指标起源都反对均匀量。

对于单个指标的冀望实例数计算规定如下:

这外面引入了容忍度的概念,即认为在期望值左近小范畴的抖动是能够容忍疏忽的。这个参数的起源是因为指标值是一个始终在抖动变动的值,如果不疏忽渺小的变动,那么很有可能造成利用一直的扩容缩容,进而影响整个零碎的稳定性。

如下图所示,当指标值落入粉色区域内(容忍度范畴)时,冀望实例数等于以后实例数。粉色区域(容忍度范畴)的上上限别离是0.9倍期望值与1.1倍期望值。

对于配置了多条指标规定,最终冀望实例数计算规定如下:

用一句话简要概括计算方法:单个指标稳定小时忽略不计,多个指标之间取最大值,最终实例数会落在上限和下限之间。

扩缩行为

在某些状况下,指标数据会有一个频繁且大幅度的抖动。如下图所示的一段CPU指标数据,存在一些指标抖动或间歇流量降落导致利用率降落,指标的变动范畴曾经超出了容忍度的范畴。此时,从利用稳定性角度来看,咱们不冀望利用缩容。为了解决这个问题,HPA引入了配置来管制扩缩容,即扩缩行为(behavior),它是在HPA(autoscaling/v2beta2)中引入,要求Kubernetes集群版本>=1.18。

HPA的弹性行分为扩容行为和缩容行为。行为具体由以下三局部组成:

  • 稳固窗口:稳固窗口会参考过来一段时间计算出的冀望实例数,选取极值作为最终后果,从而保证系统在一段时间窗口内是稳固的。对于扩容取极小值,对于缩容取极大值。
  • 步长策略:限度一段时间内实例变动的范畴。由步长类型、步长值、工夫周期三个局部组成。值得一提的是工夫周期这个概念与上述的稳固窗口是两回事,此处的工夫周期定义了回溯多长历史工夫,计算实例数变动状况。
  • 抉择策略:用于选取多个步长策略计算后的后果,反对 取最大值、取最小值、敞开 这三种策略。

回顾与总结

至此,咱们曾经大抵理解了HPA的工作机理。正当利用HPA能够无效晋升资源利用率,在这之中咱们总结了一些注意事项,熟记这些点能够在应用HPA时“无效避坑”。

  • HPA的设计架构导致了HPA只能被动响应指标进行弹性扩缩,这种模式下,弹性滞后是肯定存在的。目前阿里云容器服务推出了带预测能力的AHPA,能够无效缩小弹性通畅。
  • HPA的利用率计算方法是基于Request,理论利用率/冀望利用率超过100%是失常的,配置较高的冀望利用率须要正当布局集群资源和扫视相应危险。
  • HPA中的容忍度概念能缓解指标稳定带来的零碎震荡问题,但与此同时引入的扩容死区问题须要运维人员避开。
  • HPA的设计架构容许扩大各种类型指标,须要开发/装置相应的MetricsServer,如EDAS则为用户提供了微服务RT和QPS指标。
  • HPA中存在扩缩容行为,即便不配置相应参数也有默认行为,扩容行为的稳固窗口默认是0,如果利用常因噪声数据造成扩容,能够设置一个较短的扩容稳固窗口躲避尖利噪声。
  • 单个HPA反对配置多个指标进行弹性,切勿对单个利用配置多个HPA,会相互影响,导致利用震荡。

云原生场景下弹性能力更为丰盛,可供弹性的指标也更具备业务定制能力。利用 PaaS 平台(如企业级分布式应用服务 EDAS)能联合云厂商在计算、存储、网络上的技术根底能力,能让应用云的老本更低。然而这里对于业务利用会提出一点点挑战(如:无状态/配置代码解耦等等)。从更广的侧面来看,这是云原生时代利用架构面临的挑战。不过利用越来越原生的话,云的技术红利也会离咱们越来越近。

原文链接

本文为阿里云原创内容,未经容许不得转载。