本文介绍如何在EDAS中完成自动弹性伸缩策略配置。分布式应用管理中,弹性伸缩是很重要的一个运维能力。弹性伸缩能够感知应用内各个实例的状态,并根据实例状态动态实现应用扩容、缩容,在保证服务质量的同时,提升应用的可用率。

背景信息

互联网、游戏类等应用在促销活动期间容易出现突发性流量洪流,SLA和资源成本不易平衡,极易造成系统响应延迟、系统瘫痪等问题。EDAS继承阿里巴巴应对双11的流量洪流技术,提供秒级自动弹性功能,保证SLA的同时也节省实例保有成本。多适用于互联网、游戏以及社交平台等行业。

部署在EDAS的容器服务K8s集群和Serverless K8s集群中的应用,可以配置弹性策略。

在弹性策略内,可以配置多个触发器。
  • 当K8s集群版本低于V1.15.0时,任意一条触发器运行失败,将不会进行扩缩容。
  • 当K8s集群版本为V1.15.0或以上版本时,任意一条触发器运行成功,即可成功扩缩容。当多条触发器运行成功时,应用目标实例数=max(触发器1目标实例数,触发2目标实例数,...,触发器N目标实例数)。

您可前往事件中心订阅应用扩缩容相关事件,当应用发生扩缩容、扩缩容失败(自动扩缩达到设置的最大或最小实例数),您都会接收到消息通知。订阅弹性伸缩相关的K8s事件,请参见事件中心

注意
  • 弹性策略启用后,无法对应用执行停止启动手动扩缩操作。如果必须执行,请先停止弹性策略,再执行。
    • 如果应用配置了Service、SLB,在发生弹性伸缩时,EDAS会自动将扩容的应用实例添加到后端服务器列表,然后将缩容的实例从后端服务器列表中移除。
    • 如果应用配置了持久化存储,在发生弹性伸缩时,EDAS会自动将扩容的应用实例与配置的持久化存储进行关联。
  • 执行应用变更(如部署应用、应用扩缩、变更规格等)时,无法添加弹性策略。
  • Kubernetes集群不具备节点自动扩容能力时,应用弹性扩容可能无法工作,您可以前往集群页面配置节点弹性伸缩。具体操作,请参见节点自动伸缩

操作步骤

