簡體   English   中英

Kubernetes:了解資源請求/限制和調度

[英]Kubernetes: Understanding resource requests/limits and scheduling

我試圖了解時間表在某些情況下的行為方式/原因。 有人可以解釋調度程序在這些場景中會做什么(以及為什么)嗎?

假設我有一個 10GB 的內存盒

我有一個內存請求設置為 1G 的容器。 我運行了它的 10 個副本,我希望在同一個盒子上看到所有 10 個(在這種情況下忽略任何 kube 系統樣式的 pod)

現在假設我還添加了設置為 2G 的內存限制。 發生什么了? 對我來說,這對調度程序說“這個 pod 要求 1G,但可以增長到 2G”——調度程序是否仍將所有 10 個放在同一個盒子上,知道它很可能不得不將其中的一半踢掉? 或者它會分配 2G,因為這是描述的限制?

假設如果我不聲明限制,那么 pod 會一直增長,直到節點耗盡內存,然后殺死超過其請求資源的 pod,我是否也正確? 或者它會假設某種默認值?

請求是需要在節點上專門提供給該 pod 以便它進行調度的內容。 這是從可用資源計數中扣除的內容。 限制就是限制。 pod 的使用將被限制為該值。

因此,如果您有 10G 節點,並且想要在其上安裝req: 1G, limit: 2G pods,您將能夠安裝其中 10 個,並且如果有足夠的未使用空間,它們將能夠突增至 2G 內存使用量來自其他人的內存(即,您請求 1G,但實際上使用了 700M,這為您提供了大約 3G 請求,但未使用的空間可用於由 Pod 突增到 2G 限制。

@Radek 的解釋當然是正確的。 為了回答您的后續問題,如果您確實聲明了資源並且沒有限制, 文檔解釋了可用的場景:如果節點可用,容器能夠超過其請求內存。 但不允許使用超過限制。 所以這里我們有你的用例 -

如果 Container 分配的內存超過其限制,則 Container 將成為終止的候選者。 如果 Container 繼續消耗超出其限制的內存,則 Container 將被終止。 如果終止的 Container 可以重新啟動,kubelet 會重新啟動它,就像任何其他類型的運行時故障一樣。

如果沒有限制:

  • 其中之一實際上就是您編寫的內容,如果沒有限制,它們可能會增長,直到使用 Node.js 上的可用內存。
  • 如果容器在具有默認內存限制的命名空間中運行,則它將自動具有該默認限制。

為了完全掌握這個主題,我認為重要的是要了解設置限制是為了防止爆發,因此當您的容器在一段時間內處於峰值時,您仍然會為其余組件保留可用資源,並且在那里不會有嚴重的災難。

我強烈建議嘗試官方文檔中的一些用例( CPUMemory ),以便您可以測試自己的場景並更好地理解它。 例如,您可以使用 minikube 立即完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM