在业务负载可以预估的场景中,为了避免资源浪费,您可以开启定时自动扩缩容功能。开启后,在业务负载高峰到来前, 服务定时将实例数自动扩容到指定数量;在业务负载高峰结束后,服务定时将实例数自动缩容到指定数量。 本文为您介绍如何管理定时自动扩缩容功能及水平与定时自动扩缩容的兼容性说明。

背景信息

管理定时自动扩缩容功能支持两种方式(方式一:通过控制台管理定时自动扩缩容功能方式二:通过本地客户端管理定时自动扩缩容功能)。如果您同时开启了水平与定时自动扩缩容功能,水平自动扩缩容目标实例数的最大值和最小值会随着定时自动扩缩容的目标实例数变化,具体实例数的生效方式请参见定时与水平自动扩缩容的兼容性说明

方式一:通过控制台管理定时自动扩缩容功能

  • 开启定时自动扩缩容功能
    1. 登录PAI控制台
    2. 按照下图操作指引,进入服务详情页面。服务详情
    3. 服务详情页签,定时扩缩容区域,单击创建定时扩缩容
    4. 定时自动扩缩容设置对话框,配置参数,并单击确定
      参数 描述
      目标实例数 预期的实例数。
      调度周期 定时执行时间,支持以下三种设置方式:
      • 星期:您可以设置每周定时执行自动扩缩容的时间。
      • :您可以设置每天定时执行自动扩缩容的时间。
      • Cron表达式:您可以通过设置Cron表达式,指定定时自动扩缩容的时间,关于如何设置Cron表达式,请参见附录:Cron表达式
  • 更新定时自动扩缩容配置信息
    1. 服务详情页签,定时扩缩容区域,单击管理定时扩缩容
    2. 定时自动扩缩容设置对话框,修改任务名称目标实例数调度周期的配置信息。
    3. 单击更新
  • 关闭定时自动扩缩容功能
    1. 服务详情页签,定时扩缩容区域,单击管理定时扩缩容
    2. 定时自动扩缩容设置对话框,清空所有定时任务,单击确认

方式二:通过本地客户端管理定时自动扩缩容功能

  • 开启定时自动扩缩容功能或更新配置

    服务创建之后,默认不开启定时自动扩缩容功能,您可以登录eascmd客户端后使用cronscale子命令开启定时自动扩缩容功能或更新配置,如何登录eascmd客户端,请参见下载并认证客户端

    命令格式
    eascmd cronscale [region]/[service_name] -s cronscale.json
    操作命令之前,您需要先按照参数说明配置cronscale.json,cronscale.json参数配置示例如下。
    {
      "ExcludeDates": ["* * * * * 6,0"],
      "ScaleJobs": [
        {
          "Schedule": "0 15,45 * * * *",
          "TargetSize": 6
        },
        {
          "Schedule": "0 0,30 * * * *",
          "TargetSize": 1
        },
        {
          "Schedule": "0 7,22,37,52 * * * *",
          "TargetSize": 3
        }
      ]
    }
    参数名称 说明 示例
    ExcludeDates 需要排除的时间点,为一个Cron表达式,详情请参见附录:Cron表达式
    说明 如果ScaleJobs中的Cron表达式同时满足ExcludeDates中的表达式,则ScaleJobs不会被执行。
    ["* * * * * 0,6"]

    每周的周六和周日不执行定时扩缩容任务。

    ScaleJobs 需要执行的定时扩缩容任务,包含参数Schedule、TargetSize和Name:
    • Schedule:定时执行时间,为一个Cron表达式,详情请参见附录:Cron表达式
    • TargetSize:预期的实例数。
    • Name:自定义文本,用于对任务进行标识。可以不配置。
      Name命名规则如下:
      • 只能包括英文字母和数字。
      • 长度小于20个字符。
    [ { "Schedule": "0 0 18 * * *", "TargetSize": 10, "Name": "scale-up" }, { "Schedule": "0 0 22 * * *", "TargetSize": 3, "Name": "scale-down" }]

    在每天的18点整,将服务扩容到10,每天的22点整,将服务缩容到3。

  • 查看定时自动扩缩容的配置
    命令格式
    $ eascmd cronscale show [region]/[service_name]
    [RequestId]: F4C38D2D-4B38-5CB7-B706-9A1C41D4617E
    +--------------+----------------------------+---------+------------+----------------------+
    |     NAME     |          SCHEDULE          |  STATE  | TARGETSIZE |    LASTPROBETIME     |
    +--------------+----------------------------+---------+------------+----------------------+
    | scale-jobs-1 | 0 5,15,25,35,45,55 * * * * | Succeed |          1 | 2022-03-03T13:45:00Z |
    | scale-jobs-0 | 0 0,10,20,30,40,50 * * * * | Succeed |          4 | 2022-03-03T13:50:00Z |
    +--------------+----------------------------+---------+------------+----------------------+
  • 关闭定时自动扩缩容功能
    命令格式
    eascmd cronscale rm [region]/[service_name]

定时与水平自动扩缩容的兼容性说明

定时自动扩缩容(以下简称Cronhpa)可以与水平自动扩缩容(以下简称Hpa)同时开启。同时开启时,Cronhpa修改的是Hpa的min或max。
重要 虽然Cronhpa会永久性修改Hpa的配置,但在到达触发时间点之前,生效的仍然是Hpa的原始配置。服务每次更新、升级时,也会将Hpa的配置信息调整回原始配置。
同时开启Cronhpa和Hpa时,min和max的取值规则如下表所示。
水平自动扩缩容min/max 定时自动扩缩容 最终结果min/max 说明
2/5 1 1/5 如果Cronhpa的目标实例数小于Hpa的最小值时,Hpa的最小实例数将被修改为Cronhpa的目标实例数。
2/5 6 6/6 如果Cronhpa的目标实例数大于Hpa的最大实例数时,Hpa的最小和最大实例数都将被修改为Cronhpa的目标实例数。此时,服务最终的实例数量固定,不会进行弹性伸缩。
2/5 3 3/5 如果Cronhpa的目标实例数在Hpa的最小值和最大值之间时,Hpa的最小实例数将被修改为Cronhpa的目标实例数。

附录:Cron表达式

通过设置Cron表达式,开启定时自动扩缩容功能。

Cron表达式Cron表达式
  • 特殊符号说明
    • 星号(*)

      星号代表任意值,例如:0 0 0 1 * * 代表每月1号的0点整。

    • 连字符(-)

      连字符代表一段连续的取值范围,例如: 0 0 12-14 * * * 代表每天的12:00、13:00 和14:00。

    • 逗号(,)

      连字符代表一段取值范围,例如:0 0 12,14 * * * 代表每天的12:00 和14:00。

    • 斜杠(/)

      斜杠用来代表一段增量的区间,例如: 0 */15 * * * * 代表每小时的 0分、15分、30分、和45分。斜杠可以和连字符配合使用,例如 0 5-40/15 * * * * 代表每小时从5分到40分钟之间,每隔15分钟取一个值,有效时间点可以是 0:05, 0:20, 0:35。

  • 时间参数说明
    名称 可用值 可用特殊符号
    0-59 * / , -
    0-59 * / , -
    小时 0-23 * / , -
    1-31 * / , -
    1-12 或 JAN-DEC * / , -
    星期 0-6 或 SUN-SAT * / , -