【发布时间】:2021-09-05 04:17:21
【问题描述】:
我想使用 Horizontal Pod Autoscaler 批量运行一组长时间运行的任务。在某些情况下,这些任务可能需要几分钟或几小时才能运行,并且始终使用 80~100% 的可用 CPU 资源。
我想了解 Autoscaler 在决定缩减队列规模时的行为。
- 假设有 4 个实例都在工作,它们的 CPU 利用率都为 95%。它无法再向上扩展,因为最大实例数设置为 4。向上扩展阈值设置为 75% 平均 CPU 利用率。
- 如果 2 个实例提前完成了工作,但另外 2 个实例还有几个小时的工作时间,那么队列的平均 CPU 利用率可能会下降到 50%。
- 然后 Autoscaler 决定是时候缩减了。但是,4 个实例中有 2 个仍在工作,因此 Autoscaler 有 50% 的可能性可能会选择正在工作的 Pod 并将其终止。
- 如果发生这种情况,该工作进度将丢失并标记为未完成,并且其中一个可用 pod 将获取工作并从头开始工作。
有没有办法通过优先选择 CPU 利用率最低的 Pod 来先缩减规模来防止这种情况发生?这样,那些正在处理工作的 pod 将保持不变。
【问题讨论】:
标签: kubernetes google-kubernetes-engine