繁体   English   中英

如何防止在 Kubernetes 中由 HPA 创建的特定时间段内缩小新扩展的 Pod?

[英]How to prevent scale down of newly scaled up pod for specific period of time which was created by HPA in Kubernetes?

我在 DigitalOcean 中设置了一个 Kubernetes 集群。 集群配置为使用 HPA(Horizontal Pod Autoscaler)自动扩展。 我想防止终止在过去 1 小时内扩大规模的 pod,以避免颠簸和节省账单。 以下是相同的两个原因:

  1. 由于不可预测的流量,有时新的 Pod 在一个小时内会放大和缩小多次。 由于应用程序的性质,50-60 个新用户需要一个新的 Pod 来处理流量。
  2. DigitalOcean 液滴按小时收费。 即使液滴上升15分钟,他们也会充电一个小时。 因此,有时我们会在一小时内支付 5 滴,而这本来可以只支付 1 滴。

文档中,我找不到与此相关的任何内容。 任何相同的黑客都会有所帮助。

是的,我们可以做到这一点。 我目前正在做这个实验几乎与你的问题有关。

尝试在自动缩放时查找以下内容。

  1. HPA 计算所需副本所需的时间
  2. 吊舱启动所需的时间。
  3. 液滴旋转所需的时间。
  4. 吊舱减速所需的时间。
  5. 液滴旋转所需的时间。

案例 1:HPA 计算所需副本所需的时间 (HPA)

HPA 检测更改,立即或至少在 15 秒内获取指标。 取决于horizontal-pod-autoscaler-sync-period默认设置为 15 秒。 一旦 HPA 获得 Metric,它就会计算 Replica Needed。

案例 2:吊舱启动所需的时间。 (HPA)

一旦 HPA 计算出所需的副本,Pod 就会开始启动。 但这取决于ScaleUp Policy 您可以根据您的用例进行设置。还取决于可用的 Droplet,集群自动缩放器

例如:您可以告诉 HPA,嘿,请在 15 秒内启动 4 个吊舱或在 20 秒内启动 100% 的当前可用吊舱。

现在 HPA 将决定 select 任何人的政策,这会产生更大的影响(副本数的大多数变化)。 如果100% pods > 4 pods ,第二个策略接管,否则第一个策略可以接管。 过程重复,直到到达所需的副本。

如果您需要立即增加 Pod 数量,您可以将策略设置为在 1 秒内启动 100% 的 Pod,因此它会尝试在每秒钟内启动 100% 的当前副本数,直到匹配所需的副本数。

案例 3:Droplet 旋转所需的时间。 (集群自动缩放器)

所用时间:

  • 用于检测待处理 pod 并开始旋转液滴的集群自动缩放器: 1 min 05 secs (大约)
  • 液滴旋转,但未准备好 State: 1 min 20 secs
  • 滴到每个 READY STATE: 10 - 20 secs

Total Time taken to droplet Available: 2 min 40 secs (approx)

案例 4:吊舱减速所需的时间。 (HPA)

它取决于 ScalDown Policy,就像案例 2 一样。

案例 5:液滴旋转所需的时间。 (集群自动缩放器)

在所有目标 pod 从 Droplet 终止之后(所用时间取决于案例 4)。

Digital Ocean 将 Taints 设置为像DeletionCandidate...=<timestamp>:NopreferSchedule这样的节点

污点设置十分钟后,液滴开始旋转。

结论:

如果您需要节点一小时才能保持活力(由于按小时收费,最多使用)并且不超过一小时(如果超过 1 小时,则按 2 小时计费)

您可以设置,StabilizatioWindowSeconds = 1 hr - 要删除的 DigitalOcean 时间间隔

理论上, StabilizatioWindowSeconds = 1 hr - 10 mins = 50 mins (3000 secs)

实际上,所有 Pod 终止所用的时间可能会因缩减策略、您的应用程序等而异......

所以我设置了大约(根据我的情况) StabilizatioWindowSeconds = 1 hr - 20 mins = 40 mins (2400 secs)

因此,您的 Scaled up pod 现在可以存活 40 分钟,并在 40 分钟后开始终止(在我的情况下,所有 pod 最多在 5 分钟内终止)。 所以平衡15分钟让数字海洋摧毁水滴。

注意:计算的时间取决于我的用例和环境等。

添加 HPA 行为配置以供参考

behavior:
    scaleDown:
      stabilizationWindowSeconds: 2400
      selectPolicy: Max
      policies:
      - type: percent
        value: 100
        periodSeconds: 15
    scaleUp:
      stabilizationWindowSeconds: 0
      selectPolicy: Max
      policies:
      - type: Percent
        value: 100
        periodSeconds: 1

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM