前言
kubernetes-cronhpa-controller
是容器服务开源的一款面向Pod水平定时伸缩场景的CRD controller。在本系列的之前文章中已经向大家介绍了kubernetes-cronhpa-controller的基本用法了,今天我们来看下近期kubernetes-cronhpa-controller
又增加了哪些新的功能。
新功能介绍
Helm Chart控制台集成一键安装
容器服务控制台增加了kubernetes-cronhpa-controller
的Helm Chart的安装方式,提供一键安装的能力,开发者可以通过左侧菜单的应用目录快速集成定时伸缩能力。
单次运行(RunOnce)能力的支持
在kubernetes-cronhpa-controller
的设计中,定时能力是通过类似crontab的语法来实现的,语法的格式如下:
Field name | Mandatory? | Allowed values | Allowed special characters
---------- | ---------- | -------------- | --------------------------
Seconds | Yes | 0-59 | * / , -
Minutes | Yes | 0-59 | * / , -
Hours | Yes | 0-23 | * / , -
Day of month | Yes | 1-31 | * / , - ?
Month | Yes | 1-12 or JAN-DEC | * / , -
Day of week | Yes | 0-6 or SUN-SAT | * / , - ?
举几个常见的用法,例如:"* * * 15 11 *"
表示每年的11月15日,"* * 8 * * *"
表示每天的9点钟等等。但是如果我们只希望明天9点钟运行一次该怎么处理呢?标准的crontab在表达能力上是无法实现的,kubernetes-cronhpa-controller
在定时任务的定义上增加了RunOnce字段,实现了这个能力。
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: cronhpa-sample
spec:
scaleTargetRef:
apiVersion: apps/v1beta2
kind: Deployment
name: nginx-deployment-basic
jobs:
- name: "scale-up"
schedule: "* * 8 * * *"
targetSize: 10
runOnce: true
- name: "scale-down"
schedule: "* * 11 * * *"
targetSize: 3
runOnce: true
当runOnce字段设置为true的时候,任务第一次执行完成后,无论成功与失败,这个任务都会停留在当前的状态。
runOnce字段的设计更多的是考虑到接入的场景,当你希望通过SDK或者接口进行定时扩容的能力时,runOnce可以帮助你解决time schedule侧的逻辑。
日期过滤(excludeDates)能力的支持
应用有很多种不同的类型,有在线应用类型的,有离线任务类型的,他们的资源使用画像也是各不相同。很多行业领域的应用资源画像是非常独特的,比较有代表性的是游戏、证券等行业。例如:证券行业工作日上午9:30-11:30,下午13:00-15:00为交易时间,国家法定节假日休市。其他的时间,只能查询不提供交易。对于这个场景而言,工作日的周期性负载画像很明确,而法定节假日基本等同于波谷。那么kubernetes-cronhpa-controller
要如何支持这个能力呢?kubernetes-cronhpa-controller
在Spec中增加了excludeDates的字段,提供日期排除过滤功能。
例如,我们给一个定时伸缩的任务过滤十一的七天法定假期,Yaml如下:
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: cronhpa-sample
spec:
scaleTargetRef:
apiVersion: apps/v1beta2
kind: Deployment
name: nginx-deployment-basic
excludeDates:
- "* * * 1-7 10 *" # exclude November 15th
jobs:
- name: "scale-up"
schedule: "* 30 8 * * 1-5"
targetSize: 50
- name: "scale-down"
schedule: "* 30 10 * * 1-5 "
targetSize: 5
其中excludeDates字段为一个数组,可以增加更多其他的过滤日期。这样一个典型的有过滤条件的定时伸缩能力就完成。
最后
kubernetes-cronhpa-controller
的项目地址是https://github.com/AliyunContainerService/kubernetes-cronhpa-controller,非常欢迎大家提交issues和pr。