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

基于阿里云組件指標的容器水平伸縮

本文介紹如何實現阿里云指標自動伸縮,幫助您完成集群內應用的擴縮容。

前提條件

已創建Kubernetes集群。具體操作,請參見創建Kubernetes托管版集群創建Kubernetes專有版集群創建集群

背景信息

很多場景下,往往需要更多的監測指標來指導集群的擴縮容,如HTTP請求率、Ingress QPS等,但是默認HPA并不支持這些自定義的指標或外部指標,但是Kubernetes提供了External Metrics的機制,為應用提供更加便捷的擴縮機制。

部署alibaba-cloud-metrics-adapter組件

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

  2. 應用目錄頁面全部頁簽下搜索并選中ack-alibaba-cloud-metrics-adapter

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

  4. 創建面板中,選擇集群命名空間,然后單擊下一步

  5. 參數配置頁面,選擇版本號并設置相應參數,然后單擊確定

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

    Helm頁面可看到ack-alibaba-cloud-metrics-adapter組件已經成功部署到集群中。

配置HPA自動伸縮示例

本文以創建名為Nginx的Deployment和Service為例配置HPA自動伸縮。

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

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

  3. 無狀態頁面中,單擊使用YAML創建資源

  4. 設置示例模板自定義,并使用以下YAML文件創建一個應用,并暴露一個ClusterIP的Service,然后單擊創建

    apiVersion: apps/v1 
    kind: Deployment
    metadata:
      name: nginx-deployment-basic
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9 
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      namespace: default
    spec:
      ports:
        - port: 80
          protocol: TCP
          targetPort: 80
      selector:
        app: nginx
      type: ClusterIP
  5. 在集群管理頁左側導航欄中,選擇網絡 > 路由,并在路由頁面右上方,單擊創建Ingress

  6. 創建面板中填寫相關信息,然后單擊確定。完成創建后,系統自動跳轉至路由頁面。

  7. 名稱下,單擊生成的Ingress名稱,查看路由規則信息。

  8. 配置HPA。

    1. 單擊左上角的返回符號,返回集群列表頁面。

    2. 在控制臺左側導航欄選擇市場 > 編排模板

    3. 模板列表頁面,選擇HPA并單擊創建應用,然后部署以下文件。

      apiVersion: autoscaling/v2beta2
      kind: HorizontalPodAutoscaler
      metadata:
        name: ingress-hpa
      spec:
        scaleTargetRef:
          apiVersion: apps/v1
          kind: Deployment
          name: nginx-deployment-basic
        minReplicas: 2
        maxReplicas: 10
        metrics:
          - type: External
            external:
              metric:
                name: sls_ingress_qps
                selector:
                  matchLabels:
                    sls.project: "***" # 替換sls.project的值為真實值。
                    sls.logstore: "nginx-ingress"
                    sls.ingress.route: "default-nginx-80"
              target:
                type: AverageValue
                averageValue: 10
          - type: External
            external:
              metric:
                name: sls_ingress_latency_p9999
                selector:
                  matchLabels:
                    # default ingress log project is k8s-log-clusterId
                    sls.project: "***" 
                    # default ingress logstre is nginx-ingress
                    sls.logstore: "nginx-ingress"
                    # namespace-svc-port
                    sls.ingress.route: "default-nginx-80"
                    # sls vpc endpoint, default true
                    # sls.internal.endpoint:true
              target:
                type: Value
                # sls_ingress_latency_p9999 > 10ms
                value: 10

      HPA的配置涉及的參數如下:

      參數名

      描述

      sls.ingress.route

      必填,參數的格式為:<namespace>-<svc>-<port>,例如default-nginx-80

      說明

      <namespace>為Ingress所在的命名空間,<svc>是Ingress對應的Service名稱,<port>是Ingress對應Service的Port名稱。

      sls.logstore

      日志服務的日志庫名稱,必填。

      sls.project

      日志服務的Project名稱,必填。

      sls.internal.endpoint

      設置通過內網還是外網訪問日志服務,默認為true。選擇true說明通過內網訪問日志服務;選擇false說明通過外網訪問日志服務。

      說明

      sls_ingress_qpssls_ingress_latency_p9999是本文實現伸縮使用的兩個指標。在targettype中。

      • sls_ingress_qps設置的是AverageValue,表示QPS要除以Pod的數目進行判斷。

      • sls_ingress_latency_p9999設置的是Value,表示無需除以Pod的數目。

      以上兩種不同的type在HPA的設置中會經常用到。

    4. 模板列表 - hpa頁面右側,單擊創建

  9. 設置好HPA后,執行以下腳本進行壓測。

    #!/bin/bash
    ##使用Apache Benchmark對Ingress暴露的服務設置并發為10,時間為300秒的壓測。
    ab -t 300 -c 10 <ingress配置的域名>
  10. 驗證指標伸縮狀態。

    1. 在控制臺左側導航欄單擊集群,并在集群列表頁面,選擇目標集群操作列的更多 > 通過CloudShell管理集群

    2. 執行以下命令檢查伸縮狀態。

      kubectl get hpa ingress-hpa

      預期輸出:

      NAME            REFERENCE                              TARGETS           MINPODS    MAXPODS    REPLICAPS   AGE
      ingress-hpa     Depolyment/nginx-deployment-basic      21/10 (avg)       2          10         10          7m49s

      REPLICAS的值和MAXPODS的值相同時,說明伸縮成功。

