繁体   English   中英

如何在Kubernetes中增加PODS

[英]How to increase PODS in Kubernetes

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

为此,我正在使用 Google Cloud。 我为集群启用了自动缩放。 最小值为 2,最大值为 30。

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

所以问题是

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

如果我错了,请纠正我。

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

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

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

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

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

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

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

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

您是正确的,HPA 是特定于 pod 的。 我不会说这是每个部署的要求。 例如,MySQL 恰好非常擅长保留内存,通常编写良好的应用程序在执行工作任务时可能会飙升至 100% 的 CPU。 我认为这真的只取决于应用程序。 例如,L7 负载平衡器可扩展 CPU 或丢弃数据包。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM