Kubernetes (minikube) pod OOMKilled,节点中显然剩余大量内存
Kubernetes (minikube) pod OOMKilled with apparently plenty of memory left in node
我正在使用 minikube,从
开始
minikube start --memory 8192
对于节点的 8Gb RAM。
我正在分配 pods 资源限制
resources:
limits:
memory: 256Mi
requests:
memory: 256Mi
所以每个节点有 256Mb 的 RAM,我想这会给我 32 pods,直到达到 8Gb 内存限制,但问题是每当我到达要部署的第 8 个 pod 时, 9th 永远不会 运行 因为它总是 OOMKilled。
对于上下文,每个 pod 都是一个 Java 应用程序,带有 frolvlad/alpine-oraclejdk8:slim Docker 容器 运行 和 -Xmx512m -Xms128m(即使 JVM 确实使用完整的 512Mb 而不是 256Mb 我仍然远离 16 pod 限制以达到 8Gb 上限)。
我在这里错过了什么?为什么 pods 被 OOMKilled 而显然还剩下这么多可用的可分配内存?
提前致谢
您必须了解请求和限制的工作方式。
请求是对节点上调度 Pod 所需的可分配资源量的要求。这些不会导致 OOM,它们会导致 pod 无法调度。
另一方面,限制是给定 pod 的硬性限制。豆荚将被限制在这个水平。因此,即使您有 16GB 的空闲 RAM,但有 256MiB 的限制,一旦您的 pod 达到这个级别,它就会遇到 OOM kill。
如果需要,您可以只定义请求。然后,您的 pods 将能够增长到全节点容量,而不会受到限制。
https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
我正在使用 minikube,从
开始minikube start --memory 8192
对于节点的 8Gb RAM。 我正在分配 pods 资源限制
resources:
limits:
memory: 256Mi
requests:
memory: 256Mi
所以每个节点有 256Mb 的 RAM,我想这会给我 32 pods,直到达到 8Gb 内存限制,但问题是每当我到达要部署的第 8 个 pod 时, 9th 永远不会 运行 因为它总是 OOMKilled。
对于上下文,每个 pod 都是一个 Java 应用程序,带有 frolvlad/alpine-oraclejdk8:slim Docker 容器 运行 和 -Xmx512m -Xms128m(即使 JVM 确实使用完整的 512Mb 而不是 256Mb 我仍然远离 16 pod 限制以达到 8Gb 上限)。
我在这里错过了什么?为什么 pods 被 OOMKilled 而显然还剩下这么多可用的可分配内存?
提前致谢
您必须了解请求和限制的工作方式。
请求是对节点上调度 Pod 所需的可分配资源量的要求。这些不会导致 OOM,它们会导致 pod 无法调度。
另一方面,限制是给定 pod 的硬性限制。豆荚将被限制在这个水平。因此,即使您有 16GB 的空闲 RAM,但有 256MiB 的限制,一旦您的 pod 达到这个级别,它就会遇到 OOM kill。
如果需要,您可以只定义请求。然后,您的 pods 将能够增长到全节点容量,而不会受到限制。
https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/