VMware Cloud Director 放置引擎可確定將 vApp 中的虛擬機器 (VM) 放置在哪個資源 (包括資源集區、資料存放區以及網路或網路集區) 中。引擎會根據每個虛擬機器需求為 vApp 中的每個虛擬機器單獨做出放置決策。

放置引擎會在下列案例中執行。
備註: VMware Cloud Director 會根據每個虛擬機器的需求單獨放置 vApp 中的虛擬機器。
  • 建立虛擬機器時,放置引擎會確定要將虛擬機器放置在哪個資源集區、資料存放區和網路集區中。
  • 啟動虛擬機器時,如果虛擬機器無法開啟電源,則 VMware Cloud Director 會選擇性地將虛擬機器移至另一個資源集區、資料存放區或網路集區。
  • 編輯虛擬機器以變更其資料存放區、資源或網路組態時,VMware Cloud Director 可能會將該虛擬機器移至支援新虛擬機器設定的不同資料存放區和資源集區。僅當目前資源無法支援新需求時,VMware Cloud Director 才會移動虛擬機器。
  • 將虛擬機器移轉到不同的資源集區時。
  • 當組織虛擬資料中心 (VDC) 探索到在支援該 VDC 的任何 vCenter Server 資源集區中建立的虛擬機器時,系統會建構一個簡化 vApp 以包含每個探索到的虛擬機器。
放置引擎會使用下列準則選取虛擬機器適用的候選資源集區。
  • CPU 容量
  • 記憶體容量
  • 虛擬 CPU 數目
  • 主機支援且提供者 VDC 允許的硬體版本
  • 相似性規則

放置引擎會從候選清單中篩選出已停用的資源集區。如果可能,VMware Cloud Director 會將虛擬機器與組織 VDC 中的其他虛擬機器放置在同一主機叢集上。

放置引擎會使用下列準則選取虛擬機器適用的候選資料存放區。
  • 儲存區容量和臨界值
  • 儲存區原則
  • 虛擬機器之間的相似性需求
  • IOPS 容量和虛擬機器磁碟 IOPS (如果啟用了 IOPS)
VMware Cloud Director 有兩個資料存放區臨界值。
  • 紅色臨界值 - 資料存放區上的可用空間量,低於該臨界值時,VMware Cloud Director 會在任何實體 (如虛擬機器、範本或磁碟) 的放置期間篩選出資料存放區。

    當資料存放區達到紅色臨界值時,工作負載放置引擎將停止在資料存放區上放置新的虛擬機器,但從 vCenter Server 匯入虛擬機器時除外。在匯入虛擬機器的情況下,如果 vCenter Server 虛擬機器已存在於紅色臨界值資料存放區中,則放置引擎將優先選取現有的資料存放區。

    工作負載放置引擎對所有工作流程使用紅色臨界值。請求進行任何新的放置時,放置引擎將首先篩選出已突破紅色臨界值的任何資料存放區或儲存網繭。請求對現有實體進行放置時,如果磁碟駐留在突破紅色臨界值的資料存放區上,VMware Cloud Director 會將磁碟重新放置到其他可用資料存放區中。然後,引擎會透過 VMware Cloud Director 的選取器邏輯或透過 vSphere Storage DRS 建議,從剩餘的資料存放區或儲存網繭中選取一個資料存放區。

  • 黃色臨界值 - 資料存放區上的可用空間量,低於該臨界值時,VMware Cloud Director 會在陰影虛擬機器的放置期間篩選出資料存放區,在此期間,VMware Cloud Director 會建立快速佈建的虛擬機器。如需有關陰影虛擬機器的詳細資訊,請參閱快速佈建虛擬機器

    黃色臨界值不適用於 VMware Cloud Director 用於快速佈建虛擬機器的連結複製。當放置引擎為連結複製選取資料存放區時,如果所選資料存放區缺少陰影虛擬機器,VMware Cloud Director 會在該資料存放區上建立陰影虛擬機器。在這種情況下,臨界值不適用於陰影虛擬機器。

    黃色臨界值僅適用於建立陰影虛擬機器的定期背景工作。如果啟用,工作每 24 小時執行一次,並針對指定的集線器和儲存區原則對在每個資料存放區上使用積極式虛擬機器建立。若要啟用工作以進行陰影虛擬機器的積極式佈建,必須將以下內容設定為 true
    valc.catalog.fastProvisioning=true
    備註: 定期背景工作會在所有範本的所有資料存放區上建立陰影虛擬機器。即使未使用資料存放區或陰影虛擬機器,該工作也會增加儲存區耗用量。

