首页 文章

如何在kubernetes中处理apache的资源限制

提问于
浏览
1

我正在尝试在Google Cloud 上部署可扩展的Web应用程序 . 我有kubernetes部署,它创建了apache php pods的多个副本 . 这些设置了cpu /内存资源/限制 .

可以说每个副本的内存限制是2GB . 如何正确配置apache以遵守此限制?

我可以修改每个进程的最大进程数和/或最大内存,以防止内存溢出(因此副本不会因为OOM而被杀死) . 但这确实会产生新问题,此设置还将限制我的副本可以处理的最大请求数 . 在DDOS攻击(或更多流量)的情况下,瓶颈可能是最大进程限制,而不是内存/ CPU限制 . 我认为这可能经常发生,因为这些限制设置为最坏情况,而不是基于平均流量 .

我想配置自动调节器,以便在发生此类事件时创建多个副本,而不仅仅是在cpu /内存使用率接近限制时 .

我该如何正确解决这个问题?感谢帮助!

1 回答

  • 2

    我建议执行以下操作,而不是尝试配置apache以在内部限制自身:

    • 对pod进行资源限制 . 即让他们OOM . (但请参阅注*)

    • 根据负载为部署定义自动缩放规范 .

    • 设置命名空间范围的资源配额 . 这会对该命名空间中可以使用的资源pod进行群集范围限制 .

    通过这种方式,您可以让Apache PHP pod尽可能多地处理请求,直到他们OOM,此时他们重新生成并再次加入池,这很好*(因为希望它们是无状态的)并且在任何时候都没有资源利用率超过对命名空间强制执行的资源限制(配额) .


    *注意:只有当你没有做像websockets或基于流的HTTP这样的花哨的东西时才会这样,在这种情况下,OOMing Apache实例会删除其他持有开放套接字的客户端 . 如果你愿意,你应该总是能够根据它运行的线程/进程的数量对apache强制实施限制,但最好除非你有坚实的需要 . 有了这种设置,无论你做什么,你都无法逃避大规模的DDoS攻击 . 您要么破坏套接字(在OOM的情况下)或请求超时(没有足够的线程来处理请求) . 您需要更复杂的网络/过滤设备来防止“好”的流量受到打击 .

相关问题