簡體   English   中英

Kube.netes HPA 使用自定義指標快速擴展

[英]Kubernetes HPA Scales Up Rapidly with Custom Metric

我有一個在 GKE 上運行的 Spring Boot 應用程序,需要約 7 分鍾才能准備就緒。 我創建了一個 HPA,基於自定義的每秒請求量,如下所示:

kind: "HorizontalPodAutoscaler"
metadata:
  name: X
  namespace: X
spec:
  maxReplicas: 10
  minReplicas: 3
  scaleTargetRef:
    apiVersion: "apps/v1"
    kind: "Deployment"
    name: "X"
  metrics:
    - type: "Pods"
      pods:
        metric:
          name: "istio_requests_per_second"
        target:
          type: "AverageValue"
          averageValue: 30

istio_requests_per_second指標已經計算了可用 pod 的平均 RPS ,這導致每個 pod 的值相同。 例如,如果總共有 150 個 RPS,並且有 5 個可用的 Pod,則 istio_requests_per_second將為 30。

istio_requests_per_second增加到略高於 30 時,HPA 將繼續生成 pod,直到其中一個新創建的 pod 准備好接收一部分請求——假設 2 RPS,以防指標增加到 32 RPS。 這完全有道理,因為在新創建的 pod 准備就緒之前,它們不會收到請求,並且 HPA 會嘗試將 RPS 的數量保持在目標值——30 左右。

問題是,我不希望 HPA 在 RPS 稍微增加的情況下生成數十個 pod。 例如,在 32 RPS 的情況下,一個新的 pod 應該足夠了。 我認為主要問題是啟動時間長,因為在決定擴展的時間和 pod 准備就緒之間存在自動縮放延遲。

因為我在 GKE 上運行,所以我無法更改 kube-controller-manager 標志,例如--horizontal-pod-autoscaler-sync-period

我也在 Kube.netes 1.17 上運行,所以配置漸進縮放的行為字段是沒有問題的。 此外,我不想限制縮放比例,可能是istio_requests_per_second實際上超過了 100 RPS。

TL;DR:我如何配置 Kube.netes HPA 在啟動緩慢的應用程序每秒請求略有增加的情況下不生成數十個 pod?

要縮小 Pod 縮放選項的范圍,您可以將自動縮放基於多個指標

您可以在文檔中查看 GKE 如何根據自定義或外部指標自動縮放的示例,以便更好地了解其利用率。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM