[英]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: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 旋转所需的时间。 (集群自动缩放器)
所用时间:
1 min 05 secs
(大约)1 min 20 secs
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.