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

基于流量請(qǐng)求數(shù)實(shí)現(xiàn)服務(wù)自動(dòng)擴(kuò)縮容

更新時(shí)間:

Knative on ASM中提供開(kāi)箱即用、基于流量請(qǐng)求的自動(dòng)擴(kuò)縮容KPA(Knative Pod Autoscaler)功能。當(dāng)您遇到因業(yè)務(wù)流量波動(dòng)導(dǎo)致的服務(wù)性能不穩(wěn)定或資源浪費(fèi)問(wèn)題時(shí),可以基于流量請(qǐng)求數(shù)實(shí)現(xiàn)服務(wù)自動(dòng)擴(kuò)縮容。通過(guò)監(jiān)控和分析實(shí)時(shí)流量數(shù)據(jù)動(dòng)態(tài)調(diào)整服務(wù)實(shí)例數(shù),既能保障高峰期的服務(wù)質(zhì)量和用戶體驗(yàn),又能有效節(jié)約閑置資源,在降低成本的同時(shí)提高系統(tǒng)整體效能。

前提條件

已使用Knative on ASM創(chuàng)建Knative服務(wù)。具體操作,請(qǐng)參見(jiàn)使用Knative on ASM部署Serverless應(yīng)用

說(shuō)明

本示例以默認(rèn)域名example.com為例為您演示功能。如需使用自定義域名, 請(qǐng)參見(jiàn)在Knative on ASM中使用自定義域名

自動(dòng)擴(kuò)縮容介紹

Knative Serving為每個(gè)Pod注入QUEUE代理容器(queue-proxy)。該容器負(fù)責(zé)向Autoscaler報(bào)告業(yè)務(wù)容器的并發(fā)指標(biāo)。接收到這些指標(biāo)之后,Autoscaler會(huì)根據(jù)并發(fā)請(qǐng)求數(shù)及縮放算法,調(diào)整Deployment的Pod數(shù)量,從而實(shí)現(xiàn)自動(dòng)擴(kuò)縮容。

擴(kuò)縮容

并發(fā)數(shù)和QPS

并發(fā)數(shù)指同一時(shí)刻Pod的接收的請(qǐng)求數(shù);QPS指Pod每秒響應(yīng)的請(qǐng)求數(shù),即最大吞吐能力。

并發(fā)數(shù)的增加并不一定會(huì)導(dǎo)致QPS增加。應(yīng)用在訪問(wèn)壓力較大的情況下,如果并發(fā)數(shù)增加,可能導(dǎo)致系統(tǒng)超負(fù)荷工作,CPU、內(nèi)存等其他消耗導(dǎo)致系統(tǒng)性能下降,從而導(dǎo)致響應(yīng)延遲,QPS反而會(huì)下降。

算法

Knative Pod Autoscaler(KPA)基于每個(gè)Pod的平均請(qǐng)求數(shù)(或并發(fā)數(shù))進(jìn)行自動(dòng)擴(kuò)縮容,Knative默認(rèn)使用基于并發(fā)數(shù)的自動(dòng)彈性,每個(gè)Pod的最大并發(fā)數(shù)為100。此外,Knative還提供了目標(biāo)使用率(target-utilization-percentage)的概念,用于指定自動(dòng)擴(kuò)縮容的目標(biāo)使用率。

基于并發(fā)數(shù)彈性為例,Pod數(shù)計(jì)算方式如為:Pod數(shù)=并發(fā)請(qǐng)求總數(shù)/(Pod最大并發(fā)數(shù)*目標(biāo)使用率)

例如,如果服務(wù)中Pod最大并發(fā)數(shù)設(shè)置為10,目標(biāo)使用率設(shè)置為0.7,此時(shí)如果接收到了100個(gè)并發(fā)請(qǐng)求,則Autoscaler就會(huì)創(chuàng)建15個(gè)Pod(即100/(0.7*10)≈15)。

