日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

容器定時伸縮(CronHPA)

應(yīng)對資源浪費的場景,阿里云服務(wù)容器提供kubernetes-cronhpa-controller組件,實現(xiàn)資源定時擴容。本文介紹如何實現(xiàn)容器的定時伸縮,及介紹定時伸縮CronHPA兼容HPA的原理。

前提條件

背景信息

kubernetes-cronhpa-controller是一個Kubernetes HPA Controller,按照類似Crontab的策略定時地對集群進行擴縮容。您可以把CronHorizontalPodAutoscaler(以下簡稱CronHPA)用在任何Kubernetes中定義的對象上,只要該對象支持伸縮子資源(如Deployment和StatefulSet)的項目已在GitHub開源。

以下舉例對CronHPA的各字段進行解釋說明。

apiVersion: autoscaling.alibabacloud.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
   excludeDates:
   # exclude November 15th
   - "* * * 15 11 *"
   # exclude every Friday 
   - "* * * * * 5"
   jobs:
   - name: "scale-down"
     schedule: "30 */1 * * * *"
     targetSize: 1
   - name: "scale-up"
     schedule: "0 */1 * * * *"
     targetSize: 3
     runOnce: false

字段

說明

scaleTargetRef

scaleTargetRef指定去擴縮容對象。如果對象支持Scale子資源,CronHPA即可支持。

excludeDates

excludeDates是日期數(shù)組。當(dāng)遇到符合excludeDates描述的日期時任務(wù)將會被跳過。

說明

最小單位為

"* * * * * *"表示"<Seconds> <Minutes> <Hours> <Day of month> <Month> <Day of week>"。

如您想在11月15日不運行任務(wù),可像以下示例一樣指定excludeDates

excludeDates:
  - "* * * 15 11 *"

jobs

支持在一個spec中設(shè)定多個CronHPA任務(wù)。每個CronHPA任務(wù)可以配置以下字段:

  • name:它在一個CronHPA中應(yīng)是唯一的,這樣就可以通過name來區(qū)分不同的任務(wù)。

  • schedule:它的策略和crontab類似。kubernetes-cronhpa-controller使用了Golang庫(go-cron)功能更強大的Cron,它支持更多表示規(guī)則。創(chuàng)建時請嚴(yán)格按照以下格式說明進行設(shè)置,否則將導(dǎo)致創(chuàng)建失敗。

    Cron表達式的格式如下:

    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  | * / , - ?
  • targetSize:設(shè)置調(diào)度時,擴縮容的Pod數(shù)目。

  • runOnce:如果runOnce設(shè)置為true,那么任務(wù)將只執(zhí)行一次,第一次執(zhí)行完則exit。

安裝CronHPA組件

您可以通過以下方式安裝CronHPA組件ack-kubernetes-cronhpa-controller。

  1. 登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群

  2. 集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇運維管理 > 組件管理

  3. 組件管理頁面單擊應(yīng)用管理頁簽,找到ack-kubernetes-cronhpa-controller,然后單擊安裝

如果您無需使用容器定時伸縮功能,可以刪除CronHPA組件。關(guān)于刪除CronHPA組件ack-kubernetes-cronhpa-controller的具體步驟,請參見管理組件基于Helm的發(fā)布管理

創(chuàng)建定時伸縮CronHPA任務(wù)

為應(yīng)用創(chuàng)建和運行CronHPA前,請確保集群中的CronHPA組件已正常運行,且當(dāng)前應(yīng)用只有一個HPA對象。關(guān)于CronHPA和HPA的兼容策略,請參見下文的定時伸縮CronHPA兼容HPA。您可以在以下兩種場景中創(chuàng)建CronHPA任務(wù)。

場景一:在創(chuàng)建應(yīng)用時創(chuàng)建CronHPA任務(wù)

在創(chuàng)建應(yīng)用的高級配置頁面的伸縮配置區(qū)域,選中定時伸縮右側(cè)開啟為應(yīng)用創(chuàng)建定時伸縮任務(wù)。關(guān)于創(chuàng)建應(yīng)用的詳細步驟,請參見創(chuàng)建無狀態(tài)工作負(fù)載Deployment或者創(chuàng)建有狀態(tài)工作負(fù)載StatefulSetcronhpa

容器服務(wù)管理控制臺會自動檢查是否已安裝CronHPA組件。如果CronHPA組件未被安裝,頁面提示點擊安裝。安裝CronHPA組件后,頁面顯示定時伸縮任務(wù)的創(chuàng)建配置。配置參數(shù)的詳細描述如下:

參數(shù)

描述

定時任務(wù)名稱

為定時任務(wù)定義名稱。每個任務(wù)的名稱是唯一的,不能與其他任務(wù)名稱重復(fù)。

