kubernetes 如果一个容器或pod超过了它的内存限制(OOMKilled-137),这个Pod会被重新调度到另一个节点吗?

w46czmvw  于 2023-11-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(171)

根据我对Kubernetes的理解,如果Pod消耗的内存超过了它提到的限制。例如,如果提到的限制是128 Mi,但Pod尝试消耗内存> 128 Mi,那么它就会崩溃,之后如果内存消耗没有减少,它就会变成“OOMKilled”状态。这是由Linux内核处理的。我的困惑是,在Pod变成OOMKilled之后,它是否重新调度到相同的节点或不同的节点,或者它已经被杀死而没有恢复回来?
我在我的aks集群上试了一下。我看到pod崩溃了,最后OMMKilled了。但是在那之后,我看不到任何新的pod在节点上创建。请有人解释一下Kubernetes用来恢复这个pod的下一个恢复机制是什么?

resources:
        requests:
          memory: "64Mi"
          cpu: "0.1"
        limits:
          memory: "128Mi"
          cpu: "0.3"

字符串

2uluyalo

2uluyalo1#

Pod驱逐发生在Node未准备就绪和故障时。它将被重新调度到另一个健康的节点。这是基于诸如容忍秒数和Node的默认污染值等问题决定的。OOMKilled仅会为已被内核OOM杀手终止的容器报告。重要的是要注意,它是超过其内存限制的容器被终止(默认情况下重新启动),而不是整个pod(可以有其他容器)。另一方面,驱逐发生在pod级别,当节点内存不足时由Kubernetes(特别是由每个节点上运行的Kubelet)触发 *。已被驱逐的pod将报告Failed的状态和Evicted的原因。
关于原因的详细信息可以在pod驱逐的Kubelet事件中看到
您需要验证运行的详细信息

kubectl describe pod [name]

字符串
x1c 0d1x的数据
它应该显示类似这样的沿着事件下的原因。
回到您的问题- * Pod会重新启动还是保持死亡 * 取决于其node.kubernetes.io/not-readynode.kubernetes.io/unreachable容忍度以及RestartPolicy您可以在spec.template.spec.restartPolicy下验证您的重启策略
参考-
部署|Kubernetes
超出内存
Pods reschedule

相关问题