CronHPA定时策略
在一些复杂的业务场景下,可能有固定时间段高峰业务,又有日常突发高峰业务。此种情况下,用户既期望能定时弹性伸缩应对固定时间段高峰业务,又期望能根据指标弹性伸缩应对日常突发高峰业务。CCE提供CronHPA的自定义资源,实现在固定时间段对集群进行扩缩容,并且可以和HPA策略共同作用,定时调整HPA伸缩范围,实现复杂场景下的工作负载伸缩。
CronHPA支持定时调整HPA策略的最大和最小实例数,也可以直接定时调整Deployment的Pod实例数。
前提条件
集群中已安装CCE容器弹性引擎插件。
使用CronHPA调整HPA伸缩范围
CronHPA支持定时调整HPA策略的最大和最小实例数,满足复杂场景下的工作负载伸缩。
由于HPA与CronHPA均通过scaleTargetRef字段来获取伸缩对象,如果CronHPA和HPA同时设置Deployment为伸缩对象,两个伸缩策略相互独立,后执行的操作会覆盖先执行的操作,导致伸缩效果不符合预期,因此需避免这种情况发生。
在CronHPA与HPA共同使用时,CronHPA规则是在HPA策略的基础上生效的,CronHPA不会直接调整Deployment的副本数目,而是通过HPA来操作Deployment,因此了解以下参数可帮助您更好地理解其工作原理。
- CronHPA的目标实例数(targetReplicas):表示CronHPA设定的实例数,在CronHPA生效时用于调整HPA的最大/最小实例数,从而间接调整Deployment实例数。
- HPA的最小实例数(minReplicas):Deployment的实例数下限。
- HPA的最大实例数(maxReplicas):Deployment的实例数上限。
- Deployment的实例数(replicas):CronHPA策略生效之前Deployment的Pod数量。
在CronHPA规则生效时,通过比较目标实例数(targetReplicas)与实际Deployment的实例数,并结合HPA的最小实例数或最大实例数的数值大小,来调整Deployment实例数的上下限值。
图1中为可能存在的扩缩容场景,如下表格以举例的形式说明了不同场景下CronHPA修改HPA的情况。
场景 |
场景说明 |
CronHPA (targetReplicas) |
Deployment (replicas) |
HPA (minReplicas / maxReplicas) |
最终结果 |
操作说明 |
---|---|---|---|---|---|---|
场景一 |
targetReplicas < minReplicas ≤ replicas ≤ maxReplicas |
4 |
5 |
5/10 |
HPA: 4/10 Deployment: 5 |
CronHPA目标实例数低于HPA最小实例数(minReplicas)时:
|
场景二 |
targetReplicas = minReplicas ≤ replicas ≤ maxReplicas |
5 |
6 |
5/10 |
HPA: 5/10 Deployment: 6 |
CronHPA目标实例数等于HPA最小实例数(minReplicas)时:
|
场景三 |
minReplicas < targetReplicas < replicas ≤ maxReplicas |
4 |
5 |
1/10 |
HPA: 4/10 Deployment: 5 |
CronHPA目标实例数大于HPA最小实例数(minReplicas),小于Deployment实例数(replicas)时:
|
场景四 |
minReplicas < targetReplicas = replicas < maxReplicas |
5 |
5 |
1/10 |
HPA: 5/10 Deployment: 5 |
CronHPA目标实例数大于HPA最小实例数(minReplicas),等于Deployment实例数(replicas)时:
|
场景五 |
minReplicas ≤ replicas < targetReplicas < maxReplicas |
6 |
5 |
1/10 |
HPA: 6/10 Deployment: 6 |
CronHPA目标实例数大于Deployment实例数(replicas),小于HPA最大实例数(maxReplicas)时:
|
场景六 |
minReplicas ≤ replicas < targetReplicas = maxReplicas |
10 |
5 |
1/10 |
HPA: 10/10 Deployment: 10 |
CronHPA目标实例数大于Deployment实例数(replicas),等于HPA最大实例数(maxReplicas)时:
|
场景七 |
minReplicas ≤ replicas ≤ maxReplicas < targetReplicas |
11 |
5 |
5/10 |
HPA: 11/11 Deployment: 11 |
CronHPA目标实例数大于HPA最大实例数(maxReplicas)时:
|
使用控制台创建
- 在CCE控制台,单击集群名称进入集群。
- 单击左侧导航栏的“工作负载”,在目标工作负载的操作列中单击“更多 > 弹性伸缩”。
图2 工作负载弹性伸缩
- 策略类型选择“HPA+CronHPA策略”,启用HPA策略,并同时启用CronHPA策略。
此时CronHPA会定时调整HPA策略的最大和最小实例数。
- 设置HPA策略,详情请参见HPA策略。
图3 启用HPA策略
表2 HPA策略配置 参数
参数说明
实例范围
请输入最小实例数和最大实例数。
策略触发时,工作负载实例将在此范围内伸缩。
伸缩配置
- 系统默认:采用社区推荐的默认行为进行负载伸缩,详情请参见社区默认行为说明。
- 自定义:自定义扩/缩容配置的稳定窗口、步长、优先级等策略,实现更灵活的配置。未配置的参数将采用社区推荐的默认值。
- 禁止扩/缩容:选择是否禁止扩容或缩容。
- 稳定窗口:需要伸缩时,会在一段时间(设定的稳定窗口值)内持续检测,如在该时间段内始终需要进行伸缩(不满足设定的指标期望值)才进行伸缩,避免短时间的指标抖动造成异常。
- 步长策略:扩/缩容的步长,可设置一定时间内扩/缩容Pod数量或百分比。在存在多条策略时,可以选择使Pod数量最多或最少的策略。
系统策略
- 在CronHPA的策略规则中单击,在弹出的窗口中设置伸缩策略参数。
图4 启用CronHPA策略
表3 CronHPA策略参数配置 参数
参数说明
目标实例数
策略触发时,将根据实际情况调整HPA策略实例数范围,详情请参见表1。
触发时间
可选择每天、每周、每月或每年的具体时间点。
说明:触发时间基于节点所在时区进行计算。
是否启用
可选择启用或关闭该策略规则。
- 填写完成上述参数,单击“确定”,您可以在列表中查看添加的策略规则。重复以上步骤,您可以添加多条策略规则,但策略的触发时间不能相同。
- 设置完成后,单击“创建”。
使用kubectl命令行创建
当CronHPA与HPA兼容使用时,需要将CronHPA中的scaleTargetRef字段设置为HPA策略,而HPA策略的scaleTargetRef字段设置为Deployment,这样CronHPA策略会在固定的时间调整HPA策略的实例数量上下限,即可实现工作负载定时伸缩和弹性伸缩的兼容。
- 为Deployment创建HPA策略。
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: hpa-test namespace: default spec: maxReplicas: 10 # 最大实例数 minReplicas: 5 # 最小实例数 scaleTargetRef: # 关联Deployment apiVersion: apps/v1 kind: Deployment name: nginx targetCPUUtilizationPercentage: 50
- 创建CronHPA策略,并关联1中创建的HPA策略。
apiVersion: autoscaling.cce.io/v2alpha1 kind: CronHorizontalPodAutoscaler metadata: name: ccetest namespace: default spec: scaleTargetRef: # 关联HPA策略 apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler name: hpa-test rules: - ruleName: "scale-down" schedule: "15 * * * *" # 指定任务运行时间与周期,参数格式请参见Cron,例如0 * * * * 或@hourly。 targetReplicas: 1 # 目标实例数量 disable: false - ruleName: "scale-up" schedule: "13 * * * *" targetReplicas: 11 disable: false
表4 CronHPA关键字段说明 字段
说明
apiVersion
API版本,固定值“autoscaling.cce.io/v2alpha1”。
kind
API类型,固定值“CronHorizontalPodAutoscaler”。
metadata.name
CronHPA策略名称。
metadata.namespace
CronHPA策略所在的命名空间。
spec.scaleTargetRef
指定CronHPA的扩缩容对象,可配置以下字段:
- apiVersion:CronHPA扩缩容对象的API版本。
- kind:CronHPA扩缩容对象的API类型。
- name:CronHPA扩缩容对象的名称。
CronHPA支持HPA策略或Deployment,具体用法请参见使用CronHPA调整HPA伸缩范围或使用CronHPA直接调整Deployment实例数量。
spec.rules
CronHPA策略规则,可添加多个规则。每个规则可配置以下字段:
- ruleName:CronHPA规则名称,该名称需唯一。
- schedule:指定任务运行时间与周期,参数格式与CronTab类似,请参见Cron,例如0 * * * * 或@hourly。
说明:
触发时间基于节点所在时区进行计算。
- targetReplicas:扩缩容的Pod数目。
- disable:参数值为“true”或“false”。其中“false”表示该规则生效,“true”则表示该规则不生效。
使用CronHPA直接调整Deployment实例数量
CronHPA还可以单独调整关联Deployment,定时调整Deployment的实例数,使用方法如下。
使用控制台创建
- 在CCE控制台,单击集群名称进入集群。
- 单击左侧导航栏的“工作负载”,在目标工作负载的操作列中单击“更多 > 弹性伸缩”。
图5 工作负载弹性伸缩
- 策略类型选择“HPA+CronHPA策略”,选择不启用HPA策略,并选择启用CronHPA策略。
此时CronHPA会直接定时调整工作负载的实例数。
- 在CronHPA的策略规则中单击,在弹出的窗口中设置伸缩策略参数。
图6 使用CronHPA调整工作负载实例数
表5 CronHPA策略参数配置 参数
参数说明
目标实例数
策略触发时,工作负载实例将调整至该数值。
触发时间
可选择每天、每周、每月或每年的具体时间点。
说明:触发时间基于节点所在时区进行计算。
是否启用
可选择启用或关闭该策略规则。
- 填写完成上述参数,单击“确定”,您可以在列表中查看添加的策略规则。重复以上步骤,您可以添加多条策略规则,但策略的触发时间不能相同。
- 设置完成后,单击“创建”。
使用kubectl命令行创建
apiVersion: autoscaling.cce.io/v2alpha1 kind: CronHorizontalPodAutoscaler metadata: name: ccetest namespace: default spec: scaleTargetRef: # 关联Deployment apiVersion: apps/v1 kind: Deployment name: nginx rules: - ruleName: "scale-down" schedule: "08 * * * *" # 指定任务运行时间与周期,参数格式请参见Cron,例如0 * * * * 或@hourly。 targetReplicas: 1 disable: false - ruleName: "scale-up" schedule: "05 * * * *" targetReplicas: 3 disable: false