gpt4 book ai didi

kubernetes - 由于内存或 OOMKilled 而被逐出的 Pod

转载 作者:行者123 更新时间:2023-12-05 05:03:27 26 4
gpt4 key购买 nike

kubernetes 的新手我尝试用气流启动 K8S(在 GCP 上)pod。第一次运行终止为“驱逐”

The node was low on resource: memory. Container base was using 5168120Ki, which exceeds its request of 0.

我不明白这条消息的结尾。超过0 ?

然后我开始阅读文档并了解请求和限制 CPU 和内存。我已经在我的机器上运行了我的 Python 程序,发现我需要大约 800Mo 的 RAM。然后我决定设置 request = 1Glimit = 2G。对于那个集合,我有另一个错误 OOMKilled

我什至尝试了 3G,但还是一样。我的集群有 2 个节点、4 个 vCPU、15Gb Ram。

为什么我在第一种情况下驱逐,而在第二种情况下 OOM?

最佳答案

鉴于该错误消息,您需要将内存限制设置为至少 5 GiB。 (如果您对此感到惊讶,您可以尝试使用堆分析器在 Kubernetes 之外复制您的工作负载,以查看发生了什么。)

在第一种情况下,节点本身内存不足(所有这 15 Gb 都被一些进程使用)。在这里,Kubernetes 调度程序查看节点上运行的 pod,并找到明显超过其资源请求的 pod。错误消息说你使用的内存比你请求的多 5 GiB,而你没有请求任何东西,所以你被驱逐了。 Pod 应该安排在不同的节点上。

在第二种情况下,您已将可使用的内存量限制为 2 或 3 GiB。但是,从第一条错误消息来看,进程想要使用 5 GiB。当您达到配置的限制时,您将收到 OOMKilled(内存不足)并将重新启动。


正确设置这些限制是一门艺术。首先要知道您的进程实际使用了多少内存。如果您可以离线运行它,topps 等基本工具可以告诉您这一点;如果您设置了 Kubernetes 指标,像 Prometheus 这样的监控工具也可以识别每个 pod 的内存使用情况。您需要将内存限制至少设置为您希望 pod 使用的最大内存量(否则它会被 OOM 杀死)。

内存请求不太科学。如果节点有 15 GiB 的 RAM,调度程序将允许具有总共 15 GiB 的请求内存的 pod 在那里运行。如果您将资源请求设置为接近或等于资源限制,那么能够在该节点上运行的其他 pod 将更少;节点内存不足的可能性较小;单个 pod 被驱逐的可能性较小;如果 pod 总体上没有使用它们请求的所有内存,那么一些资源将未被使用。设置较低的资源请求允许更多的 pod 在节点上运行和更高的物理资源利用率(并且可能更少的节点),但如果超过 100%,东西将被驱逐。

我倾向于围绕进程的典型用途设置资源请求,从您用来查找限制的同一监控中。我还看到了非常合理的建议来设置请求和限制相同的请求以避免 pod 驱逐。这取决于您对 Pod 重启的容忍度与您对运行(并支付)较低利用率的额外节点的容忍度相比。

关于kubernetes - 由于内存或 OOMKilled 而被逐出的 Pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61675985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com