CCE CronHPA Controller 说明
更新时间:2024-04-24
组件介绍
CCE定时扩缩容管理组件(CCE-CronHPA-Controller)支持用户通过CRD的方式创建定时规则以对工作负载进行扩缩容。对于具有明显周期性负载的应用,可以通过容器定时水平伸缩的方式提供预弹的能力。
组件功能
- 对指定的工作负载副本数进行定时扩缩容
使用场景
- 根据预定的时间表来调整集群资源,通过设定一系列的任务,CronHPA可以在预设的时间点自动执行扩容或缩容操作。
- 保证在用户访问量激增时,系统资源已经按预期配置调整到位,避免因扩容延迟引发的服务中断。
使用限制
- 支持v1.16及以上版本的Kubernetes集群
安装组件
- 登录百度智能云官网,并进入管理控制台。
- 选择”产品服务>云原生>容器引擎CCE”,单击进入容器引擎管理控制台。
- 单击左侧导航栏中的”集群管理>集群列表”。
- 在集群列表页面中,单击目标集群名称进入集群管理页面。
- 在集群管理页面单击”组件管理”。
- 在组件管理列表中选择“CCE CronHPA Controller”组件单击”安装”。
- 点击“确认”按钮完成组件的安装。
部署情况
安装CCE CronHPA Controller组件,将在Kubernetes集群中部署以下对象:
对象名称 | 所属namespace | 所占资源 | 类型 |
---|---|---|---|
cronhpas.cce.baidubce.com | kube-system | - | CRD |
cce-cronhpa-controller | kube-system | CPU:100m Memory:100Mi | Deployment |
使用
通过yaml的方式在集群中部署CronHPA,CCE CronHPA Controller监听到CronHPA的创建进行相应的逻辑处理。
CronHPA模版示例
apiVersion: cce.baidubce.com/v1
kind: CronHPA
metadata:
name: cronhpa-sample
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment-basic
excludeDates:
- "* * * 15 11 *"
- "* * * 1 11 *"
crons:
- name: "scale-down"
schedule: "30 */1 * * * *"
targetSize: 1
runOnce: true
- name: "scale-up"
schedule: "01 */1 * * * *"
targetSize: 3
部署参数介绍
名称 | 作用 | 是否必须 |
---|---|---|
spec.scaleTargetRef | 期望扩缩容对象的元数据 | 必须 |
crons.name | 任务名称 | 必须 |
crons.schedule | 任务触发的时间 | 必须 |
crons.targetSize | 期望副本数 | 必须 |
spec.excludeDates | 任务不触发的时间 | 可选 |
其中schedule
同excludeDates
需要按照如下格式配置:
字段名称 | 是否必填 | 允许值 | 允许的特殊字符 |
---|---|---|---|
Seconds | 是 | 0-59 | */,- |
Minutes | 是 | 0-59 | */,- |
Hours | 是 | 0-23 | */,- |
Day of month | 是 | 1-31 | */,-? |
Month | 是 | 1-12 或 JAN-DEC | */,- |
Day of week | 是 | 0-6 或 SUN-SAT | */,-? |
特殊字符说明
- 星号 (*) 表示表达式能匹配该字段的所有值。如在第5个字段使用星号(month),表示每个月。
- 斜线(/) 表示增长间隔,如第1个字段(minutes) 值是 3-59/15,表示每小时的第3分钟开始执行一次,之后每隔 15 分钟执行一次(即 3、18、33、48 这些时间点执行),这里也可以表示为:3/15
- 逗号(,) 用于枚举值,如第6个字段值是 MON,WED,FRI,表示 星期一、三、五 执行。
- 连字号(-) 表示一个范围,如第3个字段的值为 9-17 表示 9am 到 5pm 直接每个小时(包括9和17))
- 问号(?) 只用于日(Day of month)和星期(Day of week),\表示不指定值,可以用于代替 *
cron举例说明
- 每隔5秒执行一次:/5 * * * ?
- 每隔1分钟执行一次:0 /1 * * ?
- 每天23点执行一次:0 0 23 * * ?
- 每天凌晨1点执行一次:0 0 1 * * ?
- 每月1号凌晨1点执行一次:0 0 1 1 * ?
- 在26分、29分、33分执行一次:0 26,29,33 * * * ?
- 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?
CronHPA扩缩容普通对象示例
CronHPA要应用在普通工作负载只需要将spec.scaleTargetRef
字段配置成该工作负载的信息,以下是一个具体的CronHPA扩缩容Deployment的示例:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment-basic
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: cce.baidubce.com/v1
kind: CronHPA
metadata:
name: cronhpa-sample
spec:
scaleTargetRef: //配置成以上deployment的信息
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment-basic
crons:
- name: "scale-down"
schedule: "30 */1 * * * *"
targetSize: 1
- name: "scale-up"
schedule: "01 */1 * * * *"
targetSize: 3
CronHPA兼容HPA
从CronHPA和HPA的模板定义中可以看出:
- CronHPA和HPA都是通过scaleTargetRef字段来获取伸缩对象。
- CronHPA通过jobs的crontab规则定时伸缩副本数。
- HPA通过资源利用率判断伸缩的情况。
如果同时设置CronHPA和HPA,那么会出现CronHPA和HPA同时操作一个scaleTargetRef的场景。CronHPA和HPA相互独立无法感知,后执行的操作会覆盖先执行的操作,例如刚刚定时扩容完成但是又由于资源利用率低被缩容回去了。
所以当期望扩缩容的对象被HPA引用的时候,为了避免HPA与CronHPA的冲突导致结果被覆盖,需要把spec.scaleTargetRef
配置为对应的HPA对象,这样CronHPA能够感知HPA的状态并且通过调整HPA的上下限来调整副本数。
以下是一些兼容CronHPA与HPA来实现定时扩缩容的具体场景示例:
HPA(min/max) | CronHPA | deployment | result | 说明 |
---|---|---|---|---|
1/10 | 5 | 5 | HPA(1/10) deployment 5 | CronHPA期望副本数为固定一致,无需变更 |
1/10 | 4 | 5 | HPA(1/10) deployment 5 | 当前副本数5高于CronHPA期望副本数4,并且期望副本数在区间[1,10]内,无需变更 |
1/10 | 6 | 5 | HPA(6/10) deployment 6 | CronHPA期望副本数6高于当前副本数5,调整HPA下限自动扩容副本数至6 |
5/10 | 4 | 5 | HPA(4/10) deployment 5 | CronHPA期望副本数低于当前副本数5,保留当前副本数 CronHPA期望副本数低于HPA下限,修改HPA下限(保证至少有4个副本) |
5/10 | 11 | 5 | HPA(11/11) deployment 11 | CronHPA期望副本数高于HPA上限,修改HPA下限至CronHPA期望副本数,上限同下限 |
如下是CronHPA兼容HPA具体的yaml示例:
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: nginx-deployment-basic-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment-basic
minReplicas: 1
maxReplicas: 10
targetCPUUtilizationPercentage: 50
---
apiVersion: cce.baidubce.com/v1
kind: CronHPA
metadata:
name: cronhpa-sample
spec:
scaleTargetRef://配置为HPA对象
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
name: nginx-deployment-basic-hpa
crons:
- name: "scale-down"
schedule: "30 */1 * * * *"
targetSize: 5
runOnce: false
- name: "scale-up"
schedule: "01 */1 * * * *"
targetSize: 10
runOnce: false
版本记录
版本号 | 适配集群版本 | 更新时间 | 更新内容 | 影响 |
---|---|---|---|---|
0.1.0 | CCE/v1.16+ | 2024.03.15 | 首次上线 | - |