应用(例如:Java应用)在启动阶段通常会消耗比应用正常运行时更多的CPU资源。这种高资源消耗会导致水平Pod自动伸缩器(HPA)在冷启动阶段记录到异常高的指标值,从而影响HPA的准确性和性能调整。如果在应用中配置了健康检查,只有在应用实例通过业务就绪检查(Readiness)后,HPA才会将该应用实例的资源使用情况计入到弹性指标中。通过这种方式,HPA控制器可以更准确地评估应用实例的实际资源需求,避免因启动阶段的资源峰值而导致不合理的扩缩容操作。本文以Java应用为例进行演示说明。
测试说明
为了模拟Java应用的冷启动阶段,本文通过使用Shell脚本来提高Java应用单实例的CPU使用率来进行演示说明。
当Shell脚本执行时,应用单实例的CPU使用率保持在约50%,以模拟应用在启动过程中对CPU资源的高需求。停止脚本后,应用单实例的CPU使用率恢复到正常水平,表明应用已启动完成并进入稳定运行状态,此时应用对CPU资源的需求回归常规。
前提条件
已创建Java应用。具体操作,请参见通过代码包部署Java应用或通过镜像部署Java应用。
为了方便测试,将应用的实例数设置为一个。
步骤综述
为应用添加弹性策略:此步骤是为了设置应用实例的扩容阈值和检测CPU实时的使用情况。
编写Shell脚本:通过Shell脚本提高单实例的CPU使用率,以模拟应用冷启动阶段对CPU资源的高需求,也是为了给后续的测试步骤做好准备。
未配置健康检查时对弹性指标进行验证:通过此步骤,证明了在不配置Readiness检查时,CPU资源的使用情况会被实时地同步至HPA控制器中,并用于决定是否需要扩容实例数。
配置健康检查后对弹性指标进行验证:在配置了Readiness检查后,单实例的CPU使用率升高并不会导致实例数在特定的时间段内产生变化。证明了CPU资源的使用情况在配置的延迟时间内不会被同步至HPA控制器中。
后续操作:在测试任务完成后,终止Shell脚本的进程,以避免不必要的资源浪费。
1. 为应用添加弹性策略
登录SAE控制台,在左侧导航栏选择 ,然后选择目标地域和目标命名空间,最后单击目标应用名称。
在目标应用的基础信息页面,单击实例列表页签,然后在弹性伸缩区域单击添加弹性策略。
在添加弹性策略面板,配置以下信息,然后单击确认。
配置项
示例
说明
策略类型
监控指标策略
选择策略类型为监控指标策略。
策略名称
demo
自定义弹性策略名称。
触发条件
指标类型:CPU使用率
目标值:40%
指标类型选择CPU使用率,并自定义15秒内应用所有实例平均CPU利用率。
实例数设置
应用最小实例数:1
应用最大实例数:5
自定义应用最小实例数和应用最大实例数。
在实例列表页签的弹性策略区域,启用已成功添加的弹性策略。
2. 编写Shell脚本
在目标应用的基础信息页面,单击实例列表页签,然后单击应用实例操作列的Webshell,进入实例的字符界面。
在字符界面,创建Shell脚本并为其添加可执行权限。
说明本Shell脚本为简单的示例脚本。
创建
demo.sh
脚本。#!/bin/bash while true; do # 这是一个空循环,只是为了消耗应用实例的CPU资源。 true done
为脚本添加可执行权限。
chmod +x demo.sh
3. 未配置健康检查时对弹性指标进行验证
未执行Shell脚本之前,查看单实例CPU使用率及实例个数。
登录Webshell,运行Shell脚本。
./demo.sh
在Shell脚本执行的过程中,查看单实例CPU使用率及实例个数。
说明此过程会随着单实例CPU使用率的提升,实例数也会随之增加(自动扩容),直至扩容至在弹性策略中设置的最大实例数。
说明通过观察CPU使用率和实例数,当CPU使用率超过在弹性策略中设置的扩容触发值时,系统会为了满足应用实例对CPU资源的需求,在极短的时间内自动进行扩容,直到扩容至设置的实例数上限。这表明CPU的使用情况已同步至HPA控制器,并且HPA控制器根据当前的CPU使用情况对应用实例进行了扩容。
4. 配置健康检查后对弹性指标进行验证
在执行此步骤之前,需要使用kill -15 ${PID}
命令结束Shell脚本的进程,并将实例数缩容至一个。
4.1 为应用配置健康检查
进入目标应用的基础信息页面,单击部署应用,然后在部署应用面板,配置以下信息。
在基础信息设置区域,修改版本号。
在部署应用面板的应用健康检查设置区域,启用应用业务就绪检查(Readiness配置),然后选择检查方式为TCP端口检查,并设置TCP端口和延迟时间(秒)。
重要本文以设置TCP端口检查为例进行演示说明。具体配置健康检查的信息,请参见设置健康检查。
如果您只想消除应用冷启动对弹性指标的影响,只需要配置Readiness检查即可。
配置的延迟时间应尽可能接近应用的冷启动时间,可以大于应用的冷启动时间,但不能小于应用的冷启动时间。
单击确定。
4.2 查看应用单实例的CPU使用率及实例数的变化
未执行Shell脚本之前,查看单实例CPU使用率及实例个数。
登录Webshell,运行Shell脚本。
./demo.sh
在Shell脚本执行的过程中,查看单实例的CPU使用率及实例个数。
当应用业务就绪检查(300秒)成功后,查看单实例的CPU使用率及实例个数。
说明通过观察CPU使用率和实例数,发现在应用业务就绪检查的时间段内(300秒),CPU资源使用率已超过弹性策略设置的扩容触发值,并自动扩容了一个实例。然而,在这300秒的延迟时间内,尽管CPU使用率仍然很高,但HPA控制器并未继续进行扩容,这表明在这段时间内,CPU使用情况没有被同步到HPA控制器。
当应用业务就绪检查(300秒)成功后,如果CPU使用率依旧超过了在弹性策略设置的扩容触发值,应用实例会继续进行扩容,这表明在业务就绪检查完成后,CPU资源的使用情况再次被同步到HPA控制器。
5. 后续操作
通过Webshell登录执行了Shell脚本的实例,使用kill -15 ${PID}
命令结束Shell脚本的进程,以避免资源的不必要浪费。