0

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

看起来它与 PHP FPM 子进程数量中的配置有关。

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

我怎样才能防止这种情况?我认为请求的资源是最低限度的,如果没有上限,pod 可以使用任何可用的资源。

4

1 回答 1

2

请求的内存不是“最小”,它就是所谓的——pod请求的内存量。kubernetes 在调度 pod 时,会以 request 为指导,选择一个能适应这种工作负载的节点,但不保证节点内存不足时不会杀死 pod。

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

如果一个容器超过了它的内存请求,并且它运行的节点整体内存不足,那么该容器所属的 Pod 很可能会被驱逐。

如果您想为您的 pod 保证某个内存窗口 - 您应该使用limits,但在这种情况下,如果您的 pod 没有使用大部分内存,它将被“浪费”

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

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