Java Kubernetes(minikube)吊舱OOMKilled的节点中显然还有大量内存
我用的是minikube,从Java Kubernetes(minikube)吊舱OOMKilled的节点中显然还有大量内存,java,memory,kubernetes,minikube,Java,Memory,Kubernetes,Minikube,我用的是minikube,从 minikube start --memory 8192 用于节点的8Gb RAM。 我正在分配有资源限制的吊舱 resources: limits: memory: 256Mi requests: memory: 256Mi 因此,每个节点有256Mb的RAM,我假设在达到8Gb内存限制之前会有32个pod,但问题是,每当我到达要部署的第8个pod时,第9个pod将永远不会运行,因为它总是被OOM
minikube start --memory 8192
用于节点的8Gb RAM。
我正在分配有资源限制的吊舱
resources:
limits:
memory: 256Mi
requests:
memory: 256Mi
因此,每个节点有256Mb的RAM,我假设在达到8Gb内存限制之前会有32个pod,但问题是,每当我到达要部署的第8个pod时,第9个pod将永远不会运行,因为它总是被OOMKilled
在上下文中,每个pod都是一个Java应用程序,它有一个frolvlad/alpine-oraclejdk8:slim Docker容器,运行时使用-Xmx512m-Xms128m(即使JVM确实使用的是完整的512Mb而不是256Mb,但要达到8Gb的上限,我仍然离16个pod的限制很远)
我错过了什么?为什么豆荚中显然还有这么多空闲的可分配内存
提前感谢您必须了解请求和限制的工作方式 请求是对pod在节点上调度所需的可分配资源量的要求。这些将不会导致OOM,它们将导致pod无法安排 另一方面,限制是给定pod的硬限制。吊舱将在该高度加盖。所以,即使你有16GB的可用内存,但有256MB的限制,一旦你的pod达到这个级别,它将经历OOM杀死 如果需要,可以只定义请求。然后,您的POD将能够增长到完整的节点容量,而不会受到限制
eg:我有一个内存为1gb的节点,其中有两个吊舱。Pod1的内存限制为0.5gb。现在节点可用内存将为0.5gb。另一个Pod2没有限制。Pod2能否超过0.5gb内存??换句话说,Pod2可以使用分配给Pod1的内存吗??