[英]kubernetes: how to restart pod on memory limit threshold
我有一個 memory 限制的部署
resources:
limits:
memory: 128Mi
但是我的應用程序在接近限制時開始失敗,所以,有什么方法可以在 pod 達到 memory 限制的百分比之前重新啟動它?
例如,如果限制為 128Mi,則在達到 85% 時重新啟動 pod。
我將從 Kuberentes 方面解決這個問題。
正如 arjain13 已經提到的,您想到的解決方案不是通往 go 的方法,因為它違反了Requests and limits的想法:
如果您為該容器設置了 4GiB 的 memory 限制,則 kubelet(和容器運行時)會強制執行該限制。 運行時防止容器使用超過配置的資源限制。 例如:當容器中的進程嘗試消耗超過允許的 memory 數量時,系統 kernel 終止嘗試分配的進程,並出現 out of ZCD69B4957F06CD818D7BFOO3D61980E291 錯誤。
您還可以找到超出容器的 memory 限制的示例:
如果節點有 memory 可用,則容器可以超過其 memory 請求。 但是一個 Container 不能使用超過它的 memory 限制。 如果 Container 分配的 memory 超過其限制,則該 Container 成為終止的候選者。 如果 Container 繼續消耗 memory 超出其限制,則 Container 被終止。 如果可以重新啟動終止的容器,則 kubelet 會重新啟動它,就像任何其他類型的運行時故障一樣。
我想建議您在當前的用例中嘗試兩件事:
調試您的應用程序以消除 memory 泄漏,這似乎是此問題的根源。
使用livenessProbe :
指示容器是否正在運行。 如果 liveness 探測失敗,kubelet 會殺死容器,容器會受到其重啟策略的約束。
可以使用以下字段進行配置:
initialDelaySeconds
:容器啟動后,在啟動活動或就緒探測之前的秒數。 默認為 0 秒。 最小值為 0。
periodSeconds
:執行探測的頻率(以秒為單位)。 默認為 10 秒。 最小值為 1。
timeoutSeconds
:探測超時的秒數。 默認為 1 秒。 最小值為 1。
successThreshold
:探測失敗后被視為成功的最小連續成功。 默認為 1。活性必須為 1。 最小值為 1。
failureThreshold
:當探測失敗時,Kubernetes 將在放棄之前嘗試failureThreshold
次。 在 liveness probe 的情況下放棄意味着重新啟動容器。 在就緒探測的情況下,Pod 將被標記為未就緒。 默認為 3。最小值為 1。
如果您為periodSeconds
、 timeoutSeconds
、 successThreshold
和failureThreshold
設置最小值,您可以期待更頻繁的檢查和更快的重啟。
您將在下面找到一些有用的資源和指南:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.