KPA基于每個(gè)Pod的平均請(qǐng)求數(shù)(或并發(fā)數(shù))來(lái)進(jìn)行自動(dòng)擴(kuò)縮容,并結(jié)合了Stable穩(wěn)定模式和Panic恐慌模式兩個(gè)概念,以實(shí)現(xiàn)精細(xì)化的彈性。

  • Stable穩(wěn)定模式

    在穩(wěn)定模式中,KPA會(huì)在默認(rèn)的穩(wěn)定窗口期(默認(rèn)為60秒)內(nèi)計(jì)算Pod的平均并發(fā)數(shù)。根據(jù)這個(gè)平均并發(fā)數(shù),KPA會(huì)調(diào)整Pod的數(shù)量,以保持穩(wěn)定的負(fù)載水平。

  • Panic恐慌模式

    在恐慌模式中,KPA會(huì)在恐慌窗口期(默認(rèn)為6秒)內(nèi)計(jì)算Pod的平均并發(fā)數(shù)。恐慌窗口期=穩(wěn)定窗口期*panic-window-percentage(panic-window-percentage取值是0~1,默認(rèn)是0.1)。當(dāng)請(qǐng)求突然增加導(dǎo)致當(dāng)前Pod的使用率超過(guò)恐慌窗口百分比時(shí),KPA會(huì)快速增加Pod的數(shù)量以滿足負(fù)載需求。

在KPA中,彈性生效的判斷是基于恐慌模式下計(jì)算得出的Pod數(shù)量是否超過(guò)恐慌閾值(PanicThreshold)。恐慌閾值=panic-threshold-percentage/100,panic-threshold-percentage默認(rèn)為200,即恐慌閾值默認(rèn)為2。

綜上所述,如果在恐慌模式下計(jì)算得出的Pod數(shù)量大于或等于當(dāng)前Ready Pod數(shù)量的兩倍,那么KPA將使用恐慌模式下計(jì)算得出的Pod數(shù)量進(jìn)行彈性生效;否則,將使用穩(wěn)定模式下計(jì)算得出的Pod數(shù)量。

KPA配置介紹

KPA的全局默認(rèn)配置位于kantive-serving命名空間下ConfigMap的config-autoscaler中。您可以執(zhí)行以下命令,查看config-autoscaler的默認(rèn)配置。下文介紹重點(diǎn)參數(shù)。

kubectl -n knative-serving get cm config-autoscaler -o yaml

預(yù)期輸出(已忽略代碼中的注釋部分):

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-autoscaler
  namespace: knative-serving
data:
  _example:
    container-concurrency-target-default: "100"
    container-concurrency-target-percentage: "0.7"
    enable-scale-to-zero: "true"
    max-scale-up-rate: "1000"
    max-scale-down-rate: "2"
    panic-window-percentage: "10"
    panic-threshold-percentage: "200"
    scale-to-zero-grace-period: "30s"
    scale-to-zero-pod-retention-period: "0s"
    stable-window: "60s"
    target-burst-capacity: "200"
    requests-per-second-target-default: "200"

_example字段下展示的參數(shù)配置為默認(rèn)值。如需修改,請(qǐng)將_example字段下相應(yīng)的字段復(fù)制到data字段下進(jìn)行修改。

說(shuō)明

對(duì)config-autoscaler所做的修改對(duì)全局的Knative service生效。如需單獨(dú)對(duì)某個(gè)Knative service進(jìn)行修改,您可以通過(guò)Annotation注解的方式。具體操作,請(qǐng)參考下文場(chǎng)景一:設(shè)置并發(fā)請(qǐng)求數(shù)實(shí)現(xiàn)自動(dòng)擴(kuò)縮容場(chǎng)景二:設(shè)置擴(kuò)縮容邊界實(shí)現(xiàn)自動(dòng)擴(kuò)縮容

為KPA配置縮容至0

字段

描述

示例值

scale-to-zero-grace-period

在縮容至0之前,inactive revision保留的運(yùn)行時(shí)間(最小時(shí)間為30s)。

30s

stable-window

Stable模式運(yùn)行時(shí),Autoscaler在穩(wěn)定窗口期下平均并發(fā)數(shù)下的操作。此外, stable-window也可以在Revision注釋中配置,例如autoscaling.knative.dev/window: 60s

60s

enable-scale-to-zero

設(shè)置字段為true

true

配置Autoscaler的并發(fā)數(shù)

字段

描述

示例值

container-concurrency-target-default

定義在指定時(shí)間(軟限制)需要多少并發(fā)請(qǐng)求,為Knative中Autoscaler的推薦配置。ConfigMap中默認(rèn)配置的并發(fā)target為100。

此外, 此字段值可以通過(guò)Revision中的autoscaling.knative.dev/target注釋進(jìn)行修改,例如autoscaling.knative.dev/target: 50

100

containerConcurrency

限制在給定時(shí)間內(nèi)允許并發(fā)請(qǐng)求的數(shù)量。

  • 1:確保一次只有1個(gè)請(qǐng)求由Revision給定的容器實(shí)例處理。

  • 2-N:請(qǐng)求的并發(fā)值限制為2或更多。

  • 0:不作限制,由系統(tǒng)自身決定。

0

container-concurrency-target-percentage

并發(fā)百分比,即并發(fā)因子,會(huì)直接參與擴(kuò)縮容并發(fā)數(shù)計(jì)算。實(shí)際擴(kuò)縮容并發(fā)數(shù)=target(或者containerConcurrency)*container-concurrency-target-percentage。例如,如果并發(fā)數(shù)target或者containerConcurrency設(shè)置值為100,并發(fā)因子container-concurrency-target-percentage為0.7,那么實(shí)際擔(dān)當(dāng)并發(fā)數(shù)達(dá)到70(100*0.7)時(shí)就會(huì)觸發(fā)擴(kuò)容操作。

0.7

配置擴(kuò)縮容邊界

通過(guò)minScale和maxScale,可以配置應(yīng)用程序提供服務(wù)的最小和最大Pod數(shù)量,以控制服務(wù)冷啟動(dòng)或者控制計(jì)算成本。

說(shuō)明
  • 如果未設(shè)置minScale注釋,Pod將縮放至0。

  • 如果未設(shè)置maxScale注釋,創(chuàng)建的Pod數(shù)量將沒(méi)有上限。

  • 如果設(shè)置config-autoscaler的enable-scale-to-zero為false,Pod將縮放至1。

minScale和maxScale可以在Revision模板中按照以下方式進(jìn)行配置。

spec:
  template:
    metadata:
      autoscaling.knative.dev/minScale: "2"
      autoscaling.knative.dev/maxScale: "10"

場(chǎng)景一:設(shè)置并發(fā)請(qǐng)求數(shù)實(shí)現(xiàn)自動(dòng)擴(kuò)縮容

本場(chǎng)景將在集群中部署autoscale-go應(yīng)用,通過(guò)設(shè)置并發(fā)請(qǐng)求數(shù),基于KPA實(shí)現(xiàn)自動(dòng)擴(kuò)縮容。

說(shuō)明

關(guān)于如何使用Knative on ASM創(chuàng)建Knative服務(wù),請(qǐng)參見(jiàn)使用Knative on ASM部署Serverless應(yīng)用

  1. 創(chuàng)建autoscale-go.yaml,設(shè)置并發(fā)目標(biāo)數(shù)為10,即autoscaling.knative.dev/target取值為10。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: autoscale-go
      namespace: default
    spec:
      template:
        metadata:
          labels:
            app: autoscale-go
          annotations:
            autoscaling.knative.dev/target: "10"
        spec:
          containers:
            - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/autoscale-go:0.1
  2. 使用kubectl連接到集群,在命令行執(zhí)行以下命令部署autoscale-go。

    kubectl apply -f autoscale-go.yaml
  3. 登錄ASM控制臺(tái),單擊目標(biāo)實(shí)例名稱,然后選擇ASM網(wǎng)關(guān) > 入口網(wǎng)關(guān),在服務(wù)地址區(qū)域,獲取IP。

  4. 使用Hey壓測(cè)工具,執(zhí)行30s內(nèi)保持50個(gè)并發(fā)請(qǐng)求。

    關(guān)于Hey壓測(cè)工具的安裝步驟和詳細(xì)信息,請(qǐng)參見(jiàn)Hey

    說(shuō)明

    請(qǐng)將xxx.xxx.xxx.xxx替換為您實(shí)際的訪問(wèn)網(wǎng)關(guān)地址。關(guān)于如何獲取訪問(wèn)網(wǎng)關(guān)地址的具體操作,請(qǐng)參見(jiàn)獲取訪問(wèn)網(wǎng)關(guān)地址

    hey -z 30s -c 50   -host "autoscale-go.default.example.com"   "http://xxx.xxx.xxx.xxx?sleep=100&prime=10000&bloat=5"

    預(yù)期輸出:預(yù)期輸出

    預(yù)期輸出表明,整個(gè)過(guò)程中共擴(kuò)容7個(gè)Pod。這是由于當(dāng)容器并發(fā)量大于目標(biāo)并發(fā)量的一定百分比后(默認(rèn)為70%),Knative會(huì)提前創(chuàng)建更多的Pod備用,避免并發(fā)量進(jìn)一步增加的情況下目標(biāo)值被突破。