目標(biāo)副本數(shù)

當(dāng)?shù)竭_設(shè)定計劃時間時,應(yīng)用副本數(shù)自動伸縮至該值。

調(diào)度周期

設(shè)置調(diào)度周期。

關(guān)于為定時伸縮任務(wù)設(shè)置調(diào)度周期的詳細描述,請參見AliyunContainerService/kubernetes-cronhpa-controller

場景二:為已有應(yīng)用創(chuàng)建CronHPA任務(wù)

本文以為無狀態(tài)應(yīng)用創(chuàng)建定時伸縮任務(wù)為例,說明如何為已有應(yīng)用創(chuàng)建CronHPA任務(wù)。

  1. 登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群

  2. 集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇工作負(fù)載 > 無狀態(tài)

  3. 無狀態(tài)頁面,單擊應(yīng)用右側(cè)操作列下的詳情

  4. 單擊容器伸縮頁簽,配置定時伸縮任務(wù)。

    • 如果CronHPA組件未被安裝,頁面提示點擊安裝。單擊點擊安裝后,然后進行以下步驟。

    • 如果CronHPA組件已被安裝,直接進行以下步驟。

  5. 單擊定時伸縮(CronHPA)右側(cè)創(chuàng)建,然后在創(chuàng)建對話框中,設(shè)置定時伸縮任務(wù)的創(chuàng)建參數(shù)。create

    配置參數(shù)的詳細描述如下:

    參數(shù)

    描述

    任務(wù)名稱

    為定時任務(wù)定義名稱。每個任務(wù)的名稱是唯一的,不能與其他任務(wù)名稱重復(fù)。

    目標(biāo)副本數(shù)

    當(dāng)?shù)竭_設(shè)定計劃時間時,應(yīng)用副本數(shù)自動伸縮至該值。

    調(diào)度周期

    設(shè)置調(diào)度周期。

    關(guān)于為定時伸縮任務(wù)設(shè)置調(diào)度周期的詳細描述,請參見AliyunContainerService/kubernetes-cronhpa-controller

添加或修改定時伸縮任務(wù)

  1. 請參見上文創(chuàng)建定時伸縮CronHPA任務(wù)的步驟進入容器伸縮頁面。

  2. 容器伸縮頁簽的定時伸縮(CronHPA)區(qū)域,單擊目標(biāo)任務(wù)右側(cè)操作下的任務(wù)添加或編輯

  3. 編輯對話框中,單擊添加任務(wù)進行任務(wù)創(chuàng)建或者單擊已有CronHPA任務(wù)進行修改,然后單擊確定

    modify您可以進行以下操作刪除CronHPA任務(wù)。

    編輯對話框中,單擊任務(wù)名稱右上角的刪除圖標(biāo),然后單擊確定delete

CronHPA和HPA的定義模板

CronHPA

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: cronhpa-sample
spec:
   scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: nginx-deployment-basic
   jobs:
   - name: "scale-down"
     schedule: "30 */1 * * * *"
     targetSize: 1
   - name: "scale-up"
     schedule: "0 */1 * * * *"
     targetSize: 11	
	

HPA

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment-basic
  minReplicas: 4
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50	
	

定時伸縮CronHPA兼容HPA

定時伸縮CronHPA通過設(shè)置定時的方式觸發(fā)容器的水平副本伸縮。為了防止突發(fā)的流量沖擊等狀況,您可能已經(jīng)或者打算配置HPA保障應(yīng)用的正常運行。如果同時檢測到了HPA和CronHPA的存在,阿里云容器服務(wù)ACK會將HPA作為定時伸縮CronHPA的擴縮容對象,從而實現(xiàn)對該HPA定義的Deployment對象的定時擴縮容。

對比CronHPA和HPA的定義模板,可以看出:

  • CronHPA和HPA都是通過scaleTargetRef字段來獲取伸縮對象。

  • CronHPA通過jobscrontab規(guī)則定時伸縮副本數(shù)。

  • HPA通過資源利用率判斷伸縮的情況。

設(shè)想如果同時設(shè)置CronHPA和HPA,那么會出現(xiàn)CronHPA和HPA同時操作一個scaleTargetRef的場景。因為CronHPA和HPA相互獨立無法感知,所以就會出現(xiàn)兩個Controller各自工作,后執(zhí)行的操作會覆蓋先執(zhí)行的操作。

CronHPA和HPA的兼容解決方案

從上文可知,CronHPA和HPA同時使用會導(dǎo)致后執(zhí)行的操作覆蓋先執(zhí)行操作的本質(zhì)原因是兩個controller無法相互感知,那么只需要讓CronHPA感知HPA的當(dāng)前狀態(tài)就能解決沖突問題。HPA的定義將Deployment配置在scaleTargetRef字段下,然后Deployment通過自身定義查找ReplicaSet,最后通過ReplicaSet調(diào)整真實的副本數(shù)目。阿里云容器服務(wù)ACK將CronHPA中的scaleTargetRef設(shè)置為HPA對象,然后通過HPA對象來尋找真實的scaleTargetRef,從而讓CronHPA感知HPA的當(dāng)前狀態(tài)。

