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

通過AHPA配置自定義指標以實現(xiàn)應用擴縮

很多場景中需要根據(jù)自定義指標(例如HTTP請求的QPS、消息隊列的長度等)對應用進行擴縮容。AHPA(Autoscaling Horizontal Pod Autoscaler)提供了External Metrics機制,結合alibaba-cloud-metrics-adapter組件,可以為應用提供更加豐富的擴縮容機制。本文介紹如何通過AHPA配置自定義指標以實現(xiàn)應用擴縮容。

前提條件

步驟一:準備示例

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

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

  3. 無狀態(tài)頁面,單擊使用YAML創(chuàng)建資源

  4. 創(chuàng)建頁面,使用如下YAML,創(chuàng)建應用sample-app、對應的Service以及壓測示例fib-loader-qps,然后單擊創(chuàng)建

    說明

    此容器暴露出自定義指標requests_per_second,用來標識每秒訪問次數(shù)。

    展開查看YAML詳細內(nèi)容

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sample-app
      labels:
        app: sample-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sample-app
      template:
        metadata:
          labels:
            app: sample-app
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/acs/knative-sample-fib-server:v1
            name: metrics-provider
            ports:
            - name: http
              containerPort: 8080
            env:
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
  5. 創(chuàng)建頁面,使用如下YAML,創(chuàng)建ServiceMonitor,然后單擊創(chuàng)建

    展開查看YAML詳細內(nèi)容

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: sample-app
      namespace: default
    spec:
      endpoints:
      - interval: 30s
        port: http
        path: /metrics
      namespaceSelector:
        any: true
      selector:
        matchLabels:
          app: sample-app
  6. 開啟ServiceMonitor。

    1. 登錄ARMS控制臺

    2. 在左側導航欄選擇Prometheus監(jiān)控 > 實例列表,進入可觀測監(jiān)控 Prometheus 版的實例列表頁面。

    3. 在頁面頂部,選擇Prometheus實例所在的地域,單擊目標實例名稱(與集群同名)。

    4. 在左側導航欄選擇服務發(fā)現(xiàn),然后在右側頁面單擊配置頁簽,然后單擊ServiceMonitor頁簽。

    5. sample-app所在行,開啟操作列的開關。1.jpg