在大多數情況下,放置引擎會從候選清單中篩選出已停用的資料存放區和達到紅色臨界值的資料存放區。從 vCenter Server 中匯入虛擬機器時,引擎不會篩選出這些資料存放區。

實作臨界值邏輯時,VMware Cloud Director 不會評估目前放置主體的需求。對於要將主體放置在資料存放區上的工作負載放置引擎,可用空間 (以位元組為單位) 必須大於臨界值 (以位元組為單位)。例如,對於可用容量為 5 GB 且紅色臨界值設定為 4 GB 的資料存放區,放置引擎可以放置要求 2 GB 的虛擬機器。如果虛擬機器建立突破臨界值,則放置引擎會篩選出資料存放區以進行進一步的放置。

放置引擎會使用網路名稱選取 vApp 及其虛擬機器適用的候選網路集區。

放置引擎選取一組候選資源後,會為資源排列順序,然後根據每個虛擬機器的 CPU、虛擬 RAM 以及儲存空間組態,挑選每個虛擬機器的最佳位置。

排列資源的順序時,放置引擎會檢驗目前與預計的未來資源使用量。預計的未來使用量是根據目前放置在特定資源集區上的關閉虛擬機器,以及機器啟動後的預期使用量一起計算得出。對於 CPU 與記憶體,放置引擎會考慮目前未保留容量、最大使用量以及預計的未來未保留容量。對於儲存區,引擎會考慮每個資源集區所屬叢集提供的彙總佈建容量。然後,放置引擎會考慮每個資源集區目前適合性及未來適合性的加權度量。

需要移動時,放置引擎會偏好具有最多未保留 CPU、記憶體和儲存容量的資源集區。它也會給予黃色叢集較低的偏好,只有在沒有符合放置準則的可用健全叢集時,才會選取黃色叢集。從 vCenter Server 中匯入虛擬機器時,如果虛擬機器放置令人滿意,則為盡量減少移動,引擎會忽略臨界值。

開啟虛擬機器電源時,VMware Cloud Director 會嘗試在其目前位置開啟電源。如果 vCenter Server 報告主機 CPU 和記憶體容量錯誤,則 VMware Cloud Director 會嘗試資源集區兩次,然後再嘗試將虛擬機器移至組織 VDC 上的其他相容資源集區。重新執行放置引擎以嘗試找到相容的資源集區時,VMware Cloud Director 會排除之前嘗試過且失敗的資源集區。如果沒有合適的資源集區連線到 VMDK 所在的資料存放區,則將虛擬機器移至另一個資源集區可能會導致虛擬機器的 VMDK 移轉到其他資料存放區。如果虛擬機器無法放置在所有滿足虛擬機器需求的位置,則 VMware Cloud Director 將傳回一則錯誤訊息,指示放置不可行。如果與目前資料存放區具有相似性,但該資料存放區不可用,則放置引擎會傳回一則訊息,指示放置不可行。如果系統接近滿負荷運行,並且建議的解決方案目前不滿足所有需求,這是系統的正常狀態。若要修復錯誤,您可以新增或釋放資源並起始重試。當不需要特定的資料存放區時,放置引擎會在候選主機叢集或資源集區中選取滿足儲存區原則、儲存區容量和 IOPS 容量等其他需求的資料存放區。

在資源集區接近容量的同時部署情況中,即使資源集區缺少足以支援虛擬機器的資源,仍可能成功驗證該資源集區。在這種案例中,虛擬機器將無法開啟電源。如果在這種情況下虛擬機器無法開啟電源,並且有多個資源集區支援 VDC,若要提示 VMware Cloud Director 將虛擬機器移轉到其他資源集區,請再次啟動開啟電源作業。

