做推广用那个网站,找人做网站需要注意什么问题,广州市海珠区建设和市政局网站,制作企业网站的代码前言
云计算带来的优势之一便是弹性能力#xff0c;云原生场景下Kubernetes提供了水平弹性扩容能力#xff08;HPA#xff09;#xff0c;让应用可以随着实时指标进行扩/缩。然而HPA的实际工作情况可能和我们直观预想的情况是不一样的#xff0c;这里面存在一些认知误区。…前言
云计算带来的优势之一便是弹性能力云原生场景下Kubernetes提供了水平弹性扩容能力HPA让应用可以随着实时指标进行扩/缩。然而HPA的实际工作情况可能和我们直观预想的情况是不一样的这里面存在一些认知误区。本文总结了一下 EDAS 用户在使用 HPA 时常遇到的三个认知误区具体如下
误区一HPA存在扩容死区
现象当RequestLimit时期望利用率超过90%时无法正常扩容。
原因剖析HPA中存在容忍度默认为10%指标变化幅度小于容忍度时HPA会忽略本次扩/缩动作。若当期望利用率为90%时则实际利用率在81%-99%之间都会被HPA忽略。
避坑指南当RequestLimit时避免设置过高的期望利用率一来避免扩容死区二来被动扩容有一定的迟滞时间留下更多的缓冲余量以应对突增流量。 误区二误解利用率计算方法HPA扩容与预期使用量不符
现象当Limit Request时配置50%的利用率使用量未达到Limit的50%便扩容。
原因剖析HPA计算利用率是基于Request计算当Limit Request时实际利用率是可以超过100%。
避坑指南对于较为重要的应用应当设置RequestLimit保证资源的独占。对于可以容忍资源共享的应用对应的期望利用率也不应设置的过高在集群资源紧张时超量使用资源的Pod很有可能会被杀死从而造成服务中断。 误区三弹性行为总是滞后的扩缩行为与心理预期不符
现象指标突增时HPA不会立刻扩容且扩容可能是分多次进行最终稳定时的实例数也与预期不同。
原因剖析HPA的设计架构决定了HPA扩/缩容总是滞后的且扩/缩容收到弹性行为behavior与容忍度共同作用。其中弹性行为限制了扩/缩容速率不会一口气扩/缩到期望实例数。而容忍度会忽略指标的小幅度变化从而导致在多次扩容的场景下最终计算的实例数可能与一开始计算出的实例数不同。
避坑指南阅读下文了解一下HPA工作原理配置合理的弹性行为behavior。 HPA工作机理
在打破认知误区前我们有必要梳理一下HPA的工作机理 如图所示HPA控制器执行弹性功能主要分为四个步骤
监听HPA资源一旦生成HPA资源或者是更改HPA配置HPA控制器能及时感知并调整。从Metrics API获取对应的指标数据这里的Metrics Server又可以分为三类 Kubernetes MetricServer提供容器级别CPU/内存使用量Custom MetricServer提供来自Kubernetes集群自定义资源的指标数据External MetricServer提供来自Kubernetes集群外的指标数据每个指标项单独计算期望实例数最后取所有期望实例数中的最大值作为当前工作负载的期望实例数调整对应的工作负载
其中步骤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它是在HPAautoscaling/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能结合云厂商在计算、存储、网络上的技术基础能力能让使用云的成本更低。但是这里对于业务应用会提出一点点挑战如无状态/配置代码解耦等等。从更广的侧面来看这是云原生时代应用架构面临的挑战。不过应用越来越原生的话云的技术红利也会离我们越来越近。
原文链接
本文为阿里云原创内容未经允许不得转载。