步驟二:部署Metrics Adapter

  1. 獲取HTTP API的內(nèi)網(wǎng)地址。

    1. 登錄ARMS控制臺

    2. 在左側導航欄選擇Prometheus監(jiān)控 > 實例列表,進入可觀測監(jiān)控 Prometheus 版的實例列表頁面。

    3. 實例列表頁面頂部,選擇Prometheus實例所在的地域,然后單擊目標實例名稱(格式為arms_metrics_{RegionId}_XXX)。

    4. 在左側導航欄單擊設置,在HTTP API地址(Grafana 讀取地址)區(qū)域,查看并記錄內(nèi)網(wǎng)地址(Prometheus URL)。

      • (可選)如果開啟了Token,則需要設置訪問Token。請記錄Token的值。

      • 查看并記錄內(nèi)網(wǎng)地址(Prometheus URL)。

      2.jpg

  2. 部署ack-alibaba-cloud-metrics-adapter。

    1. 登錄容器服務管理控制臺,在左側導航欄選擇市場 > 應用市場

    2. 單擊應用目錄頁簽,搜索并單擊ack-alibaba-cloud-metrics-adapter

    3. ack-alibaba-cloud-metrics-adapter頁面,單擊右上角的一鍵部署

    4. 基本信息配置向導中,選擇集群命名空間,然后單擊下一步

    5. 參數(shù)配置配置向導中,選擇Chart版本。根據(jù)在獲取HTTP API的內(nèi)網(wǎng)地址獲取的值,在參數(shù)區(qū)域配置prometheus.urlprometheus.prometheusHeader,然后單擊確定

        prometheus:
          enabled: true
          # 填寫HTTP API的內(nèi)網(wǎng)地址,即阿里云Prometheus監(jiān)控的URL地址。
          url: http://cn-beijing-intranet.arms.aliyuncs.com:9090/api/v1/prometheus/6b4b40986a3bec4f92ea418534****/115964845466****/arms-metrics-6fae216078e4****/cn-beijing
          # 阿里云Prometheus開啟鑒權Token后,請配置prometheusHeader Authorization。
          prometheusHeader:
          - Authorization: eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjIwMDc1MTY0MDksImlzcyI6Imh0dHA6******liYWJhY2xvdWQuY29tIiwiaWF0IjoxNjkyMTU2NDA5LCJqdGkiOiI3NmRkOWJkOS0zYzBkLTRjY2MtOTFkYy1lZTU1OGFkNjg3NmMifQ.gltEJ7g4j-QPao2durNk3OiEBYhv2F_nzG-cncVfFtY
  3. 配置自定義指標。

    1. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇應用 > Helm

    2. alibaba-cloud-metrics-adapter所在行,單擊操作列的更新

    3. 將下面的YAML文件內(nèi)容復制,然后粘貼并覆蓋模板中對應的參數(shù)。注意下面示例說明中的requests_per_second,需要修改為實際對應的指標,對應Prometheus每秒請求數(shù)指標。然后單擊更新

        ......
        prometheus:
          adapter:
            rules:
              custom:
              - metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>})
                name:
                  as: requests_per_second
                resources:
                  overrides:
                    namespace:
                      resource: namespace
                seriesQuery: requests_per_second # 設置指標名稱,請確保阿里云Prometheus中指標和此處一致。
              default: false
          enabled: true    # 這里設置為true,打開Prometheus Adapter。
          ......
    4. 執(zhí)行如下命令,通過Custom Metrics指標查詢方式,查看可用指標詳情。

      kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/default/requests_per_second"
      {"kind":"ExternalMetricValueList","apiVersion":"external.metrics.k8s.io/v1beta1","metadata":{},"items":[{"metricName":"requests_per_second","metricLabels":{},"timestamp":"2023-08-15T07:59:09Z","value":"10"}]}

步驟三:部署AHPA

  1. 創(chuàng)建如下AHPA資源。

    • 設置external.metric, 指定指標名稱以及matchLabels。指標名稱與配置自定義指標中的指標名稱保持一致。這里指定自定義指標為requests_per_second。

    • 設置目標閾值,這里指定AverageValue為10, 表示每秒請求數(shù)超過10就開始擴容。

    展開查看YAML詳細信息

    apiVersion: autoscaling.alibabacloud.com/v1beta1
    kind: AdvancedHorizontalPodAutoscaler
    metadata:
      name: customer-deployment
      namespace: default
    spec:
      metrics:
      - external:
          metric:
            name: requests_per_second
            selector:
              matchLabels:
                namespace: default
                service: sample-app
          target:
            type: AverageValue
            averageValue: 10
        type: External
      minReplicas: 0
      maxReplicas: 50
      prediction:
        quantile: 95
        scaleUpForward: 180
      scaleStrategy: observer
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: sample-app
      instanceBounds:
      - startTime: "2023-08-01 00:00:00"
        endTime: "2033-08-01 00:00:00"
        bounds:
        - cron: "* 0-8 ? * MON-FRI"
          maxReplicas: 50
          minReplicas: 4
        - cron: "* 9-15 ? * MON-FRI"
          maxReplicas: 50
          minReplicas: 5
        - cron: "* 16-23 ? * MON-FRI"
          maxReplicas: 50
          minReplicas: 1
  2. 執(zhí)行如下命令,查看AHPA結果。

    custom-metric % kubectl get ahpa
    NAME                  STRATEGY   REFERENCE                   METRIC                TARGETS     DESIREDPODS   REPLICAS   MINPODS   MAXPODS   AGE
    customer-deployment   observer   Deployment/sample-app       requests_per_second   60000m/10   6             1          1         50        7h53m

    K8s需要高精度時,會使用單位m或k。例如1001m=1.001,這里60000m=60。預期輸出表明,每秒請求數(shù)為60,超過了設置的目標閾值10,計算出期望Pod數(shù)(DESIREDPODS)為6。