當資源集區所屬的叢集接近容量時,如果沒有個別主機能為該資源集區上虛擬機器的開啟電源作業提供足夠的容量,此虛擬機器可能無法開啟電源。這種情形會因為叢集層級的容量分段而產生。在此類情況下,系統管理員必須將一些虛擬機器從叢集中移轉出來,使叢集維持足夠的可用容量。

虛擬機器放置引擎演算法

放置演算法會從主機叢集清單中挑選主機叢集,這些主機叢集具有所需的可用儲存區設定檔,並且滿足任何現有的虛擬機器-虛擬機器、虛擬機器-主機相似性或反相似性規則。 VMware Cloud Director 透過各種分數計算放置解決方案。若要變更引擎的行為,您可以使用儲存格管理工具來變更以底線 (_) 符號開頭的可設定參數。
  1. 對於每個主機叢集,工作負載放置引擎會計算 capacityScorefutureCapacityScorereservationScore。放置引擎會分別計算每個 CPU、記憶體和儲存區的分數。
    capacityScore: (not available in some cases ) 
    
    CPU = (cpuUnreservedCapacityMHz - (cupBurstMHz * _cpuBurstRatio)) / cpuRequirementMHz 
    Memory = (memoryUnreservedCapacityMB - (memBurstMB * _memoryBurstRatio)) / memRequirementMB 
    Storage = storageFreeCapacityMB / stgRequirementMB 
    
    futureCapacityScore (not available in some cases) 
    
    CPU = (cpuUnreservedCapacityMHz - (cpuUndeployedReservationMHz * _futureDeployRatio)) / cpuRequirementMHz 
    Memory = (memoryUnreservedCapacityMB - (memUndeployedReservationMB * _futureDeployRatio)) / memRequirementMB 
    Storage = storageFreeCapacityMB / stgRequirementMB 
    
    reservationScore: (used for capacityScore and futureCapacityScore when those scores are unavailable) 
    
    CPU = cpuUnreservedCapacityMHz / cpuRequirementMHz 
    Memory = memoryUnreservedCapacityMB / memRequirementMB 
    Storage = storageFreeCapacityMB / stgRequirementMB 
  2. 對於每個主機叢集,放置引擎會計算 CPU、記憶體和儲存區的 weightedCapacityScore
    weightedCapacityScore = capacityScore * _currentScoreWeight + futureCapacityScore * (1 - _currentScoreWeight)

    每個 weightedCapacityScore 都是從 0 到 1 之間的比率,值越高表示可用資源越多。可以跨不同的資源類型 (例如 CPU、記憶體和儲存區) 比較 weightedCapacityScore 值,因為它們表示無單位的可用性度量。weightedCapacityScore 越高,表示主機叢集中相應資源的可用性越高。

  3. 放置引擎會驗證是否具有足夠的 CPU、記憶體和儲存區資源。
    totalAvailable * _[memory|cpu|storage]headRoom < free / UnreservedCapacity
  4. 放置引擎會根據 weightedCapacityScore 對主機叢集清單進行排序,將限制最小的主機叢集排在最前面,將限制最大的主機叢集排在最後。
  5. 放置引擎會處理清單中的每個主機叢集。
    • 如果必須避免使用主機叢集 (例如,由於反相似性規則),引擎會將其新增到 avoidHubList
    • 如果主機叢集沒有足夠的額外資源,引擎會將其新增到 noHeadRoomHubList
    • 如果主機叢集是慣用叢集 (例如,由於強相似性規則或目前主機叢集),引擎會將其新增到 preferredHubList
    • 所有其他主機叢集會移至 acceptableHubList

    在每個清單中,最慣用的主機叢集排在最前面,最不慣用的主機叢集排在最後。

  6. 引擎會整合這四個清單。

    preferredHubList + acceptableHubList + noHeadRoomHubList + avoidHubList

    引擎會對產生的清單進行排序 (將主機叢集按慣用度從高到低依次排序)。

  7. 放置引擎從清單中挑選排名最高的主機叢集作為目標集線器。

