資源配額
ResourceQuota 用於限制命名空間內的資源使用量。它幫助管理員控制和限制叢 集資源的分配,以確保命名空間之間資源分配的公平性和可控性。
在 Harvester 中,ResourceQuota 可以定義以下資源的使用限制:
- CPU: 限制運算資源的使用量,包括 CPU 核心數和 CPU 時間。
- 記憶體: 限制記憶體資源的使用量,以位元組或其他可識別的記憶體單位表示。
- 儲存: 限制儲存資源的使用量。
透過 Rancher 設定 ResourceQuota
在 Rancher UI 中,管理員可以透過以下步驟為命名空間設定資源配額:
-
點擊漢堡選單並選擇 Virtualization Management 標籤頁。
-
選擇其中一個叢集,然後前往 Projects/Namespaces > Create Project。
-
指定所需的專案 Name。接下來,前往 Resource Quotas 標籤頁並選擇 Add Resource 選項。在 Resource Type 欄位中,選擇 CPU Limit 或 Memory Limit,並定義 Project Limit 和 Namespace Default Limit 的值。

VM Default Resource Limit 用於為命名空間內執行的 pod 設定運算資源的預設請求/限制,使用 Kubernetes LimitRange API。資源的 reservation 和 limit 值對應於命名空間 LimitRange 設定的 defaultRequest 和 default 限制。這些設定僅適用於 pod 工作負載。
這些設定將在未來移除。請參閱 issue https://github.com/harvester/harvester/issues/5652。
您可以按照以下方式設定 Namespace 限制:
-
找到新建立的專案,然後選擇 Create Namespace。
-
指定所需的命名空間 Name,並調整限制。
-
選擇 Create 完成流程。

當達到資源配額時,嘗試為客體叢集佈建 VM 會被阻擋。Rancher 會透過在迴圈中建立新 VM 來回應,每次建立 VM 失敗後會立即進行另一次建立嘗試。這會導致叢集出現暫時性錯誤狀態,但由於 VM 正在重新建立,該錯誤不會被記錄。
- 由於虛擬機器的額外記憶體開銷,每個 VM 需要一些額外的記憶體才能運作。設定 Memory Limit 時應考慮到這一點。例如,當專案的 Memory Limit 為
24 Gi時,無法執行 3 個各有8 Gi記憶體的 VM。此連結包含一個表格,顯示 VM 的最終記憶體是如何計算的。 - 當您計劃將 Harvester 設定 additional-guest-memory-overhead-ratio 變更為更大的值時,請記得檢視
ResourceQuota值並相應地更新它們。您需要調整這兩個參數,以確保ResourceQuota可以容納具有新額外記憶體開銷的原始 VM 數量。
虛擬機器的額外記憶體開銷
建立虛擬機器(VM)時,VM 控制器會無縫地將額外資源整合到 VM 的設定中。這些額外資源旨在保證 VM 的一致且不間斷的運作。需要注意的是,設定記憶體限制需要更高的記憶體保留,因為包含了這些額外資源。
例如,考慮使用以下設定建立一個新 VM:
- CPU:8 核心
- 記憶體:16Gi
作業系統(無論是 Linux 還是 Windows)不會影響額外開銷的計算。
記憶體開銷在以下部分計算:
- 記憶體頁表開銷: 這為每 512b RAM 大小計算一個位元。例如,16Gi 的記憶體需要 32Mi 的開銷。
- VM 固定開銷: 這由多個組件組成:
VirtLauncherMonitorOverhead:25Mi(virt-launcher-monitor 的psRSS)VirtLauncherOverhead:100Mi(virt-launcher 程序的psRSS)VirtlogdOverhead:20Mi(virtlogd 的psRSS)VirtqemudOverhead:35Mi(virtqemud 的psRSS)QemuOverhead:30Mi(qemu 的psRSS,減去其(壓力測試)客體的 RAM,減去虛擬頁表)
- 每個 CPU(vCPU)8Mi 開銷: 此外,每個 vCPU 增加 8Mi 的開銷,以及為 IOThread 增加固定的 8Mi 開銷。
- 額外增加的開銷: 這包含各種因素,如視訊 RAM 開銷和架構開銷。更多詳細資訊請參閱 Additional Overhead。
- additional-guest-memory-overhead-ratio 使用者可以透過 Harvester 設定 additional-guest-memory-overhead-ratio 進一步調整
Memory Overhead,預設值為"1.5"。此設定對於 VM 消除發生 OOM(記憶體不足)的機會非常重要。
此計算顯示 VM 執行個體需要大約 380Mi 的額外記憶體開銷。
更多資訊請參閱 Memory Overhead。
有關 Kubevirt 中如何計算記憶體開銷的更多資訊,請參閱原始碼 GetMemoryOverhead。
Overhead Memory 在不同的 Harvester 版本(具有不同的 Kubevirt 版本)之間會有所不同,因為所有這些支援元件都在不斷新增新功能和修復錯誤,它們需要更多記憶體。
遷移期間自動調整 ResourceQuota
當由 ResourceQuota 物件控制的已分配資源配額達到限制時,遷移 VM 變得不可行。遷移程序會自動建立一個與來源 VM 資源需求相同的新 pod。如果這些 pod 建立的先決條件超過了定義的配額,遷移操作將無法進行。
自 v1.2.0 起可用
在 Harvester 中,ResourceQuota 值會在遷移前動態擴展,以容納目標虛擬機器的資源需求。遷移後,ResourceQuota 將恢復為先前的設定。
請注意 ResourceQuota 自動調整大小的以下限制:
-
在 VM 遷移期間無法變更
ResourceQuota。 -
當提高
ResourceQuota值時,如果您建立、啟動或還原其他 VM,Harvester 將根據原始ResourceQuota驗證資源是否足夠。如果條件不符合,系統將警告遷移程序不可行。 -
擴展
ResourceQuota後,非 VM pod 和 VM pod 之間可能會發生潛在的資源競爭,導致遷移失敗。因此,不建議將自訂容器工作負載和 VM 部署到同一命名空間。 -
由於 webhook 驗證器的並發限制,VM 控制器將執行二次驗證以確認資源是否足夠。如果資源不足,它將自動將 VM 的
RunStrategy設定為Halted,並在 VM 物件中新增一個新的 annotationharvesterhci.io/insufficient-resource-quota,通知您 VM 因資源不足而被關閉。
停用遷移期間自動調整 ResourceQuota
自 v1.4.2 起可用
當 ResourceQuota 物件具有 annotation harvesterhci.io/skipResourceQuotaAutoScaling: "true" 時,Harvester 不會自動調整該物件的值。此功能對於除錯、故障排除和其他任務非常有用。
您必須在遷移開始前設定 annotation。如果在值已經被調整時才設定 annotation,Harvester 將無法自動恢復先前的設定。