前言
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 https://github.com/AliyunContainerService/kubernetes-cronhpa-controller,非常歡迎大家送出issues和pr。