如果我正確理解 Kubernetes OOM 殺死 pod 或容器的條件(來自 komodor.com):
如果容器使用的記憶體超過其記憶體限制,則會以 OOMKilled 狀態終止。同樣,如果所有容器或節點上所有 Pod 的總體記憶體使用量超過定義的限制,則可能會終止一個或多個 Pod。
這意味著如果 pod 中的容器超過總記憶體,它將被殺死(容器)而不是 pod 本身。類似地,如果一個 pod 中有多個容器,并且 pod 本身超過了它的記憶體限制,這是該 pod 中所有容器的記憶體限制之和 - 該 pod 將被 OOM 殺死。然而,后者似乎只有在其中一個容器超過其記憶體限額時才有可能。在這種情況下 - 容器不會先被殺死嗎?
我試圖了解 pod 被 OOM 殺死而不是容器的實際情況。
我還注意到,當 pod 中有一個容器并且該容器反復超出其記憶體限額時 - pod 和容器會間歇性地被殺死。我觀察到這一點 -容器將重新啟動,這可以通過觀察 pod 的日志來觀察,并且每隔一次 - pod被殺死并重新啟動,從而增加其重新啟動計數。
如果有助于理解行為 - pod 的 QOS 類是Burstable.
uj5u.com熱心網友回復:
Pod 根本沒有被 OOM 殺死。OOMKilled 是最終由內核行程(OOM Killer)殺死行程(容器是行程)引起的狀態,然后被設定容器狀態的 kubelet 識別。如果 pod 中的主容器被殺死,則默認情況下,pod 將由 kubelet 重新啟動。一個 pod 不能被終止,因為一個 pod 是一個資料結構而不是一個行程。同樣,它本身不能有記憶體(或 CPU)限制,而是受其組成部分的總和限制。
您參考的文章使用了不精確的語言,我認為這引起了一些混亂。有一篇更好的關于媒體的文章更準確地涵蓋了這一點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/520320.html