cronhpa

CronHPA兼容HPA的定義模板如下。

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: cronhpa-sample
spec:
   scaleTargetRef:
      apiVersion: autoscaling/v1
      kind: HorizontalPodAutoscaler
      name:  nginx-deployment-basic-hpa
   jobs:
   - name: "scale-down"
     schedule: "30 */1 * * * *"
     targetSize: 1
     runOnce: false
   - name: "scale-up"
     schedule: "0 */1 * * * *"
     targetSize: 3
     runOnce: false

通過上述CronHPA的定義,CronHPA可以明確知曉HPA中的minReplicasmaxReplicasdesiredReplicas的數(shù)值,但是同時也知曉HPA中scaleTargetRef所對應(yīng)的當(dāng)前Relicas值。CronHPA會通過調(diào)整HPA的方式感知HPA。CronHPA通過識別要達到的副本數(shù)與當(dāng)前副本數(shù)兩者間的較大值,判斷是否需要擴縮容及修改HPA的上限;CronHPA通過識別CronHPA要達到的副本數(shù)與HPA的配置間的較小值,判斷是否需要修改HPA的下限。

以下根據(jù)不同的場景,解釋CronHPA兼容HPA的規(guī)則。

HPA(min/max)

Cronhpa

Deployment

擴縮結(jié)果

兼容規(guī)則說明

1/10

5

5

  • HPA(min/max):1/10

  • Deployment:5

當(dāng)CronHPA中的目標(biāo)副本數(shù)和當(dāng)前副本數(shù)一致時,HPA中的最大和最小副本數(shù),還有應(yīng)用當(dāng)前的副本數(shù)無需變更。

1/10

4

5

  • HPA(min/max):1/10

  • Deployment:5

當(dāng)CronHPA中的目標(biāo)副本數(shù)低于當(dāng)前副本數(shù)時,保留當(dāng)前副本數(shù)。

1/10

6

5

  • HPA(min/max):6/10

  • Deployment:6

  • 當(dāng)CronHPA中的目標(biāo)副本數(shù)高于當(dāng)前副本數(shù)時,保留CronHPA的目標(biāo)副本數(shù)。

  • CronHPA目標(biāo)副本數(shù)高于HPA副本數(shù)下限(minReplicas)時,修改HPA的副本數(shù)下限。

5/10

4

5

  • HPA(min/max):4/10

  • Deployment:5

  • 當(dāng)CronHPA中的目標(biāo)副本數(shù)低于當(dāng)前副本數(shù)時,保留當(dāng)前應(yīng)用副本數(shù)。

  • CronHPA目標(biāo)副本數(shù)低于HPA副本數(shù)下限(minReplicas)時,修改HPA的副本數(shù)下限。

5/10

11

5

  • HPA(min/max):11/11

  • Deployment:11

  • 當(dāng)CronHPA中的目標(biāo)副本數(shù)高于當(dāng)前副本數(shù)時,保留CronHPA的目標(biāo)副本數(shù)。

  • CronHPA目標(biāo)副本數(shù)高于HPA副本數(shù)上限(maxReplicas)時,修改HPA的副本數(shù)上限。

表格中參數(shù)說明如下:

  • HPA(min/max):表示HPA定義中最小和最大的副本數(shù)值。

  • CronHPA:表示CronHPA任務(wù)設(shè)定的副本數(shù)。

  • Deployment:表示應(yīng)用擴縮前的副本數(shù)。

從上述看出,CronHPA不會直接調(diào)整Deployment的副本數(shù)目,而是通過HPA來操作Deployment,這樣可以避免HPA和CronHPA的沖突問題。

常見問題

如何卸載ack-kubernetes-cronhpa-controller組件?

  1. 登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群

  2. 集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇應(yīng)用 > Helm

  3. Helm頁面,查看是否存在ack-kubernetes-cronhpa-controller組件。

    • 如果存在,請單擊該組件右側(cè)操作列下的刪除

      重要

      通過Helm方式刪除該組件,不會刪除CRD和已創(chuàng)建的Task資源,如需徹底刪除CronHPA相關(guān)資源,請手動刪除。

    • 如果不存在,請轉(zhuǎn)下一步。

  4. 在集群管理頁左側(cè)導(dǎo)航欄,選擇運維管理 > 組件管理

  5. 組件管理頁面,找到ack-kubernetes-cronhpa-controller組件,單擊右下方的卸載