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/