kubernetes - 物理 kubernetes 节点上的 OOM 事件 - 如何限制?

kubernetes - 物理 kubernetes 节点上的 OOM 事件 - 如何限制?

我有自己的物理 kubernetes 节点,托管在物理机器上。(12 个核心,16GB 内存)我注意到在重负载期间,日志中出现了故障 pod 和 OOM 事件(内存不足终止)。

如果 RAM 耗尽,我如何强制 kubernetes 不在节点上安排任何作业?我正在kubernetes v1.16.11运行CentOS Linux 7 3.10.0-1127.10.1.el7.x86_64

PS 我添加了一段有问题的 pod 代码,我正在使用请求和限制

    containers:
  - name: jnlp
  (...)
    resources:
      requests:
        cpu: 500m
        memory: 1024Mi
      limits:
        memory: 2048Mi

 - name: build
  (...)
    resources:
      requests:
        cpu: 3000m
        memory: 4096Mi

答案1

正如其他人所指出的,您很可能缺少requestsPod limits。就您而言,由于即使您的内核也报告了 OOM 事件,您的 Pod 似乎消耗了大量内存。您可以在此处阅读有关资源管理的更多信息:https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

因此,请检查您的 Pod 并尝试强制执行容器资源。以下是一个容器的示例,该容器“保留” 300Mi 内存(容器保证获得的资源),但最多可以使用 600Mi 内存:

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: example-container
    image: example-image:1.0
    resources:
      requests:
        memory: "300Mi"
        cpu: "1000m"
      limits:
        memory: "600Mi"
        cpu: "2000m"

如果容器尝试使用超过 600Mi 的内存,它将被 OOMKilled。

相关内容