k8s pod自動重啟原因(jvm記憶體設定)

2021-09-17 23:19:37 字數 543 閱讀 3326

k8s集群環境下,docker容器中執行映象方式啟動springboot專案。由於製作的映象未對jvm的記憶體進行配置,那麼 jvm 會預設設定堆疊的大小,這個大小是根據物理機的記憶體進行分配的。 那麼物理機的記憶體越大,預設分配的記憶體就越大(最大堆疊=1/4 * 物理機記憶體,初始堆疊=1/64 * 物理機記憶體)。jvm 是不知道自己在docker容器中執行的,jvm識別的是物理主機的記憶體,而不是k8s給pod分配的記憶體或docker容器的記憶體。

因此在沒有給jvm指定記憶體大小的情況下,機器物理記憶體很大時,jvm預設占用的記憶體xms超出了k8s分配給pod的記憶體,導致pod記憶體溢位,從而k8s不斷重啟pod。也可能是執行過程中,jvm不斷申請記憶體直到最大堆記憶體xmx,xmx超出了k8s分配給pod的記憶體,從而k8s自動重啟pod。

也可能是設定了docker容器的記憶體限制,製作的映象未對jvm進行配置,那麼 jvm預設設定堆疊的大小。這樣,當jvm占用記憶體超過docker容器限制時,就會出現container 被docker killed情況。解決:一樣是設定jvm記憶體-xms、-xmx引數,注意要小於docker容器的記憶體限制。

k8s Pod生命週期和重啟策略

kubernetes k8s pod生命週期和重啟策略 pod的狀態描述 狀態值 描述 runnung pod內所有容器均已建立,且至少有乙個容器處於執行狀態 正在啟動狀態或正在重啟狀態。succeeded pod內所有容器均成功執行後退出,且不會再重啟。failed pod內所有容器均已退出,但至...

k8s pod的yaml檔案詳解

apiversion v1 版本 kind pod 型別,pod metadata 元資料 name string 元資料,pod的名字 namespace string 元資料,pod的命名空間 labels 元資料,標籤列表 name string 元資料,標籤的名字 annotations 元...

k8s pod的狀態為evicted

使用kubectl get pods,發現很多pod的狀態為evicted。原因eviction,即驅趕的意思,意思是當節點出現異常時,kubernetes將有相應的機制驅趕該節點上的pod。多見於資源不足時導致的驅趕。解決方案 排查資源和異常原因,防止新的驅趕產生。使用如下命令刪除舊驅趕的遺留 k...