Kubernetes 中 OOMKilled 的原因

Mat*_*s M 12 kubernetes

我尝试对 OOMKilled 事件有一个大致的了解,我发现了两个不同的原因:

  1. Pod内存超出限制:如果 Container 继续消耗超出其限制的内存,则 Container 会被终止。

  2. 节点内存不足:如果 kubelet 无法在节点遇到系统 OOM 之前回收内存,...则杀死容器...

问题

  • 它是否正确?
  • 还有其他原因吗?
  • 是否可以查看导致 OOMKilled 的原因?(了解原因很重要,因为补救措施会有所不同。)

Mat*_*s M 11

这两个问题都会导致不同的错误状态:

1:超出 Pod 内存限制导致OOMKilled终止

2:节点内存不足导致MemoryPressure和 pod 驱逐。

kubectl describe pod mypod-xxxx

...
Reason:         Evicted
Message:        Pod The node had condition: [MemoryPressure].
...
Run Code Online (Sandbox Code Playgroud)


pal*_*taa 7

这与kubernetes QoS有关。

TLDR: - 有 3 个不同的类别:

BestEffort:没有定义资源的 Pod,当节点资源耗尽时第一个被杀死。

突发:当您将资源请求和限制设置为不同的值时,限制请求是有保证的,但如果需要“突发”,它将与其他对象共享,并且取决于当时使用的资源量,但不能保证。

保证:当您将资源请求和限制设置为相同的值时,在这种情况下,资源将保证给 Pod。如果节点资源不足,将最后被杀死。