[英]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?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.