1. 程式人生 > 其它 >【K8s任務】配置名稱空間的最小和最大記憶體約束

【K8s任務】配置名稱空間的最小和最大記憶體約束

參考:https://kubernetes.io/zh/docs/tasks/administer-cluster/manage-resources/memory-constraint-namespace/

建立 LimitRange

下面是 LimitRange 的配置檔案:

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-min-max-demo-lr
spec:
  limits:
  - max:
      memory: 1Gi
    min:
      memory: 500Mi
    type: Container

但請注意,即使你沒有在 LimitRange 的配置檔案中指定預設值,也會自動建立它們。

  limits:
  - default:
      memory: 1Gi
    defaultRequest:
      memory: 1Gi
    max:
      memory: 1Gi
    min:
      memory: 500Mi
    type: Container

嘗試建立一個超過最大記憶體限制的 Pod

輸出結果會顯示 Pod 沒有建立成功,因為容器宣告的記憶體限制太大了:

Error from server (Forbidden): error when creating "examples/admin/resource/memory-constraints-pod-2.yaml":
pods "constraints-mem-demo-2" is forbidden: maximum memory usage per Container is 1Gi, but limit is 1536Mi.

嘗試建立一個不滿足最小記憶體請求的 Pod

輸出結果會顯示 Pod 沒有建立成功,因為容器宣告的記憶體請求太小了:

Error from server (Forbidden): error when creating "examples/admin/resource/memory-constraints-pod-3.yaml":
pods "constraints-mem-demo-3" is forbidden: minimum memory usage per Container is 500Mi, but request is 100Mi.

建立一個沒有宣告記憶體請求和限制的 Pod

因為你的容器沒有宣告自己的記憶體請求和限制,它從 LimitRange 那裡獲得了 預設的記憶體請求和限制。

此時,你的容器可能執行起來也可能沒有執行起來。 回想一下我們本次任務的先決條件是你的每個節點都至少有1 GiB 的記憶體。 如果你的每個節點都只有1 GiB 的記憶體,那將沒有一個節點擁有足夠的可分配記憶體來滿足1 GiB 的記憶體請求。

強制執行記憶體最小和最大限制

LimitRange 為名稱空間設定的最小和最大記憶體限制只有在 Pod 建立和更新時才會強制執行。 如果你更新 LimitRange,它不會影響此前建立的 Pod。

設定記憶體最小和最大限制的動因

作為叢集管理員,你可能想規定 Pod 可以使用的記憶體總量限制。例如:

  • 叢集的每個節點有 2 GB 記憶體。你不想接受任何請求超過 2 GB 的 Pod,因為叢集中沒有節點可以滿足。
  • 叢集由生產部門和開發部門共享。你希望允許產品部門的負載最多耗用 8 GB 記憶體, 但是開發部門的負載最多可使用 512 MiB。 這時,你可以為產品部門和開發部門分別建立名字空間,併為各個名字空間設定記憶體約束。
作者:Varden 出處:http://www.cnblogs.com/varden/ 本文內容如有雷同,請聯絡作者! 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。