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

使用HPA基于QPS數(shù)據(jù)實現(xiàn)應(yīng)用的彈性伸縮

如果您的應(yīng)用需要根據(jù)單位時間內(nèi)收到的請求數(shù)量動態(tài)地調(diào)整計算資源總量,您可以使用ALB實例統(tǒng)計的QPS數(shù)據(jù)為應(yīng)用的Pod設(shè)置彈性伸縮。

閱讀前提示

閱讀本文前,推薦您閱讀創(chuàng)建ALB Ingress了解ALB Ingress的基礎(chǔ)使用方法。

工作原理

QPS(Queries Per Second)指的是每秒鐘收到的請求數(shù)量。ALB實例可以通過日志服務(wù)記錄客戶端的訪問數(shù)據(jù)。HPA(Horizontal Pod Autoscaler)可以根據(jù)訪問記錄,對Service的QPS數(shù)據(jù)進(jìn)行觀測,并對相應(yīng)的工作負(fù)載(Deployment、StatefulSet等)進(jìn)行擴(kuò)縮容。

前提條件

步驟一:創(chuàng)建AlbConfig并關(guān)聯(lián)日志Project

  1. 查看集群關(guān)聯(lián)的日志Project。

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

    2. 集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇集群信息。

    3. 基本信息頁簽下,找到日志服務(wù) Project資源,記錄右側(cè)的日志Project名稱。

  2. 創(chuàng)建AlbConfig。

    1. 創(chuàng)建并拷貝以下內(nèi)容到alb-qps.yaml中,并在accessLogConfig字段中填入日志Project相關(guān)的信息。

      apiVersion: alibabacloud.com/v1
      kind: AlbConfig
      metadata:
        name: alb-qps
      spec:
        config:
          name: alb-qps
          addressType: Internet
          zoneMappings:
          - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # 虛擬交換機(jī)的ID
          - vSwitchId: vsw-uf6nun9tql5t8nh15****
          accessLogConfig:
            logProject: <LOG_PROJECT> # 集群關(guān)聯(lián)的日志項目名稱
            logStore: <LOG_STORE> # 自定義日志庫名稱,必須以“alb_“開頭
        listeners:
          - port: 80
            protocol: HTTP

      字段說明如下:

      字段

      取值類型

      說明

      logProject

      string

      SLS日志項目的名稱。

      默認(rèn)值:""。

      logStore

      string

      SLS日志庫的名稱,必須以alb_開頭。如果不存在此日志庫,則會自動創(chuàng)建。SLS日志庫的配置示例,請參見開啟日志服務(wù)訪問日志。

      默認(rèn)值:""。

    2. 執(zhí)行以下命令,創(chuàng)建AlbConfig。

       kubectl apply -f alb-qps.yaml

      預(yù)期輸出:

      albconfig.alibabacloud.com/alb-qps created

步驟二:創(chuàng)建示例資源

除了AlbConfig外,ALB Ingress還需要Deployment、Service、IngressClass、Ingress這4種資源才能正常工作,您可以使用以下的示例快速創(chuàng)建這4種資源。

  1. 使用以下內(nèi)容,創(chuàng)建qps-quickstart.yaml。

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: qps-ingressclass
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb-qps # 與AlbConfig的名稱一致
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: qps-ingress
    spec:
      ingressClassName: qps-ingressclass # 與Ingress Class的名稱一致
      rules:
       - host: demo.alb.ingress.top # 替換為您的域名
         http:
          paths:
          - path: /qps
            pathType: Prefix
            backend:
              service:
                name: qps-svc
                port:
                  number: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: qps-svc
      namespace: default
    spec:
      ports:
        - port: 80
          protocol: TCP
          targetPort: 80
      selector:
        app: qps-deploy
      type: NodePort
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: qps-deploy
      labels:
        app: qps-deploy
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: qps-deploy
      template:
        metadata:
          labels:
            app: qps-deploy
        spec:
          containers:
          - name: qps-container
            image: nginx:1.7.9
            ports:
            - containerPort: 80
  2. 執(zhí)行以下命令,創(chuàng)建示例資源。

    kubectl apply -f qps-quickstart.yaml

