应用(例如: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应用列表中,在顶部选择目标地域和命名空间,点击目标应用ID跳转到应用详情页。
-
在目标应用的基础信息页面,单击弹性伸缩页签,然后在弹性伸缩区域单击添加弹性策略。
-
在添加弹性策略面板,配置以下信息,然后单击确定。
配置项
示例
说明
策略名称
demo
自定义弹性策略名称。
实例数范围
1 - 5
自定义应用最小实例数和应用最大实例数。
指标类型
CPU使用率
指标类型选择CPU使用率。
目标值
40%
目标值设定为40%。
-
在弹性伸缩区域的弹性策略列表中,启用已成功添加的弹性策略。
2. 编写Shell脚本
-
登录应用实例的Webshell,详见使用Webshell诊断应用。
-
在Webshell中,创建Shell脚本并为其添加可执行权限。
说明本Shell脚本为简单的示例脚本。
-
创建
demo.sh脚本。cat << EOF > demo.sh #!/bin/bash while true; do # 这是一个空循环,只是为了消耗应用实例的CPU资源。 true done EOF -
为脚本添加可执行权限。
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端口和延迟时间(秒)(本文以300秒为例)。
重要-
本文以设置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脚本的进程,以避免资源的不必要浪费。