場(chǎng)景二:設(shè)置擴(kuò)縮容邊界實(shí)現(xiàn)自動(dòng)擴(kuò)縮容

擴(kuò)縮容邊界指應(yīng)用程序提供服務(wù)的最小和最大Pod數(shù)量。本場(chǎng)景將在集群中部署autoscale-go應(yīng)用,通過(guò)設(shè)置應(yīng)用程序提供服務(wù)的最小和最大Pod數(shù)量實(shí)現(xiàn)自動(dòng)擴(kuò)縮容。

說(shuō)明

關(guān)于如何使用Knative on ASM創(chuàng)建Knative服務(wù),請(qǐng)參見(jiàn)使用Knative on ASM部署Serverless應(yīng)用

  1. 創(chuàng)建autoscale-go.yaml,設(shè)置最大并發(fā)請(qǐng)求數(shù)為10,minScale最小保留實(shí)例數(shù)為1,maxScale最大擴(kuò)容實(shí)例數(shù)為3。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: autoscale-go
      namespace: default
    spec:
      template:
        metadata:
          labels:
            app: autoscale-go
          annotations:
            autoscaling.knative.dev/target: "10"
            autoscaling.knative.dev/minScale: "1"
            autoscaling.knative.dev/maxScale: "3"
        spec:
          containers:
            - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/autoscale-go:0.1
  2. 使用kubectl連接到集群,在命令行執(zhí)行以下命令部署autoscale-go。

    kubectl apply -f autoscale-go.yaml
  3. 登錄ASM控制臺(tái),單擊目標(biāo)實(shí)例名稱,然后選擇ASM網(wǎng)關(guān) > 入口網(wǎng)關(guān),在服務(wù)地址區(qū)域,獲取IP。

  4. 使用Hey壓測(cè)工具,執(zhí)行30s內(nèi)保持50個(gè)并發(fā)請(qǐng)求。

    關(guān)于Hey壓測(cè)工具的安裝步驟和詳細(xì)信息,請(qǐng)參見(jiàn)Hey

    說(shuō)明

    請(qǐng)將xxx.xxx.xxx.xxx替換為您實(shí)際的訪問(wèn)網(wǎng)關(guān)地址。關(guān)于如何獲取訪問(wèn)網(wǎng)關(guān)地址的具體操作,請(qǐng)參見(jiàn)獲取訪問(wèn)網(wǎng)關(guān)地址

    hey -z 30s -c 50   -host "autoscale-go.default.example.com"   "http://xxx.xxx.xxx.xxx?sleep=100&prime=10000&bloat=5"

    預(yù)期輸出:預(yù)期輸出2

    預(yù)期輸出表明,整個(gè)過(guò)程中Pod最大擴(kuò)容儲(chǔ)量為3,且在無(wú)訪問(wèn)請(qǐng)求流量的情況下,Pod最小保留數(shù)量為1,即自動(dòng)擴(kuò)縮容符合預(yù)期。

相關(guān)文檔

  • 當(dāng)您需要安全地訪問(wèn)和管理Knative構(gòu)建的微服務(wù)時(shí),可以使用ASM網(wǎng)關(guān)來(lái)實(shí)現(xiàn)HTTPS訪問(wèn),通過(guò)對(duì)服務(wù)端點(diǎn)進(jìn)行加密傳輸配置保護(hù)服務(wù)間的通信,提高整體架構(gòu)的安全性和可靠性。具體操作,請(qǐng)參見(jiàn)使用ASM網(wǎng)關(guān)實(shí)現(xiàn)HTTPS訪問(wèn)Knative服務(wù)

  • 當(dāng)您在進(jìn)行應(yīng)用迭代升級(jí)時(shí)面臨新版本兼容性和穩(wěn)定性挑戰(zhàn)時(shí),可以在Knative on ASM中基于流量灰度發(fā)布服務(wù)。具體操作,請(qǐng)參見(jiàn)在Knative on ASM中基于流量灰度發(fā)布服務(wù)

  • 您可以在Knative Service中設(shè)置CPU指標(biāo)閾值,滿足在突發(fā)高負(fù)載的場(chǎng)景下,自動(dòng)擴(kuò)縮容資源的訴求。具體操作,請(qǐng)參見(jiàn)在Knative中使用HPA