步驟三:創(chuàng)建HPA

  1. 創(chuàng)建qps-hpa.yaml文件,并將以下內(nèi)容拷貝到該文件中并保存。

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: qps-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: qps-deploy # HPA所控制的工作負(fù)載的名稱
      minReplicas: 2 # 最低Pod數(shù)量
      maxReplicas: 10 # 最高Pod數(shù)量
      metrics:
        - type: External
          external:
            metric:
              name: sls_alb_ingress_qps # QPS數(shù)據(jù)的指標(biāo)名稱,請勿修改
              selector:
                matchLabels:
                  sls.project: <LOG_PROJECT> # 集群關(guān)聯(lián)的日志項目名稱
                  sls.logstore: <LOG_STORE> # 自定義日志庫名稱
                  sls.ingress.route: default-qps-svc-80 # Service的路徑,參數(shù)的格式為<namespace>-<svc>-<port>
            target:
              type: AverageValue
              averageValue: 2 # 指標(biāo)的預(yù)期目標(biāo),示例中是所有Pod的平均QPS為2

    字段說明如下:

    字段

    說明

    scaleTargetRef

    應(yīng)用所使用的工作負(fù)載。示例中使用的是步驟一中創(chuàng)建的名為qps-deployment的Deployment。

    minReplicas

    該Deployment可縮容的容器數(shù)量下限。該值需要設(shè)置為大于等于1的整數(shù)。

    maxRaplicas

    該Deployment可擴(kuò)容的容器數(shù)量上限。該值需要大于最小副本數(shù)。

    external.metric.name

    HPA基于的QPS數(shù)據(jù)的指標(biāo),請勿修改。

    sls.project

    指標(biāo)所基于的日志項目,與AlbConfig中的內(nèi)容保持一致。

    sls.logstore

    指標(biāo)所基于的日志庫,與AlbConfig中的內(nèi)容保持一致。

    sls.ingress.route

    Service的路徑,格式為<namespace>-<svc>-<port>,示例中為步驟一中創(chuàng)建的名為qps-svc的Service。

    external.target

    指標(biāo)的預(yù)期目標(biāo),本示例中所有Pod的平均QPS為2。HPA會控制Pod的數(shù)量,使QPS盡可能接近預(yù)期目標(biāo)。

  2. 執(zhí)行以下命令,創(chuàng)建HPA。

    kubectl apply -f qps-hpa.yaml
  3. 執(zhí)行以下命令,查看HPA部署情況。

    kubectl get hpa

    預(yù)期輸出:

    NAME      REFERENCE               TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
    qps-hpa   Deployment/qps-deploy   0/2 (avg)   2         10        2          5m41s
  4. 執(zhí)行以下命令,查看HPA配置信息。

    kubectl describe hpa qps-hpa

    預(yù)期輸出:

    Name:                                            qps-hpa
    Namespace:                                       default
    Labels:                                          <none>
    Annotations:                                     <none>
    CreationTimestamp:                               ******** # HPA的時間戳,可忽略
    Reference:                                       Deployment/qps-deployment
    Metrics:                                         ( current / target )
      "sls_alb_ingress_qps" (target average value):  0 / 2
    Min replicas:                                    2
    Max replicas:                                    10
    Deployment pods:                                 2 current / 2 desired

(可選)步驟四:效果驗證

  1. 驗證應(yīng)用擴(kuò)容。

    1. 執(zhí)行以下命令,查看Ingress信息。

      kubectl get ingress

      預(yù)期輸出:

      NAME            CLASS                HOSTS                  ADDRESS                         PORTS     AGE
      qps-ingress     qps-ingressclass     demo.alb.ingress.top   alb-********.alb.aliyuncs.com   80        10m31s

      記錄下HOSTSADDRESS部分的值,以便后續(xù)步驟使用。

    2. 執(zhí)行以下命令,對應(yīng)用進(jìn)行壓測。其中的demo.alb.ingress.topalb-********.alb.aliyuncs.com請?zhí)鎿Q為在上一步中得到的值。

      ab -r -c 5 -n 10000 -H Host:demo.alb.ingress.top http://alb-********.alb.aliyuncs.com/qps
    3. 執(zhí)行以下命令,查看應(yīng)用的伸縮情況。

      kubectl get hpa

      預(yù)期輸出:

      NAME      REFERENCE               TARGETS          MINPODS   MAXPODS   REPLICAS   AGE
      qps-hpa   Deployment/qps-deploy   14375m/2 (avg)   2         10        10         15m

      返回結(jié)果中REPLICAS為10,表明隨著QPS數(shù)據(jù)增大,應(yīng)用的Pod擴(kuò)容到10個。

  2. 驗證應(yīng)用縮容。

    壓力測試結(jié)束后,執(zhí)行以下命令,查看應(yīng)用的伸縮情況。

    kubectl get hpa

    預(yù)期輸出:

    NAME      REFERENCE               TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
    qps-hpa   Deployment/qps-deploy   0/2 (avg)   2         10        2          28m

    返回結(jié)果中REPLICAS為2,表明QPS數(shù)據(jù)下降到0后,應(yīng)用縮容到2個Pod。

相關(guān)文檔