繁体   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