我正在使用minikube,以
开头minikube start --memory 8192
用于节点的8Gb RAM。 我正在分配具有资源限制的pod
resources:
limits:
memory: 256Mi
requests:
memory: 256Mi
所以每个节点的256Mb RAM会给我,我会假设,32个pod直到达到8Gb内存限制但问题是每当我到达第8个pod要部署时,第9个将永远不会运行,因为它是经常OOMKilled。
对于上下文,每个pod都是一个Java应用程序,带有frolvlad / alpine-oraclejdk8:slim-Docker容器与-Xmx512m -Xms128m运行(即使JVM确实使用完整的512Mb而不是256Mb,我仍然会远离16 pod限制打到8Gb上限)。
我在这里缺少什么?为什么pod被OOMKilled显然有这么多可用的可分配内存呢?
提前致谢
答案 0 :(得分:28)
您必须了解请求和限制的工作方式。
请求是节点上要求的可分配资源量的要求,以便在其上安排pod。这些不会导致OOM,它们会导致pod无法安排。
另一方面的限制是给定pod的硬限制。该舱将被限制在此级别。所以,即使你有16GB的RAM空闲,但它有256MiB的限制,只要你的pod达到这个级别,它就会遇到OOM杀死。
如果需要,您只能定义请求。然后,您的pod将能够增长到完整节点容量,而不受限制。
https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/