Nit*_*esh 6 autoscaling docker digital-ocean kubernetes hpa
我在 DigitalOcean 中设置了一个 Kubernetes 集群。集群配置为使用 HPA(Horizontal Pod Autoscaler)自动扩展。我想防止终止在过去 1 小时内按比例放大的 pod,以避免颠簸和节省账单。以下是两个相同的原因:
从文档中,我找不到与此相关的任何内容。任何相同的黑客都会有帮助。
是的,我们可以做到这一点。我目前正在做这个实验几乎与你的问题相关。
尝试在自动缩放时找到以下内容。
案例 1:HPA 计算所需副本 (HPA) 所需的时间
HPA 检测到变化,立即或至少在 15 秒内获取指标。取决于horizontal-pod-autoscaler-sync-period默认情况下设置为 15 秒。一旦 HPA 获得指标,它就会计算所需的副本。
情况 2:Pod 旋转所需的时间。(HPA)
一旦 HPA 计算出所需的副本,Pod 就会开始旋转。但这取决于ScaleUp Policy。您可以根据您的用例进行设置。并且还取决于可用的 Droplet、集群自动缩放器
例如:您可以告诉 HPA,嘿,请在 15 秒内启动 4 个 Pod,或者在 20 秒内启动 100% 当前可用的 Pod。
现在 HPA 将决定选择任何能产生更大影响的策略(副本数变化最大)。如果100% pods > 4 pods,则第二个策略接管,否则第一个策略可以接管。重复该过程直到到达所需的副本。
如果您需要立即扩大 Pod 数量,您可以将策略设置为在 1 秒内旋转 100% 的 Pod,因此它会尝试在每一秒内旋转当前副本数量的 100%,直到与所需的副本数量匹配。
案例 3:Droplet 旋转所需的时间。(集群自动缩放器)
所用时间:
1 min 05 secs大约)1 min 20 secs10 - 20 secsTotal Time taken to droplet Available: 2 min 40 secs (approx)
情况 4:吊舱旋转所需的时间。(HPA)
这取决于缩减策略,如案例 2 所示。
案例 5:液滴旋转所需的时间。(集群自动缩放器)
所有 Target 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |