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

容器定時(shí)伸縮(CronHPA)

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

前提條件

背景信息

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

以下舉例對(duì)CronHPA的各字段進(jìn)行解釋說明。

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指定去擴(kuò)縮容對(duì)象。如果對(duì)象支持Scale子資源,CronHPA即可支持。

excludeDates

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

說明

最小單位為。

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

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

excludeDates:
  - "* * * 15 11 *"

jobs

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

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

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

    Cron表達(dá)式的格式如下:

    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)度時(shí),擴(kuò)縮容的Pod數(shù)目。

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

安裝CronHPA組件

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

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

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

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

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

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

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

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

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

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

參數(shù)

描述

定時(shí)任務(wù)名稱

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

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

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

調(diào)度周期

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

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

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

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

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

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

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

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

    • 如果CronHPA組件未被安裝,頁(yè)面提示點(diǎn)擊安裝。單擊點(diǎn)擊安裝后,然后進(jìn)行以下步驟。

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

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

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

    參數(shù)

    描述

    任務(wù)名稱

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

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

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

    調(diào)度周期

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

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

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

  1. 請(qǐng)參見上文創(chuàng)建定時(shí)伸縮CronHPA任務(wù)的步驟進(jìn)入容器伸縮頁(yè)面。

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

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

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

    編輯對(duì)話框中,單擊任務(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	
	

定時(shí)伸縮CronHPA兼容HPA

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

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

  • CronHPA和HPA都是通過scaleTargetRef字段來(lái)獲取伸縮對(duì)象。

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

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

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

CronHPA和HPA的兼容解決方案

從上文可知,CronHPA和HPA同時(shí)使用會(huì)導(dǎo)致后執(zhí)行的操作覆蓋先執(zhí)行操作的本質(zhì)原因是兩個(gè)controller無(wú)法相互感知,那么只需要讓CronHPA感知HPA的當(dāng)前狀態(tài)就能解決沖突問題。HPA的定義將Deployment配置在scaleTargetRef字段下,然后Deployment通過自身定義查找ReplicaSet,最后通過ReplicaSet調(diào)整真實(shí)的副本數(shù)目。阿里云容器服務(wù)ACK將CronHPA中的scaleTargetRef設(shè)置為HPA對(duì)象,然后通過HPA對(duì)象來(lái)尋找真實(shí)的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中的minReplicas、maxReplicasdesiredReplicas的數(shù)值,但是同時(shí)也知曉HPA中scaleTargetRef所對(duì)應(yīng)的當(dāng)前Relicas值。CronHPA會(huì)通過調(diào)整HPA的方式感知HPA。CronHPA通過識(shí)別要達(dá)到的副本數(shù)與當(dāng)前副本數(shù)兩者間的較大值,判斷是否需要擴(kuò)縮容及修改HPA的上限;CronHPA通過識(shí)別CronHPA要達(dá)到的副本數(shù)與HPA的配置間的較小值,判斷是否需要修改HPA的下限。

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

HPA(min/max)

Cronhpa

Deployment

擴(kuò)縮結(jié)果

兼容規(guī)則說明

1/10

5

5

  • HPA(min/max):1/10

  • Deployment:5

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

1/10

4

5

  • HPA(min/max):1/10

  • Deployment:5

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

1/10

6

5

  • HPA(min/max):6/10

  • Deployment:6

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

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

5/10

4

5

  • HPA(min/max):4/10

  • Deployment:5

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

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

5/10

11

5

  • HPA(min/max):11/11

  • Deployment:11

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

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

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

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

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

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

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

常見問題

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

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

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

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

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

      重要

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

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

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

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