概述
在一些復雜的業務場景下,可能有固定時間段高峰業務,又有日常突發高峰業務。此種情況下,用戶既期望能定時彈性伸縮應對固定時間段高峰業務,又期望能根據指標彈性伸縮應對日常突發高峰業務。CCE提供CronHPA的自定義資源,實現在固定時間段對集群進行擴縮容,并且可以和HPA策略共同作用,定時調整HPA伸縮范圍,實現復雜場景下的工作負載伸縮。
前提條件
您已創建集群,請參照 快速入門-?>創建一個集群內容進行創建。
已安裝 cube-cronhpa 最新版本插件。
使用CronHPA直接調整Deployment實例數量
CronHPA可以單獨調整關聯Deployment,定時調整Deployment的實例數,使用方法如下。
apiVersion: autoscaling.ctyun.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: cronhpa-sample
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment-basic
jobs:
- name: "scale-a"
schedule: "30 6 * * * *"
targetSize: 1
- name: "scale-b"
schedule: "01 30 * * * *"
targetSize: 3CronHPA關鍵字段說明
| 字段 | 說明 |
|---|---|
| apiVersion | API版本,固定值 autoscaling.ctyun.com/v1beta1 |
| kind | API類型,固定值 CronHorizontalPodAutoscaler |
| metadata.name | CronHPA策略名稱。 |
| metadata.labels | 策略標簽 |
| metadata.namespace | CronHPA策略所在的命名空間。 |
| spec.scaleTargetRef | 指定CronHPA的擴縮容對象,可配置以下字段: apiVersion:CronHPA擴縮容對象的API版本。 kind:CronHPA擴縮容對象的API類型。 name:CronHPA擴縮容對象的名稱。CronHPA支持HPA策略或Deployment。 |
| spec.jobs | CronHPA策略規則,可添加多個規則。每個規則可配置以下字段: name:CronHPA規則名稱,該名稱需唯一。 schedule:指定任務運行時間與周期,參數格式與go-cron類似,請參見下表。 targetSize:擴縮容的Pod數目。 disable:參數值為“true”或“false”。其中“false”表示該規則生效,“true”則表示該規則不生效。 |
該插件使用的 schedule 時間格式為 go-cron 庫,一共是6位,都是強制填寫。具體格式如下:
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 | * / , - ?使用CronHPA調整HPA伸縮范圍
CronHPA支持定時調整HPA策略的最大和最小實例數,滿足復雜場景下的工作負載伸縮。
由于HPA與CronHPA均通過scaleTargetRef字段來獲取伸縮對象,如果CronHPA和HPA同時設置Deployment為伸縮對象,兩個伸縮策略相互獨立,后執行的操作會覆蓋先執行的操作,導致伸縮效果不符合預期,因此需避免這種情況發生。
當CronHPA與HPA兼容使用時,需要將CronHPA中的scaleTargetRef字段設置為HPA策略,而HPA策略的scaleTargetRef字段設置為Deployment,這樣CronHPA策略會在固定的時間調整HPA策略的實例數量上下限,即可實現工作負載定時伸縮和彈性伸縮的兼容。
步驟 1 為Deployment創建HPA策略。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-deployment-basic-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment-basic
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 32步驟 2 創建CronHPA策略,并關聯步驟1中創建的HPA策略。
apiVersion: autoscaling.ctyun.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: cronhpa-sample
spec:
scaleTargetRef:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
name: nginx-deployment-basic-hpa
jobs:
- name: "scale-a"
schedule: "0 51 * * * *"
targetSize: 1
- name: "scale-b"
schedule: "0 58 * * * *"
targetSize: 3在CronHPA與HPA共同使用時,CronHPA規則是在HPA策略的基礎上生效的,CronHPA不會直接調整Deployment的副本數目,而是通過HPA來操作Deployment,因此了解以下參數可幫助您更好地理解其工作原理。
CronHPA的目標實例數(targetReplicas):表示CronHPA設定的實例數,在CronHPA生效時用于調整HPA的最大/最小實例數,從而間接調整Deployment實例數。
HPA的最小實例數(minReplicas):Deployment的實例數下限。
HPA的最大實例數(maxReplicas):Deployment的實例數上限。
Deployment的實例數(replicas):CronHPA策略生效之前Deployment的Pod數量。
在CronHPA規則生效時,通過比較目標實例數(targetReplicas)與實際Deployment的實例數,并結合HPA的最小實例數或最小實例數的數值大小,來調整Deployment實例數的上下限值。
下表格以舉例的形式說明了不同場景下CronHPA修改HPA的情況。
擴縮容條件 | 擴縮容結果 | 兼容規則說明 | ||
HPA(min/max) | CronHPA目標副本數 | 當前副本數 | ||
1/10 | 5 | 5 |
| 當CronHPA中的目標副本數和當前副本數一致時,HPA中的minReplicas和maxReplicas以及當前的副本數無需變更。 |
1/10 | 4 | 5 |
| 當CronHPA中的目標副本數低于當前副本數時,保留當前副本數。 |
1/10 | 6 | 5 |
|
|
5/10 | 4 | 5 |
|
|
5/10 | 11 | 5 |
|
|
創建定時伸縮任務
登錄云容器引擎控制臺,選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇工作負載 -> 無狀態。
在無狀態頁面,單擊應用右側“更多”操作列下的彈性伸縮。
如果 cube-cronhpa 組件未被安裝,頁面提示點擊安裝。單擊點擊安裝后,然后進行以下步驟。
點擊 CronHPA 策略的啟用策略,添加策略規則.