Kubernetes HPA(具有自定义指标)扩展策略

Kubernetes HPA(具有自定义指标)扩展策略,kubernetes,kubernetes-pod,kubernetes-statefulset,horizontal-pod-autoscaling,Kubernetes,Kubernetes Pod,Kubernetes Statefulset,Horizontal Pod Autoscaling,从Kubernetes v1.18开始,V2beta2API允许通过水平Pod自动缩放(HPA)行为字段配置缩放行为我计划将带有自定义指标的HPA应用于州集 我正在研究的用例是使用自定义指标(例如,我的应用程序上的用户会话数)向外扩展,但HPA根本不会缩小。K8s SIG自动缩放增强功能也描述了此用例 用户会话可以保持活动状态数分钟到数小时。从状态集的1个副本开始,当用户会话数达到上限(使用Prometheus collector公开,稍后使用HPA自定义度量选项配置)时,应用程序吊舱将向外扩展

从Kubernetes v1.18开始,V2beta2API允许通过水平Pod自动缩放(HPA)行为字段配置缩放行为我计划将带有自定义指标的HPA应用于州集

我正在研究的用例是使用自定义指标(例如,我的应用程序上的用户会话数)向外扩展,但HPA根本不会缩小。K8s SIG自动缩放增强功能也描述了此用例

用户会话可以保持活动状态数分钟到数小时。从状态集的1个副本开始,当用户会话数达到上限(使用Prometheus collector公开,稍后使用HPA自定义度量选项配置)时,应用程序吊舱将向外扩展。新的播客将开始为新用户服务

由于这是一个状态集,不能突然缩小,当新副本上的用户会话降至0时,我正在寻求有关缩小方法的帮助。上面的链接表示,可以通过一个单独的过程来控制缩放。不知道怎么做?正在寻找一些指针


谢谢。

您可以使用
periodSeconds
stabilizationWindowSeconds
值来管理POD终止之间的时间,例如:

  behavior:
    scaleDown:
      stabilizationWindowSeconds: 10
      policies:
      - type: Pods
        value: 1
        periodSeconds: 20
这样,它将每30秒缩小1个pod(或者在
周期秒
稳定窗口秒
中使用任何值)。时间可能随时间而变化,具体取决于
稳定窗口秒数

periodSeconds
描述每个pod终止之间的时间间隔,最大值为1800秒(30分钟)


StabilizationWindowsSeconds
当指标指示应缩小目标时,此算法会查看先前计算的所需状态,并使用指定间隔中的最高值。对于按比例缩小,默认值为300,最大值为3600(一小时)。

出于好奇,您使用StatefulSets的原因是什么?应用程序被构建为有状态(而不是无状态)。它处理来自用户的传入请求,存储其用户参数,并使用它来处理后续请求。它将用户和参数存储在哪里?它将用户数据本地存储在pod上,并将其写入数据库。如果最终的持久状态在数据库中(真相的来源)本地数据更多的是缓存,而我认为这更多的是无状态服务,通常只需要使用部署就可以了。
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 10
      policies:
      - type: Pods
        value: 1
        periodSeconds: 20