天天看點

Kubernetes彈性伸縮全場景解讀(七) - 定時伸縮元件釋出日期過濾等功能

前言

kubernetes-cronhpa-controller

是容器服務開源的一款面向Pod水準定時伸縮場景的CRD controller。在本系列的之前文章中已經向大家介紹了

kubernetes-cronhpa-controller的基本用法

了,今天我們來看下近期

kubernetes-cronhpa-controller

又增加了哪些新的功能。

新功能介紹

Kubernetes彈性伸縮全場景解讀(七) - 定時伸縮元件釋出日期過濾等功能

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。

繼續閱讀