【问题标题】:Best way to find out and set application resource limits/request on kubernetes在 kubernetes 上查找和设置应用程序资源限制/请求的最佳方法
【发布时间】:2019-01-17 20:17:40
【问题描述】:

希望你能帮我解决这个问题!

获取和设置请求以及限制每个 pod 资源的最佳方法是什么?

我正在考虑设置预期的流量数量并编写一些负载测试,然后以一些“低限制”启动一个 pod 并运行负载测试直到 OOMed,然后再次调整(例如超频)内存直到找到瓶颈,然后攻击CPU,直到一切都“稳定”等等。然后我会将该“限制”用作“请求值”,并将“请求值”的两倍用作“限制”(或基于结果的安全值)。最后将它们扩展为平均流量(固定数量的 Pod),并为峰值生产值设置自动缩放 Pod 规则。

这是一个好方法吗?您推荐哪些工具和指标?我使用 prometheus-operator 进行监控,使用 vegeta 进行负载测试。

垂直 pod 自动缩放怎么样?你用过吗?准备好生产了吗?

顺便说一句:我正在使用 AWS 托管解决方案部署 w/ terraform 模块

感谢阅读

【问题讨论】:

    标签: performance kubernetes resources load-testing devops


    【解决方案1】:

    我通常在没有限制或资源设置的情况下启动我的 pod。然后我让它们在正常负载下运行一段时间以收集有关资源消耗的指标。

    然后,我将内存和 CPU 请求设置为测试期间获得的最大消耗的 +10%,并将请求限制为 +25%。

    这只是一个示例策略,因为没有一刀切的方法。

    【讨论】:

    • 澄清一下,当您说 +10% 时,您是指超过最大消耗量的 10% 还是最大消耗量的 10%?
    • 超过最大值的 10%,所以如果最大使用量为 100Mb,我会设置 110Mb 作为请求。
    • 哦,有趣。为什么将请求设置为最大值? stackoverflow.com/a/56981709/6629672 中的建议和我的老板建议做平均。
    • 正如我所提到的,这只是一种可能对您不起作用的策略。我的理由是,在初始测试期间,您可能无法满足应用程序的所有内存需求,因此在请求中为其提供更多空间会限制节点存在内存压力的机会。使用平均值听起来也是一个不错的策略
    【解决方案2】:

    VerticalPodAutoScaler 更多的是确保 Pod 可以运行。所以每次它被OOMKilled时,它都会从低位开始并加倍内存。这可能会导致 Pod 占用资源。它也受到限制,因为它没有考虑到表现不佳。如果您的应用程序资源不足,它可能仍会响应,但不会在您认为可接受的时间范围内响应。

    我认为您在查看负载下的应用程序并评估它需要执行的操作时采取了一种很好的方法。我怀疑我可以建议您尚未了解的任何工具,但如果它有帮助,请在 How to set the right cpu millicores for a container? 中进行更多讨论以及从中链接的线程

    【讨论】:

      猜你喜欢
      • 2022-11-04
      • 2019-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 2014-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多