您可以配置多个触发器,EDAS将根据触发器自动为您扩容和缩容应用实例。

  1. 登录EDAS控制台
  2. 在左侧导航栏中单击应用列表,在顶部菜单栏选择地域并在页面上方选择微服务空间,然后在应用列表页面单击具体的应用名称。
  3. 在应用详情页面的左侧导航栏选择应用设置 > 弹性伸缩,然后单击添加弹性策略
    您也可以在应用总览页面右上角,选择扩缩 > 弹性扩缩,然后单击添加弹性策略。您也可以通过页面下方的快速添加指标策略快速添加定时策略区域来添加弹性策略。
  4. 策略名称的文本框中输入自定义的弹性策略名称。
    说明 策略名称必须以字母开头,允许数字、字母、短划线(-)或下划线(_)组成。最大长度30个字符。
  5. 触发条件区域单击新增触发器,然后在右侧弹出的新增触发器面板配置触发器规则,配置完成后单击确定
    表 1. 弹性策略触发器参数说明
    参数 描述
    触发器名称 必须以字母开头,允许数字、字母、短划线(-)或下划线(_)组成。最大长度30个字符。
    触发器类型 选择系统提供的触发器类型,当前支持定时触发器应用指标触发器
    • 定时触发器

      适用于负载强周期型应用,例如白天(08:00~20:00)负载高、 晚上(20:00~08:00)负载低或工作日(周一~周五)负载高、周末(周六~周日)负载低的周期性应用。

      1. 周期:您可在下拉列表中选择每天每周每月
        说明 选择每周后根据需求可选择具体日期来配置触发规则,如果一周内不同日期的单天内触发规则不同,可通过创建多条定时触发器来实现。
      2. 单天内的触发时间:通过单击添加来创建每天的触发时间和实例数。
        注意
        • 如果错过设定的触发时刻,定时策略需要等到下一周期才会被触发。
        • 两个邻近触发时间间隔要大于10分钟。
        • 两个邻近触发时刻设定的实例数变化需要大于10%,即Pod2 / Pod1 > 1.1或者Pod2/ Pod1 < 0.9,其中Pod1是前一个时刻设定的实例数,Pod2是后一个时刻设定的实例数。
      3. 之后保持实例数:跟据实际情况设置弹性策略执行后保持的实例数,可设置范围为0~50。
      4. 触发模式:触发周期选择每天时呈现此参数,可在下拉列表中选择边沿触发模式水平触发模式
        • 水平触发:弹性策略在两个设定时间段内,一直保持开始时刻的设定值。
        • 边沿触发:弹性策略只在设定时刻时生效,超过设定时刻则忽略。
    • 应用指标触发器

      适用于应用指标与容量线性相关型应用,例如通过压测确定应用单实例可以处理200 QPS,当QPS达到1200的时候,将扩容至6个实例的应用。

      1. 指标名:支持选择应用提供服务平均每秒请求量应用提供服务平均响应时间(毫秒)应用平均CPU使用率应用平均内存使用率四种指标。
      2. 按均值计算指标数据:触发器的类型为应用指标触发器且指标名称选择应用提供服务平均每秒请求量应用提供服务平均响应时间(毫秒)时,呈现此参数。当前系统默认按实时数据计算指标数据,勾选按均值计算指标数据后可按照均值计算,可有助于减少数据波动。按照均值计算的指标时间窗口,即用于均值计算的数据时间范围,参数范围为300~3600秒。
      3. 目标值:设置期望的监控指标目标值,系统会帮您自动扩缩实例数,无限接近您设置的目标值。
        说明 当应用监控指标的实际值小于目标值时,系统会自动帮您缩容实例。反之,系统会自动帮您扩容实例。
    方式 根据需要选择触发器的运行方式:
    • 仅观测:观测触发器指标,当指标达到期望值时发送事件,不触发扩缩容动作。
    • 观测并扩缩:观测触发器指标,当指标达到期望值时发送事件,触发扩缩容动作。
    说明 当选择应用平均CPU使用率应用平均内存使用率作为触发器指标时,目标值的0.9~1.1倍系统会认为是合理的波动,当实际值超过这个范围,才会触发弹性。
  6. 配置最大应用实例个数最小应用实例个数
    • 最大应用实例个数:可设置的范围为2~1000。触发弹性伸缩条件后,应用扩容,其实例数可达到最大值。
    • 最小应用实例个数:可设置的范围为0~1000。触发弹性伸缩条件后,应用缩容,其实例数可达到最小值。
    说明
    • 应用目标实例数=max(触发器1目标实例数,触发2目标实例数,...,触发器N目标实例数)
    • 当目标实例数大于当前实例数时,EDAS则对应用进行扩容,其应用实例数不超过所设的最大应用实例个数;反之,则进行缩容,其应用实例数不低于所设的最小应用实例个数
    • 最小应用实例个数不得等于最大应用实例个数
    • 建议当前实例数在您设置的最小应用实例个数最大应用实例个数范围内,如果不在范围内,保存弹性策略时会提示定时触发器保持实例数已超出最大最小实例数范围,但仍能保存。
  7. 可选:单击自定义弹性策略开关,启用弹性伸缩策略并配置扩容和缩容行为。
    • 冷却时间(s):根据需要设置冷却时间。单位为秒,范围为0~3600,扩容行为冷却时间默认为0秒,缩容行为冷却时间默认为300秒。
    • 扩容策略或缩容策略:在扩容行为区域单击添加扩容策略,或在缩容行为区域单击添加缩容策略,在弹出的对话框中,配置扩容或缩容策略,然后单击确定
      • 策略类型:根据需要选择副本个数或百分比作为策略类型。支持PodsPercent类型,Pods表示副本个数类型,Percent表示百分比类型。
      • 步长/百分比:根据选择的策略类型设置该参数值。例如,策略类型选择Pods,则此处值为Pod数量。
      • 时间周期(s):策略执行周期。例如,策略类型选择Percent步长/百分比设置为10,时间周期为60秒,则允许在一分钟内最多扩容或缩容当前副本个数的百分之十。

      单击同步至缩容策略同步至扩容策略,可以将配置的扩容或缩容策略同步至缩容或扩容策略。

    • 选择策略:支持MinMaxDisable三种策略。默认为Max
  8. 完成以上配置成后单击保存
  9. 在弹性策略页面右上角单击启用
    触发弹性策略后,如果EDAS依据所设策略对应用实例进行扩容或者缩容,表示自动弹性伸缩策略设置成功。

结果验证

启用弹性策略后,EDAS将自动依据弹性策略进行应用实例扩缩容,您可以通过以下步骤来查看扩缩容的详细事件记录。

  1. 弹性伸缩页面的右上角单击事件
  2. 事件中心页面右上角,设置查询事件的时间范围。
  3. 事件中心页面,单击普通视图页签。
  4. 普通视图页签,在事件来源的下拉列表中选择K8s事件,在事件类型的下拉列表中选择ScalingReplicaSetDryRunSuccessfulReScale,然后单击Search
    • ScalingReplicaSet:以观测并扩缩方式触发生成的事件记录,可查看到扩缩容的详细记录。
    • DryRunSuccessfulReScale:以仅观测方式触发生成的事件记录,未触发扩缩容动作。
    弹性伸缩事件

更多信息

弹性策略启用后,您可以对弹性策略进行删除停用启用编辑,还可以进行一系列应用管理操作。

说明 当弹性策略启用后,无法对应用执行停用启动手动扩缩操作。如果必须执行,请先停止弹性策略,再执行。

EDAS容器服务K8s和Serverless K8s交流群

如果您在EDAS中使用容器服务K8s集群和Serverless K8s集群过程中有任何疑问或建议,请提交工单,或使用钉钉搜索钉钉群号23197114加入钉钉群进行反馈。