Kubernetes(minikube)pod OOM杀死了节点中显然有足够的内存

时间:2017-07-23 21:29:27

标签: java memory kubernetes minikube

我正在使用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显然有这么多可用的可分配内存呢?

提前致谢

1 个答案:

答案 0 :(得分:28)

您必须了解请求和限制的工作方式。

请求是节点上要求的可分配资源量的要求,以便在其上安排pod。这些不会导致OOM,它们会导致pod无法安排。

另一方面的限制是给定pod的硬限制。该舱将被限制在此级别。所以,即使你有16GB的RAM空闲,但它有256MiB的限制,只要你的pod达到这个级别,它就会遇到OOM杀死。

如果需要,您只能定义请求。然后,您的pod将能够增长到完整节点容量,而不受限制。

https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/