[英]Can a QoS Guaranteed pod be evicted by a higher priority pod?
[英]QoS class of Guaranteed for Pod in Kubernetes
在我的 kubernetes 節點上有
因此,我希望優先級 pod 的 QoS 等級為Guaranteed
。 要實現有Guaranteed
類, cpu/內存請求/限制必須滿足某些條件。 所以:
對於 Pod 中的每個 Container,CPU 限制必須等於 CPU 請求
但是我想設置比請求更高的 CPU 限制,以便優先級 pod 可以使用每個可用的空閑 CPU 資源。
簡單示例:具有 4 個內核的節點具有:
如果優先級 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.