如何增加Kubernetes的荚果数

如何增加Kubernetes的荚果数,kubernetes,google-cloud-platform,google-kubernetes-engine,Kubernetes,Google Cloud Platform,Google Kubernetes Engine,我对Kubernetes非常陌生,我在Kubernetes上部署了一个集群。创建了一个部署并将POD的计数设置为2。我没有为此部署创建HPA 我用谷歌云来做这个。我为集群启用了自动缩放。最小值为2,最大值为30 我的部署中出现了OOMKilled错误 所以问题是 所以只有HPA可以增加/减少吊舱数量,对吗??。在这种情况下,基于内存和CPU的HPA对于每个部署来说都是必须的 如果我错了,请纠正我。您可以使用kubectl更改正在运行的播客数量: kubectl规模部署--副本= kubectl

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

我用谷歌云来做这个。我为集群启用了自动缩放。最小值为2,最大值为30

我的部署中出现了OOMKilled错误

所以问题是

所以只有HPA可以增加/减少吊舱数量,对吗??。在这种情况下,基于内存和CPU的HPA对于每个部署来说都是必须的


如果我错了,请纠正我。

您可以使用
kubectl
更改正在运行的播客数量:

kubectl规模部署--副本=

kubectl规模部署学生应用程序--副本=2


您可以在

上找到更多信息。实际上,OOM可能是应用程序内部的一个复杂问题,与缩放无关。假设在长时间运行的应用程序中存在mem泄漏。如果你唯一要做的就是扩展到更多的豆荚,那么你最终只会消耗越来越多的资源,并且仍然会在豆荚上遇到OOM杀手

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

想象一个应用程序可以使用高达64 Mb的内存,但在一些非常罕见的情况下,它可以跳到256。。。那么,你需要给它256。如果该应用程序运行在多进程/线程环境中,运行N个worker(即php fpm),那么它的最大内存使用量在峰值为Nx256(这就是为什么在许多情况下不运行容器中的多个进程池,而是使用HPA来扩展它们的原因)

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


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

就可以了,HPA是特定于pod的。我不会说这是每次部署的要求。例如,MySQL恰好非常擅长保留内存,通常编写良好的应用程序在执行辅助任务时可能会达到100%的cpu。我认为这实际上取决于应用程序。L7负载均衡器,例如,在cpu上扩展或丢弃数据包

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

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

根据我的经验,几乎在每次部署中都应该提供资源请求,以便正确地进行集群扩展。

应该是--副本(缺少s)