CronHPA 介绍

CronHPA 介绍

Cron Horizontal Pod Autoscaler(CronHPA) 可让用户利用 CronTab 实现对负载(Deployment、StatefulSet、TApp 这些支持扩缩容的资源对象)定期自动扩缩容

CronTab 格式说明如下:

  1. # 文件格式说明
  2. # ——分钟(0 - 59)
  3. # | ——小时(0 - 23)
  4. # | | ——日(1 - 31)
  5. # | | | ——月(1 - 12)
  6. # | | | | ——星期(0 - 6)
  7. # | | | | |
  8. # * * * * *

CronHPA 定义了一个新的 CRD,cron-hpa-controller 是该 CRD 对应的 Controller/operator,它解析 CRD 中的配置,根据系统时间信息对相应的工作负载进行扩缩容操作。

CronHPA 使用场景

以游戏服务为例,从星期五晚上到星期日晚上,游戏玩家数量暴增。如果可以将游戏服务器在星期五晚上扩大规模,并在星期日晚上缩放为原始规模,则可以为玩家提供更好的体验。这就是游戏服务器管理员每周要做的事情。

其他一些服务也会存在类似的情况,这些产品使用情况会定期出现高峰和低谷。CronHPA 可以自动化实现提前扩缩 Pod,为用户提供更好的体验。

部署在集群内 kubernetes 对象

在集群内部署 CronHPA Add-on , 将在集群内部署以下 kubernetes 对象:

kubernetes 对象名称类型默认占用资源所属 Namespaces
cron-hpa-controllerDeployment每节点1核 CPU, 512MB内存kube-system
cronhpas.extensions.tkestack.ioCustomResourceDefinition//
cron-hpa-controllerClusterRoleBinding(ClusterRole/cluster-admin)//
cron-hpa-controllerServiceAccount/kube-system

CronHPA 使用方法

安装 CronHPA

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【扩展组件】页面
  • 选择需要安装组件的集群,点击【新建】按钮,如下图所示:

4.2.4.2. CronHPA 介绍 - 图1

  • 在弹出的扩展组件列表里,滑动列表窗口找到 CronHPA 组件
  • 单击【完成】

在控制台上使用 CronHPA

TKEStack 已经支持在页面多处位置为负载配置 CronHPA

  • 新建负载页(负载包括Deployment、StatefulSet、TApp)这里新建负载时将会同时新建与负载同名的 CronHPA 对象:

4.2.4.2. CronHPA 介绍 - 图2

每条触发策略由两条字段组成

  1. Crontab :例如 “0 23 * * 5”表示每周五23:00,详见crontab
  2. 目标实例数 :设置实例数量

  3. 自动伸缩的 CronHPA 列表页。此处可以查看/修改/新建 CronHPA:

4.2.4.2. CronHPA 介绍 - 图3

通过 YAML 使用 CronHPA

创建 CronHPA 对象

示例1:指定 Deployment 每周五20点扩容到60个实例,周日23点缩容到30个实例

  1. apiVersion: extensions.tkestack.io/v1
  2. kind: CronHPA
  3. metadata:
  4. name: example-cron-hpa # CronHPA 名
  5. spec:
  6. scaleTargetRef:
  7. apiVersion: apps/v1
  8. kind: Deployment # CronHPA 操作的负载类型
  9. name: demo-deployment # CronHPA 操作的负载类型名
  10. crons:
  11. - schedule: "0 20 * * 5" # Crontab 语法格式
  12. targetReplicas: 60 # 负载副本(Pod)的目标数量
  13. - schedule: "0 23 * * 7"
  14. targetReplicas: 30

示例2:指定 Deployment 每天8点到9点,19点到21点扩容到60,其他时间点恢复到10

  1. apiVersion: extensions.tkestack.io/v1
  2. kind: CronHPA
  3. metadata:
  4. name: web-servers-cronhpa
  5. spec:
  6. scaleTargetRef:
  7. apiVersion: apps/v1
  8. kind: Deployment
  9. name: web-servers
  10. crons:
  11. - schedule: "0 8 * * *"
  12. targetReplicas: 60
  13. - schedule: "0 9 * * *"
  14. targetReplicas: 10
  15. - schedule: "0 19 * * *"
  16. targetReplicas: 60
  17. - schedule: "0 21 * * *"
  18. targetReplicas: 10

查看已有 CronHPA

  1. # kubectl get cronhpa
  2. NAME AGE
  3. example-cron-hpa 104s
  4. # kubectl get cronhpa example-cron-hpa -o yaml
  5. apiVersion: extensions.tkestack.io/v1
  6. kind: CronHPA
  7. ...
  8. spec:
  9. crons:
  10. - schedule: 0 20 * * 5
  11. targetReplicas: 60
  12. - schedule: 0 23 * * 7
  13. targetReplicas: 30
  14. scaleTargetRef:
  15. apiVersion: apps/v1
  16. kind: Deployment
  17. name: demo-deployment

删除已有 CronHPA

  1. kubectl delete cronhpa example-cron-hpa

CronHPA 项目请参考 CronHPA Repository