通過命令行查詢數據

可以通過以下命令行查詢數據。以請求指標sls_ingress_qps為例。

kubectl get --raw  /apis/external.metrics.k8s.io/v1beta1/namespaces/*/sls_ingress_qps?labelSelector=sls.project={{SLS_Project}},sls.logstore=nginx-ingress

其中 {{SLS_Project}}是此ACK集群對應的SLS日志中心的Project名。若未自定義配置,默認為k8s-log-{{ClusterId}},{{ClusterId}}為此集群的ClusterId。

若返回結果為:

Error from server: {
    "httpCode": 400,
    "errorCode": "ParameterInvalid",
    "errorMessage": "key (slb_pool_name) is not config as key value config,if symbol : is  in your log,please wrap : with quotation mark \"",
    "requestID": "xxxxxxx"
}

表明此指標無數據。原因可能是未配置使用ALB Ingress,但使用了sls_alb_ingress_qps指標進行數據查詢。

常見問題

  • 問:如果執行kubectl get hpa后發現target一欄為<unknow>怎么辦?

    答:請按照以下操作解決。

    1. 執行kubectl describe hpa <hpa_name>,確認HPA失效的原因。

      • 如果Conditions字段提示AbleToScaleFalse,請確認Deployment是否正常部署。

      • 如果Conditions字段提示ScalingActiveFalse,請繼續下一步。

    2. 執行kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/"。如果返回為Error from server (NotFound): the server could not find the requested resource,請確認alibaba-cloud-metrics-adapter的啟動狀態。

      如果確認alibaba-cloud-metrics-adapter狀態正常,請確認HPA指標是否是Ingress相關指標。如果是Ingress相關指標,您需要提前部署日志服務組件。更多信息,請參見Nginx Ingress訪問日志分析與監控

    3. 確認HPA指標填寫正確。sls.ingress.route的值格式為<namespace>-<svc>-<port>

      • namespace為Ingress所在的命名空間。

      • svc是Ingress對應的Service名稱。

      • port是Ingress對應Service的端口名稱。

  • 問:如何查找HPA支持的指標名稱?

    答:請參見阿里云HPA指標, 以下列舉為常用指標。

    指標名稱

    描述

    附加參數

    sls_ingress_qps

    指定的IngressRoute每秒查詢率

    sls.ingress.route

    sls_alb_ingress_qps

    ALB數據的IngressRoute每秒查詢率

    sls.ingress.route

    sls_ingress_latency_avg

    所有請求的延遲

    sls.ingress.route

    sls_ingress_latency_p50

    50%請求的延遲

    sls.ingress.route

    sls_ingress_latency_p95

    95%請求的延遲

    sls.ingress.route

    sls_ingress_latency_p99

    99%請求的延遲

    sls.ingress.route

    sls_ingress_latency_p9999

    99.99%請求的延遲

    sls.ingress.route

    sls_ingress_inflow

    Ingress的流入帶寬

    sls.ingress.route

  • 問:當用戶自定義了Nginx Ingress日志格式,如何進行適配操作?

    答:本文介紹的使用SLS Ingress指標進行容器水平伸縮,需要您開啟并正確配置集群中Nginx Ingress日志接入阿里云日志服務。

    • 在創建集群時,日志服務是默認開啟的。當您保持默認值不變,集群創建成功后,您可以在阿里云日志服務SLS控制臺查看Nginx Ingress的訪問日志分析報表和監控Nginx Ingress實時狀態。

    • 在創建集群時,若您手動關閉了日志服務,集群創建完成后,如果想要使用SLS Ingress指標進行容器水平伸縮,您需要重新開啟或配置日志服務。詳細信息,請參見Nginx Ingress訪問日志分析與監控

    • 當您需要自定義Nginx Ingress日志格式時,由于集群中初次開啟日志服務部署AliyunLogConfig的CRD只針對ACK默認Ingress Controller中的日志格式生效,若您修改過Ingress Controller的訪問日志格式,請修改CRD配置中的正則表達式提取processor_regex部分。具體操作,請參見通過DaemonSet-CRD方式采集容器日志

相關文檔