应用(例如: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脚本的进程,以避免资源的不必要浪费。