簡體   English   中英

Kubernetes 中 Pod 保證的 QoS 等級

[英]QoS class of Guaranteed for Pod in Kubernetes

在我的 kubernetes 節點上有

  1. 優先 Pod
  2. 可有可無的豆莢

因此,我希望優先級 pod 的 QoS 等級為Guaranteed 要實現有Guaranteed類, cpu/內存請求/限制必須滿足某些條件 所以:

對於 Pod 中的每個 Container,CPU 限制必須等於 CPU 請求

但是我想設置比請求更高的 CPU 限制,以便優先級 pod 可以使用每個可用的空閑 CPU 資源。

簡單示例:具有 4 個內核的節點具有:

  • 1 個具有 2000 個 CPU 請求和 3900 個 CPU 限制的優先 pod
  • 3 個可有可無的 Pod,每 500 個 CPU 請求和限制。

如果優先級 Pod 將有 2000 個 CPU 請求並限制 2 個內核被浪費,因為可有可無的 Pod 大部分時間都不使用 CPU。

如果優先 pod 有 3900 個 CPU 請求和限制,我將需要一個額外的節點來處理可有可無的 pod。

問題

即使 CPU 請求和限制不同,是否可以將Guaranteed類顯式設置為 pod?

如果不可能:為什么沒有辦法明確設置 QoS 類?

評論

有一個系統集群關鍵選項。 但我認為這應該只用於關鍵的 k8s 附加 pod,而不是關鍵的應用程序。

即使 CPU 請求和限制不同,是否可以將Guaranteed類顯式設置為 pod?

是的,但是您需要使用一個額外的插件:與PriorityClass一起使用的容量調度

使用 Kubernetes 來管理批處理工作負載 (ML/DL) 的需求不斷增加。 在這些情況下,一個挑戰是提高集群利用率,同時確保每個用戶擁有合理數量的資源。 Kubernetes ResourceQuota可以部分解決這個問題。 本機 Kubernetes ResourceQuota API 可用於指定每個命名空間的最大總體資源分配。 配額執行是通過准入檢查完成的。 如果聚合資源分配超過配額限制,則無法創建配額使用者(例如 Pod)。 換句話說,總體資源使用情況是根據 Pod 的規范(即 cpu/mem 請求)在創建時聚合的。 Kubernetes 配額設計有一個限制:配額資源使用情況是根據資源配置(例如 Pod 規范中指定的 Pod cpu/mem 請求)聚合的。 這種機制雖然可以保證實際的資源消耗永遠不會超過ResourceQuota的限制,但可能會導致資源利用率低,因為一些pod可能已經申請了資源但沒有被調度。 例如,實際資源消耗可能遠小於限制。


可以按特定優先級創建 Pod。 通過使用配額規范中的scopeSelector字段,您可以根據 Pod 的優先級控制 Pod 對系統資源的消耗。

僅當配額規范中的scopeSelector選擇 pod 時,才會匹配和消耗配額。

當使用scopeSelector字段為優先級類scopeSelector配額時,配額對象僅限於跟蹤以下資源:

  • pods
  • cpu
  • memory
  • ephemeral-storage
  • limits.cpu
  • limits.memory
  • limits.ephemeral-storage
  • requests.cpu
  • requests.memory
  • requests.ephemeral-storage

這個插件也支持搶占(例如 Elastic):

搶占發生在 pod 不可調度時,即在 PreFilter 或 Filter 階段失敗。

特別是對於容量調度,失敗的原因可能是:

  • 預過濾階段
  • sum(在同一個 elasticquota 中分配的 pod 資源)+ pod.request > elasticquota.spec.max
  • sum(在同一個 elasticquota 中分配的 pod 資源) + pod.request > sum(elasticquota.spec.min)

因此,搶占邏輯將嘗試使 pod 可調度,代價是搶占其他正在運行的 pod。

yaml 文件和用法的示例可以在插件描述中找到。

暫無
暫無

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

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