搜索本产品文档关键词
CCE CronHPA Controller 说明
所有文档
menu
没有找到结果,请重新输入

容器引擎 CCE

CCE CronHPA Controller 说明

组件介绍

CCE定时扩缩容管理组件(CCE-CronHPA-Controller)支持用户通过CRD的方式创建定时规则以对工作负载进行扩缩容。对于具有明显周期性负载的应用,可以通过容器定时水平伸缩的方式提供预弹的能力。

组件功能

  • 对指定的工作负载副本数进行定时扩缩容

使用场景

  • 根据预定的时间表来调整集群资源,通过设定一系列的任务,CronHPA可以在预设的时间点自动执行扩容或缩容操作。
  • 保证在用户访问量激增时,系统资源已经按预期配置调整到位,避免因扩容延迟引发的服务中断。

使用限制

  • 支持v1.16及以上版本的Kubernetes集群

安装组件

  1. 登录百度智能云官网,并进入管理控制台。
  2. 选择”产品服务>云原生>容器引擎CCE”,单击进入容器引擎管理控制台。
  3. 单击左侧导航栏中的”集群管理>集群列表”。
  4. 在集群列表页面中,单击目标集群名称进入集群管理页面。
  5. 在集群管理页面单击”组件管理”。
  6. 在组件管理列表中选择“CCE CronHPA Controller”组件单击”安装”。
  7. 点击“确认”按钮完成组件的安装。

部署情况

安装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 任务不触发的时间 可选

其中scheduleexcludeDates需要按照如下格式配置:

字段名称 是否必填 允许值 允许的特殊字符
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的上下限来调整副本数。

image

以下是一些兼容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 首次上线 -
上一篇
CCE LB Controller 说明
下一篇
CCE CSI PFS L2 Plugin