如何在Kubernetes中增加PODS

14

我对Kubernetes非常新手,已在Kubernetes上部署了一个集群。创建了一个deployment并将POD数量设置为2。我没有为此deployment创建HPA。

我正在使用Google Cloud。 我启用了集群的自动扩展。最小值为2,最大值为30。

我的部署中出现了OOMKilled错误。

因此问题是:

只有HPA才能增加/减少POD数量,我是正确的吗??在这种情况下,基于内存和CPU的HPA对于每个deployment都是必要且应该的。

如果我错了,请纠正我。

3个回答

20

您可以使用kubectl更改运行的Pod数:

kubectl scale deployment <DEPLOYMENT NAME> --replicas=<#PODS>
kubectl scale deployment student-app --replicas=2

您可以在文档页面找到更多信息。


2
应该是 --replica(缺少一个s)。 - Ted

0

不完全是这样,OOM可能是应用程序内部的一个复杂问题,与扩展无关。想象一下,您的长时间运行的应用程序中有一个mem泄漏。如果您唯一要做的事情就是扩展到更多的pod,那么您最终只会消耗越来越多的资源,并且仍然会在pod上遇到OOM Kills。

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

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

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

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


0

你说得没错,HPA(Horizontal Pod Autoscaler)是针对特定 Pod 的。我不认为每个部署都需要它。例如,MySQL 恰好擅长占用内存,通常写得好的应用程序可能会在执行 worker 作业时突然占用 100% 的 CPU。我认为这真的取决于应用。例如,L7 负载均衡器会根据 CPU 或拒绝数据包进行扩展。

然而,集群扩展是基于 Pod 规范中的资源块,具体指资源请求。Kubernetes 监控每个节点上每个 Pod 的资源请求量,以确定该节点的使用情况。如果所有节点都已满,并且有一个等待调度的新节点,则创建一个新节点。

应用开发人员需要避免分配他们没有的内存。如果您遇到 OOM(Out Of Memory)错误,说明应用程序写入了一种假设它将能够分配内存的方式。当你编写在 Docker 容器中运行的应用程序时,我相信这些限制对你是可见的,并由 cgroups 设置。资源限制也可以在达到某些指定限制后杀死容器,只是我不确定这是否会显示为 OOM 错误。

在我的经验中,资源请求是几乎每个部署都应提供的内容,以便集群扩展正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接