【K8s任務】為容器和 Pod 分配內存資源


參考:https://kubernetes.io/zh/docs/tasks/configure-pod-container/assign-memory-resource/

指定內存請求和限制

要為容器指定內存請求,請在容器資源清單中包含 resources:requests 字段。 同理,要指定內存限制,請包含 resources:limits。

在本練習中,你將創建一個擁有一個容器的 Pod。 容器將會請求 100 MiB 內存,並且內存會被限制在 200 MiB 以內。 這是 Pod 的配置文件:

apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
  namespace: mem-example
spec:
  containers:
  - name: memory-demo-ctr
    image: polinux/stress
    resources:
      limits:
        memory: "200Mi"
      requests:
        memory: "100Mi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]

配置文件的 args 部分提供了容器啟動時的參數。 "--vm-bytes", "150M" 參數告知容器嘗試分配 150 MiB 內存。

超過容器限制的內存

當節點擁有足夠的可用內存時,容器可以使用其請求的內存。 但是,容器不允許使用超過其限制的內存。 如果容器分配的內存超過其限制,該容器會成為被終止的候選容器。 如果容器繼續消耗超出其限制的內存,則終止容器。 如果終止的容器可以被重啟,則 kubelet 會重新啟動它,就像其他任何類型的運行時失敗一樣。

超過整個節點容量的內存

內存請求和限制是與容器關聯的,但將 Pod 視為具有內存請求和限制,也是很有用的。 Pod 的內存請求是 Pod 中所有容器的內存請求之和。 同理,Pod 的內存限制是 Pod 中所有容器的內存限制之和。

Pod 的調度基於請求。只有當節點擁有足夠滿足 Pod 內存請求的內存時,才會將 Pod 調度至節點上運行。

內存單位

內存資源的基本單位是字節(byte)。你可以使用這些后綴之一,將內存表示為 純整數或定點整數:E、P、T、G、M、K、Ei、Pi、Ti、Gi、Mi、Ki。 例如,下面是一些近似相同的值:

128974848, 129e6, 129M , 123Mi

如果你沒有指定內存限制

如果你沒有為一個容器指定內存限制,則自動遵循以下情況之一:

  • 容器可無限制地使用內存。容器可以使用其所在節點所有的可用內存, 進而可能導致該節點調用 OOM Killer。 此外,如果發生 OOM Kill,沒有資源限制的容器將被殺掉的可行性更大。

  • 運行的容器所在命名空間有默認的內存限制,那么該容器會被自動分配默認限制。 集群管理員可用使用 LimitRange 來指定默認的內存限制。

內存請求和限制的目的

通過為集群中運行的容器配置內存請求和限制,你可以有效利用集群節點上可用的內存資源。 通過將 Pod 的內存請求保持在較低水平,你可以更好地安排 Pod 調度。 通過讓內存限制大於內存請求,你可以完成兩件事:

  • Pod 可以進行一些突發活動,從而更好的利用可用內存。
  • Pod 在突發活動期間,可使用的內存被限制為合理的數量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM