![kubernetes - 物理 kubernetes 节点上的 OOM 事件 - 如何限制?](https://linux22.com/image/754325/kubernetes%20-%20%E7%89%A9%E7%90%86%20kubernetes%20%E8%8A%82%E7%82%B9%E4%B8%8A%E7%9A%84%20OOM%20%E4%BA%8B%E4%BB%B6%20-%20%E5%A6%82%E4%BD%95%E9%99%90%E5%88%B6%EF%BC%9F.png)
我有自己的物理 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
正如其他人所指出的,您很可能缺少requests
Pod 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。