可調整的參數

若要影響各種選取演算法臨界值,可以自訂幾個參數。但是,只有對 VMware Cloud Director 作業有深入瞭解的服務提供者管理員才能嘗試變更這些參數的預設值,因為這可能會產生未預期的意外結果。首先在非生產環境中測試所有參數變更。

可使用儲存格管理工具自訂以下參數。

參數 描述
vcloud.placement.ranking.currentScoreWeight 主機叢集分數的目前組成部分的相對重要性。該值必須在 [0.1] 內。值為 0 時,引擎僅根據未來分數對主機叢集進行排名。值為 1 時,引擎僅根據目前分數對主機叢集進行排名。預設值為 0.5。

vcloud.placement.ranking.memoryBurstRatio

vcloud.placement.ranking.cpuBurstRatio

虛擬機器中配置超出保留的百分比,排名程式會使用該值來估算叢集負載。該值介於 0 到 1 之間。0 表示虛擬機器僅使用其保留區。1 表示虛擬機器非常繁忙。預設值為 0.67。
vcloud.placement.ranking.futureDeployRatio 該主機叢集上預計要部署並耗用記憶體和 CPU 的虛擬機器的百分比。該值介於 0 到 1 之間。預設值為 0.5。

vcloud.placement.ranking.memoryHeadRoom

vcloud.placement.ranking.cpuHeadRoom

vcloud.placement.ranking.storageHeadRoom

這些參數可控制在主機叢集上保留額外資源以用於增長。引擎將餘量定義為未保留資源的比率。例如,如果 vcloud.placement.ranking.memoryHeadRoom 為 0.2,則在主機叢集的可用資源低於 20% 後,引擎會將其視為記憶體餘量不足的叢集,並將其排在其他主機叢集後面。該值必須介於 0 到 1 之間。預設值為 0.2。

範例:
./cell-management-tool manage-config -n vcloud.placement.ranking.memoryHeadRoom -v 0.3 

資料存放區篩選器和儲存區放置演算法

VMware Cloud Director 資料存放區篩選器和儲存區放置演算法決定了虛擬機器檔案和磁碟在基礎儲存資源上的放置。儲存區容器表示儲存資源,即資料存放區或資料存放區叢集。

資料存放區篩選器是儲存區篩選器鏈結的一部分,有助於根據放置主體的需求縮小符合條件的儲存區容器的範圍。篩選器使用提供者 VDC 中的可用儲存區容器作為輸入清單。篩選器按預先定義的順序執行,並且每個篩選器將細化的儲存區容器清單傳遞到下一個篩選器。VMware Cloud Director 將略過不適用的篩選器。例如,對於沒有 IOPS 設定的虛擬機器,VMware Cloud Director 不會執行 IOPS 篩選器。

表 1. 資料存放區篩選器
篩選 描述
AffinityDatastoreFilter 根據為資料存放區定義的相似性和反相似性規則篩選儲存區容器。在從 vCenter Server 匯入虛擬機器和移轉承租人等情況下,VMware Cloud Director 會設定資料存放區相似性規則。
AlreadyOnValidDatastoreFilter 如果放置主體已放置在有效的資料存放區上,則此篩選器會拒絕所有其他儲存區容器並僅保留有效的資料存放區。
BadHostsFilter 篩選出至少一個已連線、可正常運作且已開啟電源的主機都沒有的儲存區容器。篩選出已從詳細目錄中刪除的儲存區容器。
DatastoreClusterFilter

篩選出所有資料存放區叢集和屬於資料存放區叢集的資料存放區。當放置主體不需要資料存放區叢集時,將使用此篩選器。例如,如果 config: vcloud.disk.shared.allowOnSpod 指定不允許在資料存放區叢集上使用共用的具名磁碟。

DatastoreFsFilter 篩選出屬於指定檔案系統的所有儲存區容器。例如,如果 config: vcloud.disk.shared.allowOnNfs 指定不允許在 NFS 資料存放區上使用共用的具名磁碟,則放置演算法會將此篩選器新增到鏈結中。
DisabledDatastoreFilter 從輸入清單中篩選出所有已停用的儲存區容器。
IopsCapacityDatastoreFilter

