首页 文章

如何增加Kubernetes中的PODS

提问于
浏览
1

我是非常新的Kubernetes,我在Kubernetes上部署了一个集群 . 创建了一个部署并将POD的计数设置为2.我没有为此部署创建HPA .

我正在使用Google Cloud . 我为群集启用了自动缩放功能 . min是2,最大值是30 .

我在部署中遇到了 OOMKilled 错误 .

所以问题是

因此,只有HPA能够增加/减少PODS计数吗?在这种情况下,基于内存和CPU的HPA是每个部署必须且应该的 .

如果我错了,请纠正我 .

3 回答

  • 1

    你是对的,HPA是特定于pod的 . 我不会说这是每次部署的要求 . 例如,MySQL恰好擅长挂在内存上,而且通常写得很好的应用程序在执行工作时可能会达到100%cpu . 我认为这实际上取决于应用程序 . 例如,L7负载 balancer 器,在cpu或丢弃数据包上扩展 .

    但是,群集扩展基于pod规范的资源块,特别是资源请求 . Kubernetes监视节点上每个pod的资源请求量,以确定该节点的填充程度 . 如果所有节点都已满,并且有一个正在等待调度的pod,则会创建一个新节点 .

    应用程序开发人员不需要分配他们没有的内存 . 如果你被OOM杀死,那么应用程序的编写方式就是假设它能够分配 . 当您编写在docker容器内运行的应用程序时,我相信这些限制对您来说是可见的并由cgroups设置 . 一旦达到某个指定的限制,资源限制就可以杀死你的容器,我只是不确定这会在OOM被杀死时显示出来 .

    根据我的经验,资源请求几乎应该在每个部署中提供,以便集群扩展能够正常工作 .

  • 0

    您可以使用 kubectl 更改正在运行的窗格数:

    kubectl scale deployment <DEPLOYMENT NAME> --replica=<#PODS>

    你可以在docs page找到更多信息

  • 0

    实际上,OOM在您的应用程序中可能是一个与缩放无关的复杂问题 . 想象一下,在长时间运行的应用程序中有一个内存泄漏 . 如果你做的唯一事情是扩展到更多的pod,你最终只会消耗越来越多的资源,并且仍然会在你的pod上遇到OOM Kills .

    真正的解决方案是在应用程序中具有可预测的内存消耗模式 .

    想象一个可以使用高达64 Mb ram的应用程序,但在极少数情况下它可以跳到256 ......好吧,那么你需要给它256.如果这个应用程序在多进程/线程环境中运行怎么办?运行N个工作人员(即php-fpm)现在它的最大内存使用量是峰值中的Nx256(这就是为什么在许多情况下不能在容器中运行多个进程的池,而是用HPA来扩展它们) .

    最后,您对POD的内存请求/限制需要是应用程序内部需要的内容,因此分析应用程序并将其设计为可预测性是此处的解决方案 .

    最后,是的,如果您需要扩展部署(向上/向下),只需使用 kubectl scale

相关问题