Rag*_*nar 5 google-cloud-platform kubernetes
对于 kubernetes 新手,我尝试使用气流启动 K8S(在 GCP 上)pod。第一次运行因“被驱逐”而终止
该节点资源不足:内存。容器基地正在使用 5168120Ki,这超出了其要求的 0。
我不明白这条消息的结尾。超过 0 ?
然后我开始阅读文档并了解请求和限制CPU和内存。我已经在我的机器上运行了我的 Python 程序,发现我需要大约 800Mo 的 RAM。然后我决定设置request = 1G
和limit = 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(内存不足)并将重新启动。
正确设置这些限制是一门艺术。首先要知道您的进程实际使用了多少内存。如果您可以离线运行它,像top
或 之类的基本工具ps
可以告诉您这一点;如果您设置了 Kubernetes 指标,Prometheus 等监控工具还可以识别每个 Pod 的内存使用情况。您需要将内存限制至少设置为您期望 Pod 使用的最大内存量(否则它会被 OOM 杀死)。
内存请求不太科学。如果节点有 15 GiB RAM,调度程序将允许总共请求内存为 15 GiB 的 Pod 在那里运行。如果您将资源请求设置为接近或等于资源限制,则能够在该节点上运行的其他 Pod 将会减少;节点耗尽内存的可能性较小;单个 Pod 被驱逐的可能性较小;如果 Pod 总体上没有使用它们请求的所有内存,那么某些资源将未被使用。设置较低的资源请求可以让更多的 pod 在节点上运行,并提高物理资源利用率(并且可能会减少节点),但如果超过 100%,则事物将被驱逐。
我倾向于围绕进程的典型用途设置资源请求,通过与用于查找限制的相同监视来设置资源请求。我还看到了非常合理的建议来设置请求和限制以避免 pod 被驱逐。这取决于您对 Pod 重新启动的容忍度,与您对运行(并支付)利用率较低的额外节点的容忍度相比。
归档时间: |
|
查看次数: |
10175 次 |
最近记录: |