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

使用HPA基于QPS數據實現應用的彈性伸縮

如果您的應用需要根據單位時間內收到的請求數量動態地調整計算資源總量,您可以使用ALB實例統計的QPS數據為應用的Pod設置彈性伸縮。

閱讀前提示

閱讀本文前,推薦您閱讀創建ALB Ingress了解ALB Ingress的基礎使用方法。

工作原理

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

前提條件

步驟一:創建AlbConfig并關聯日志Project

  1. 查看集群關聯的日志Project。

    1. 登錄容器服務管理控制臺,在左側導航欄選擇集群

    2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇集群信息

    3. 集群資源頁簽下,找到日志服務 Project資源,記錄右側的日志Project名稱。

  2. 創建AlbConfig。

    1. 創建并拷貝以下內容到alb-qps.yaml中,并在accessLogConfig字段中填入日志Project相關的信息。

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

      字段說明如下:

      字段

      取值類型

      說明

      logProject

      string

      SLS日志項目的名稱。

      默認值:""

      logStore

      string

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

      默認值:""

    2. 執行以下命令,創建AlbConfig。

       kubectl apply -f alb-qps.yaml

      預期輸出:

      albconfig.alibabacloud.com/alb-qps created

步驟二:創建示例資源

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

  1. 使用以下內容,創建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. 執行以下命令,創建示例資源。

    kubectl apply -f qps-quickstart.yaml

步驟三:創建HPA

  1. 創建qps-hpa.yaml文件,并將以下內容拷貝到該文件中并保存。

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

    字段說明如下:

    字段

    說明

    scaleTargetRef

    應用所使用的工作負載。示例中使用的是步驟一中創建的名為qps-deployment的Deployment。

    minReplicas

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

    maxRaplicas

    該Deployment可擴容的容器數量上限。該值需要大于最小副本數。

    external.metric.name

    HPA基于的QPS數據的指標,請勿修改。

    sls.project

    指標所基于的日志項目,與AlbConfig中的內容保持一致。

    sls.logstore

    指標所基于的日志庫,與AlbConfig中的內容保持一致。

    sls.ingress.route

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

    external.target

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

  2. 執行以下命令,創建HPA。

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

    kubectl get hpa

    預期輸出:

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

    kubectl describe hpa qps-hpa

    預期輸出:

    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. 驗證應用擴容。

    1. 執行以下命令,查看Ingress信息。

      kubectl get ingress

      預期輸出:

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

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

    2. 執行以下命令,對應用進行壓測。其中的demo.alb.ingress.topalb-********.alb.aliyuncs.com請替換為在上一步中得到的值。

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

      kubectl get hpa

      預期輸出:

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

      返回結果中REPLICAS為10,表明隨著QPS數據增大,應用的Pod擴容到10個。

  2. 驗證應用縮容。

    壓力測試結束后,執行以下命令,查看應用的伸縮情況。

    kubectl get hpa

    預期輸出:

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

    返回結果中REPLICAS為2,表明QPS數據下降到0后,應用縮容到2個Pod。

相關文檔