全部产品
Search
文档中心

企业级分布式应用服务 EDAS:自动弹性扩缩容

更新时间:Dec 06, 2023

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

背景信息

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

使用限制

  • 部署在EDAS的容器服务K8s集群和Serverless K8s集群中的应用,可以配置弹性策略。
  • 执行应用变更(如部署应用、应用扩缩、变更规格等)时,无法配置弹性策略。应用处于变更中时,弹性策略将会自动关闭,待变更完成后,自动恢复弹性策略。

注意事项

  • 如果应用配置了Service、SLB,在发生弹性伸缩时,EDAS会自动将扩容的应用实例添加到后端服务器列表,然后将缩容的实例从后端服务器列表中移除。
  • 如果应用配置了持久化存储,在发生弹性伸缩时,EDAS会自动将扩容的应用实例与配置的持久化存储进行关联。
  • Kubernetes集群不具备节点自动扩容能力时,应用弹性扩容可能无法工作,您可以前往集群页面配置节点弹性伸缩。

操作步骤

  1. 登录EDAS控制台

  2. 在左侧导航栏,单击应用管理 > 应用列表,在顶部菜单栏选择地域,并在页面上方选择微服务空间,然后在应用列表页面单击具体的应用名称。

  3. 应用总览页面的左侧导航栏,选择应用设置 > 弹性伸缩,然后单击+添加弹性策略
  4. 策略名称的文本框,输入自定义的弹性策略名称。
    说明 策略名称必须以字母开头,允许数字、字母、短划线(-)或下划线(_)组成。最大长度30个字符。
  5. 触发条件区域,单击新增触发器,然后在右侧弹出的新增触发器面板配置触发器规则。配置完成后,单击确定
    重要
    在弹性策略内,您可以配置多个触发器,EDAS将根据触发器自动为您扩容和缩容应用实例。
    • 当K8s集群版本低于V1.15.0时,任意一条触发器运行失败,将不会进行扩缩容。
    • 当K8s集群版本为V1.15.0或以上版本时,任意一条触发器运行成功,即可成功扩缩容。当多条触发器运行成功时,应用目标实例数=Max(触发器1目标实例数,触发器2目标实例数,...,触发器N目标实例数)。
    • 触发器名称:必须以字母开头,允许数字、字母、短划线(-)或下划线(_)组成。最大长度30个字符。
    • 触发器类型:您可选择不同的触发器类型。
      • 定时触发:适用于负载强周期型应用,例如白天(08:00~20:00)负载高、 晚上(20:00~08:00)负载低或工作日(周一~周五)负载高、周末(周六~周日)负载低的周期性应用。
        配置项描述
        周期在下拉列表选择每天每周每月
        说明 选择每周后,根据需求可选择具体日期配置触发规则。如果一周内不同日期的单天内触发规则不同,可通过创建多条定时触发器来实现。
        单天内的触发时间单击添加创建每天的触发时间和实例数。
        重要
        • 如果错过设定的触发时刻,定时策略需要等到下一周期才会被触发。
        • 两个邻近触发时间间隔要大于10分钟。
        • 两个邻近触发时刻设定的实例数变化需要大于10%,即Pod2 / Pod1 > 1.1或者Pod2/ Pod1 < 0.9。其中Pod1是前一个时刻设定的实例数,Pod2是后一个时刻设定的实例数。
        之后保持实例数根据实际情况设置弹性策略执行后保持的实例数,可设置范围为0~50。
        开启实例数量保持当前仅支持启用周期类型为每天的定时弹性策略。
        • 勾选后,若同时设置了指标触发弹性策略,在设定的时间段内,以两者中较大值为准。
        • 若不勾选,只会在设定的时刻执行一次伸缩动作,之后可能会受其他指标触发策略影响,实例数发生变化。
      • 指标触发:指标来源分为系统指标Prometheus。适用于应用指标与容量线性相关型应用,例如通过压测确定应用单实例可以处理200 QPS,当QPS达到1200的时候,将扩容至6个实例的应用。
        • 系统指标:支持选择应用提供服务平均每秒请求量应用提供服务平均响应时间(毫秒)应用平均CPU使用率应用平均内存使用率关联应用实例数五种指标名
          配置项描述推荐使用场景
          应用提供服务平均每秒请求量基于过去1分钟数据统计,该应用每个实例平均每秒接收到的服务请求量,数据源来自EDAS产品应用监控。适用于微服务流量的应用。
          应用提供服务平均响应时间(毫秒)基于过去1分钟数据统计,该应用处理请求的平均响应时间(毫秒),数据源来自EDAS产品应用监控。适用于微服务响应延迟有要求的应用。
          应用平均CPU使用率基于实时数据统计,该应用每个实例平均CPU使用率,数据源来自K8s自身监控。适用于绝大多数应用。
          应用平均内存使用率基于实时数据统计,该应用每个实例平均内存使用率,数据源来自K8s自身监控。适用于可以归还内存给操作系统的应用(Java应用不适用)。
          关联应用实例数以关联应用运行实例数与当前应用运行实例数的比值,作为弹性指标数据,要求应用位于同一集群。适用于具有依赖关系的应用,例如微服务应用。
        • Prometheus:分为内置Prometheus自定义Prometheus
          • 内置Prometheus:托管ACK集群在导入EDAS时,默认安装Prometheus监控实例,无需进行额外配置,EDAS服务端将自动发现且配置。
          • 自定义Prometheus:允许填入其他Prometheus实例访问地址。
          配置项描述
          自定义Prometheus地址
          1. 登录Prometheus控制台
          2. 在左侧导航栏,单击监控列表,进入Prometheus监控的实例列表页面。
          3. 根据需要选择对应的Prometheus监控实例,其中arms_metrics_{地域ID} 格式的实例提供应用监控数据。
          4. 在实例详情页面左侧导航栏,单击设置,获取HTTP API地址(Grafana 读取地址)。单击生成token获取Token值并复制。
            说明 建议使用内网地址作为自定义Prometheus地址。
          鉴权模式目前支持鉴权与Authorization鉴权模式。选择Authorization模式时,请填写上一步复制的Token值。
          指标查询语句
          说明
          建议使用的场景:
          • 基于Ingress QPS指标弹性。
          • 基于JVM活跃线程数指标弹性。
          • 基于JVM内存使用率指标弹性。
          • 基于自定义业务指标弹性。
          标准Prometheus查询语句,该语句查询获得的数据将作为指标值。

          示例语句:

          • sum(rate(nginx_ingress_controller_requests{host="example.com", method="GET", status=200}[1m]))

            该语句表示过去1分钟,域名为example.com,请求方法为GET,状态码为200的Nginx Ingress请求的平均QPS。

          • sum(arms_threadpool_active_size{pid="72984680-5f82-48c6-8ece-5d14a2e1****"})
            该语句表示应用ID为72984680-5f82-48c6-8ece-5d14a2e1****的线程池活跃线程数量。
            说明 该语句查询的指标数据来源于ARMS存储应用监控的Prometheus实例。
          更多查询语句与过滤标签,可以访问ARMS Grafana大盘进行调试。
        • 目标值:设置期望的监控指标目标值。系统会帮您自动扩缩实例数,无限接近您设置的目标值。
          说明 当应用监控指标的实际值大于目标值时,系统会自动帮您缩容实例。反之,系统会自动帮您扩容实例。
  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秒,则允许在一分钟内最多扩容或缩容当前副本个数的百分之十。

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

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

结果验证

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

  1. 弹性伸缩页面的右上角,单击事件
  2. 事件中心页面右上角,设置查询事件的时间范围。
  3. 事件中心页面,单击普通视图页签。
  4. 普通视图页签,在事件来源的下拉列表,选择K8s事件
  5. 事件类型的输入框,填写EdasHPAScaledEdasHPAReachBoundEdasHPAClosed
    • EdasHPAScaled:弹性扩缩容事件。
    • EdasHPAReachBound:弹性到达上下限事件。
    • EdasHPAClosed:弹性关闭事件。
  6. 打开显示高级选项开关,选择对应的集群ID,并且置应用PID为空,其他配置项无需设置,然后单击Search
    弹性伸缩事件

相关操作

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

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

后续步骤

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