如果请求的内存是 "the minimum",为什么 kubernetes 在超过请求的 10 倍时杀死我的 pod?

If requested memory is "the minimum", why is kubernetes killing my pod when it exceeds 10x the requested?

我正在调试 Kubernetes 中的 pod 逐出问题。

好像跟PHPFPM子进程数量的一个配置有关。

我分配了 128 MB 的最小内存,当超过该数量的 10 倍时,Kubernetes 显然会驱逐我的 pod (The node was low on resource: memory. Container phpfpm was using 1607600Ki, which exceeds its request of 128Mi.)

我该如何防止这种情况发生?我认为请求的资源是最小的,如果没有上限,pod 可以使用任何可用的资源。

请求的内存不是“最小值”,它就是所谓的 - pod 请求 的内存量。 kubernetes在调度pod的时候,以request为导向,选择一个能够承受这个负载的node,但是不保证node内存不足时pod不会被kill。

根据文档 https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#how-pods-with-resource-limits-are-run

if a container exceeds its memory request and the node that it runs on becomes short of memory overall, it is likely that the Pod the container belongs to will be evicted.

如果你想为你的 pods 保证一定的内存 window - 你应该使用 limits,但在那种情况下,如果你的 pod 没有使用大部分内存,就会被“浪费”

所以要回答您的问题“我怎样才能防止这种情况发生?”,您可以:

  • 以某种方式重新配置您的 php-fpm,以防止它使用 10 倍内存(即减少工作人员数量),并配置自动缩放。这样你的超载 pods 就不会被驱逐,并且 kubernetes 将在更高负载
  • 的情况下安排新的 pods
  • 设置内存限制以保证您的 pods
  • 有一定数量的内存
  • 增加节点上的内存
  • 使用亲缘关系将您的要求 pods 安排在一些专用节点上,将其他工作负载安排在单独的节点上