篩選出沒有足夠 IOPS 容量供虛擬機器使用的所有資料存放區。

如果滿足以下必要條件,將執行此篩選器。

  • 虛擬機器具有 IOPS 設定。
  • 沒有儲存網繭。
  • 所有資料存放區均已設定 iopsCapacities
  • 虛擬機器已啟用儲存區原則的 VCD/IOPS 功能,並且儲存區原則設定中的影響放置選項處於啟用狀態。
LeastProvisionedFilter 挑出佈建最少的儲存區容器。
LinkedCloneFilter 篩選出沒有來源虛擬機器或在某個資料存放區上沒有相應陰影虛擬機器的所有資料存放區。篩選出來源虛擬機器超過虛擬機器中虛擬磁碟允許的最大鏈結長度的任何資料存放區。
MinFreeSpaceFilter 篩選出沒有足夠的可用空間用於放置主體的任何儲存區容器。對於儲存網繭,子資料存放區的最大可用空間決定了子資料存放區的可用空間,而不是其總可用空間,或者儲存網繭的可用空間。例如,如果一個儲存網繭具有兩個資料存放區,並且這兩個資料存放區的可用空間分別為 3 GB 和 5 GB。VMware Cloud Director 將認為該儲存網繭的可用空間為 5 GB。如果沒有此類容器,篩選器會保留可用空間最多的容器。
MostFreeSpaceFilter 篩選出可用空間最多的儲存區容器。
StorageClassFilter 篩選出與其需求中定義的放置主體儲存區原則不相符的任何儲存區容器或儲存網繭。
ThresholdFilter 篩選出達到指定的可用容量臨界值的儲存區容器。VMware Cloud Director 中有黃色和紅色兩種臨界值。請參閱設定提供者虛擬資料中心儲存區容器的磁碟空間不足臨界值
VirtualMachineFilter 篩選出指定虛擬機器無權存取的所有儲存區容器。

VMware Cloud Director 會將篩選後的最終儲存區容器清單傳遞給儲存區放置演算法,然後該演算法會嘗試將放置主體放置在所選儲存區容器中。

為了將一組放置主體放置在最適合的資料存放區中,儲存區放置演算法會使用一些可設定的準則以及有效資料存放區的清單。儲存區放置演算法使用以下工作流程。
  1. 從放置引擎接收一組放置主體和支援提供者 VDC 的目標資源集區。可以使用兩種替代方法。

    • 通常,該演算法會接收一個虛擬機器主檔案,其中包含中繼資料和組態資訊以及一組磁碟,用於一般的非快速佈建虛擬機器的放置。
    • 該演算法可能會對具名磁碟和快速佈建虛擬機器使用彙總磁碟方法。換句話說,對於每個快速佈建的虛擬機器,該演算法會接收該虛擬機器及其所有磁碟的一個需求。
  2. 接收符合該集線器條件的一組儲存區容器,其中包括資料存放區和儲存網繭。
  3. 為了篩選出無法容納某個主體的儲存區容器,對於每個放置主體,該演算法會對整個靜態放置篩選器鏈結執行。例如,如果某個資料存放區無法容納某個虛擬機器磁碟,則該演算法會將該資料存放區標記為不符合該虛擬機器磁碟的條件。
  4. 依序按照以下考量事項根據儲存區容器的優先順序對每個主體的儲存區容器進行排名。
    1. 容器是儲存網繭還是資料存放區
    2. 還有多少其他放置主體將該儲存網繭作為有效容器
    3. 容器的大小
  5. 如果任一容器為儲存網繭,為了將儲存網繭減小至資料存放區,該演算法將執行 vSphere Storage DRS 叫用演算法。
  6. 輸入放置主體及其一組有效的資料存放區後,將確定放置主體必須駐留的位置。
  7. 傳回最終放置結果,以確定每個放置主體必須駐留的資料存放區;或者傳回錯誤,指出 VMware Cloud Director 演算法找不到適合的放置位置。