在 Azure 操作員 Nexus 虛擬機器中使用放置提示
在本文中,您將瞭解如何使用提示來引導虛擬機器在 Azure 操作員 Nexus 環境中的位置。 這些放置提示可用來建立虛擬機器、裸機機器或機架之間的親和性或反親和性。 使用放置提示,以確保虛擬機器在 Azure 操作員 Nexus 環境中以所需的方式排程。
親和性規則可讓您指定虛擬機器應該裝載在相同的實體機器或機架上。 相反地,反親和性規則可確保虛擬機器裝載在不同的實體機器或機架上。
您可以使用反親和性規則,將虛擬機器分散到不同的失敗網域(機架、實體機器等)來增加應用程式的整體復原能力。 您可以使用親和性規則將虛擬機器封裝在較少的實體機器上,來提升應用程式的成本效益。
必要條件
繼續進行本操作指南之前,請確定您已完成 Azure 操作員 Nexus 虛擬機器 快速入門手冊 中的所有步驟。
放置提示設定
本節說明放置提示的概念,以及 API 中的每個欄位的運作方式,這在設定和管理虛擬機器時很有用。
{
"hintType": "Affinity/AntiAffinity",
"resourceId": "ARM ID of the virtual machine, bare-metal machine, or rack",
"schedulingExecution": "Hard/Soft",
"scope": "Rack/Machine"
}
提示類型
自 hintType
變數用於放置提示,以指定放置提示是否支援參考資源的親和性或反親和性。
hintType 引數有兩個可能的值: Affinity
或 AntiAffinity
。
- Affinity:如果 hintType 設定為 Affinity,則會使用放置提示在 VM 與參考的資源之間建立親和性規則。 因此,VM 會排程在特定裸機機器、機架上,或靠近虛擬機器實例作為參考資源。
- AntiAffinity:如果 hintType 設定為 AntiAffinity,則會使用放置提示在 VM 與參考的資源之間建立反親和性規則。 因此,VM 會排程在參考資源的不同裸機機器、機架或虛擬機器實例上。
資源識別碼
resourceId
放置提示中的引數會指定檢查放置提示的目標物件。 目標物件可以是下列任一項。
- 虛擬機器:如果目標物件是虛擬機器,則會針對該特定虛擬機器實例檢查放置提示。
- BareMetalMachine:如果目標物件是裸機電腦,則會針對該特定裸機機器檢查放置提示。
- 機架:如果目標物件是機架,則會針對該機架上執行的所有裸機電腦檢查放置提示。
重要
resourceId 引數必須以 ARM 識別碼的形式指定,而且必須是目標物件的有效資源識別碼。 如果 resourceId 不正確或無效,放置提示將無法正確運作,且 VM 排程可能會失敗。
範圍
自 scope
變數用於放置提示,以指定虛擬機器親和性或反親和性放置提示的範圍。 範圍引數僅適用于以虛擬機器為目標的 resourceId
引數。
scope 引數有兩個可能的值: Machine
或 Rack
。
- 機器:如果範圍設定為 Machine,放置提示會套用至與指定虛擬機器相同的裸機電腦。 例如,如果放置提示指定 VM 應該放在與指定 VM 相同的裸機機器上,範圍會設定為 Machine。
- 機架:如果範圍設定為 Rack,放置提示會套用至指定虛擬機器所屬的機架。 例如,如果放置提示指定 VM 應該放在目前放置指定虛擬機器的相同機架上,範圍就會設定為 Rack。
重要
這個引數不能保留空白。
排程執行
自 schedulingExecution
變數用於放置提示,以指定放置提示在排程期間是硬式或軟式需求。
schedulingExecution 引數有兩個可能的值: Hard
或 Soft
。
- 硬式:當排程Execution 設定為 Hard 時,放置提示會在排程期間被視為嚴格的需求。 因此,排程器只會將虛擬機器放在放置提示中指定的資源上。 如果沒有資源符合硬式需求,虛擬機器的排程就會失敗。
- 軟式:當排程Execution 設定為 Soft 時,放置提示會在排程期間視為喜好設定。 因此,排程器會嘗試將虛擬機器放在放置提示中指定的資源上,但如果不可能,排程器可以將虛擬機器放在不同的資源上。
機架親和性和反親和性放置提示範例
取得可用的機架識別碼
設定必要的變數。
NEXUS_CLUSTER_NAME=<Operator Nexus cluster name> NEXUS_CLUSTER_RG=<Operator Nexus cluster resource group> NEXUS_CLUSTER_SUBSCRIPTION="$(az account show -o tsv --query id)" NEXUS_CLUSTER_MANAGED_RG="$(az networkcloud cluster show -n $NEXUS_CLUSTER_NAME -g $NEXUS_CLUSTER_RG --query managedResourceGroupConfiguration.name | tr -d '\"')"
取得機架識別碼。
az networkcloud rack list -g $NEXUS_CLUSTER_MANAGED_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id
範例輸出。
$ az networkcloud rack list -g $NEXUS_CLUSTER_MANAGED_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id [ "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<network-aggregation-rack>", "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-1>", "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-2>", "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-3>", "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-4>", "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-n>" ]
將虛擬機器放在特定機架上
在此範例中,我們會探索軟式和硬式親和性的概念,特別是將虛擬機器放在特定機架上。
注意
在此和下列範例中,只會提供引數的變化 --placement-hints
。 若要實際建立具有放置提示的 VM,您應該將 新增 --placement-hints
至 VM 快速入門手冊 中說明的 CLI。
嚴格排程 (機架親和性)
此放置提示會使用 Affinity
hintType 來確保虛擬機器只會排程在具有指定機架識別碼的指定機架上。 如果機架無法使用或容量不足,排程就會失敗。 當您想要確保特定虛擬機器在特定機架上放置效能、安全性或其他原因時,此放置提示很有用。
--placement-hints '[{"hintType":"Affinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-2>","schedulingExecution":"Hard","scope":"Rack"}]'
注意
使用 Affinity hintType 的目前放置提示組態可確保虛擬機器排程在具有所提供機架識別碼的指定機架上。 不過,請務必注意,在排程執行時,無法為多個機架 Hard
指定機架親和性。 這項限制可能會影響您的部署策略,特別是當您考慮將 VM 放在多個機架上,並允許排程器從其中選取它們時。
慣用排程 (機架親和性)
此放置提示會 Affinity
利用 hintType 在虛擬機器與指定的機架之間建立親和性規則。 它也會採用 Soft
排程Execution,讓 VM 放置在替代機架上,以防指定的機架無法存取或缺少容量。
--placement-hints '[{"hintType":"Affinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-2>","schedulingExecution":"Soft","scope":"Rack"}]'
防止虛擬機器放在特定機架上
在此範例中,我們會探索軟式和硬式反親和性的概念,特別是防止虛擬機器放在特定機架上。
嚴格排程 (機架反親和性)
此放置提示同時使用 AntiAffinity
hintType 和 Hard
scheduleExecution,以防止虛擬機器排程在機架識別碼所識別的指定機架上。 在此設定中,排程器會嚴格遵循這些放置提示。 不過,如果機架識別碼不正確或其他機架上的容量不足,VM 放置可能會因為排程規則的 Hard
嚴格應用而失敗
--placement-hints '[{"hintType":"AntiAffinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-2>","schedulingExecution":"Hard","scope":"Rack"}]'
慣用排程 (機架反親和性)
此放置提示會使用 AntiAffinity
hintType 來避免虛擬機器放置的特定機架。 不過,請務必注意,儘管有這種喜好設定,但如果其他機架沒有足夠的容量,VM 仍可放在這個不想要的機架上。 之所以發生此位置,是因為排程Execution 設定為 Soft
,如此可讓 VM 在最初避免的機架上容納,如果其他選項不可行。
--placement-hints '[{"hintType":"AntiAffinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-2>","schedulingExecution":"Soft","scope":"Rack"}]'
裸機電腦親和性和反親和性放置提示範例
取得可用的裸機電腦識別碼
設定必要的變數。
NEXUS_CLUSTER_NAME=<Operator Nexus cluster name> NEXUS_CLUSTER_RG=<Operator Nexus cluster resource group> NEXUS_CLUSTER_SUBSCRIPTION="$(az account show -o tsv --query id)" NEXUS_CLUSTER_MANAGED_RG="$(az networkcloud cluster show -n $NEXUS_CLUSTER_NAME -g $NEXUS_CLUSTER_RG --query managedResourceGroupConfiguration.name | tr -d '\"')"
取得機架識別碼。
az networkcloud baremetalmachine list -g $NEXUS_CLUSTER_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query "sort_by([].{ID: id, RackID: rackId}, &RackID)"
範例輸出。
$ az networkcloud baremetalmachine list -g $NEXUS_CLUSTER_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query "sort_by([].{ID: id, RackID: rackId}, &RackID)" [ { "ID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>", "RackID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-1>" }, { "ID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>", "RackID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-2>" }, { "ID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>", "RackID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-3>" }, { "ID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>", "RackID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-4>" }, { "ID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>", "RackID": "/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-n>" } ]
將虛擬機器放在特定的裸機電腦上
在此範例中,我們會探索軟式和硬式親和性的概念,特別是將虛擬機器放在特定裸機機器上。
嚴格排程 (裸機機器親和性)
此放置提示會使用 Affinity
hintType 來確保虛擬機器只會排程在具有指定裸機機器識別碼的指定裸機電腦上。 如果裸機電腦無法使用或缺少容量,排程就會失敗。 此放置提示在您想要確保特定裸機機器上放置特定裸機機器以達到效能、安全性或其他原因時很有用。
--placement-hints '[{"hintType":"Affinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>","schedulingExecution":"Hard","scope":"Machine"}]'
慣用排程 (裸機機器親和性)
此放置提示會 Affinity
利用 hintType 在虛擬機器與指定的裸機機器之間建立親和性規則。 它也採用 Soft
排程執行,讓 VM 能夠放在替代裸機機器上,以防指定的裸機機器無法存取或缺少容量。
--placement-hints '[{"hintType":"Affinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>","schedulingExecution":"Soft","scope":"Machine"}]'
防止虛擬機器放在特定的裸機機器上
在此範例中,我們會探索軟式和硬式反親和性的概念,特別是防止虛擬機器放在特定裸機機器上。
嚴格排程(裸機機防親和性)
此放置提示同時使用 AntiAffinity
hintType 和 Hard
scheduleExecution,以防止虛擬機器在裸機機器識別碼所識別的指定裸機電腦上排程。 在此設定中,排程器會嚴格遵循這些放置提示。 不過,如果裸機電腦識別碼不正確,或其他裸機機器的容量不足,VM 放置可能會因為嚴格應用 Hard
排程規則而失敗
--placement-hints '[{"hintType":"AntiAffinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>","schedulingExecution":"Hard","scope":"Machine"}]'
慣用排程 (裸機機器反親和性)
此放置提示會 AntiAffinity
使用 hintType 來避免虛擬機器放置的特定裸機機器。 不過,請務必注意,儘管有這種喜好設定,但如果其他裸機機器沒有足夠的容量,VM 仍可放在這個不想要的裸機機器上。 之所以發生此位置,是因為排程Execution 設定為 Soft
,如此可讓 VM 在最初避免的裸機機器上容納,如果其他選項不可行。
--placement-hints '[{"hintType":"AntiAffinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>","schedulingExecution":"Soft","scope":"Machine"}]'
VM 對 VM 親和性和反親和性放置提示範例
取得可用的虛擬機器識別碼
設定必要的變數。
RESOURCE_GROUP=<Target VM resource group> NEXUS_CLUSTER_SUBSCRIPTION="$(az account show -o tsv --query id)"
取得虛擬機器識別碼。
az networkcloud virtualmachine list -g $RESOURCE_GROUP --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id
範例輸出。
$ az networkcloud virtualmachine list -g $RESOURCE_GROUP --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id [ "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-1>", "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-2>", "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-3>", "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-n>" ]
將虛擬機器放在特定虛擬機器附近
本節將探索特定 VM 附近虛擬機器的位置,並醒目提示參數在放置提示組態中的重要角色 scope
。 排程器會透過定義的範圍,將 VM 位置導向在相同的裸機機器上,或位於與參考 VM resourceId 相同的機架內。 請務必注意,雖然此處提供的範例說明 Hard
排程執行,但您可以 Soft
視需要使用排程,根據您的特定使用案例。
將虛擬機器放在相同的裸機機器上(VM 親和性)
在此範例中,藉由指定 Affinity
作為提示類型和 Machine
範圍,組態會導致虛擬機器放在與指定資源識別碼所識別的 VM 相同的裸機機器上。 因此,新的 VM 會與參考的 VM 共用相同的裸機機器,進而降低 VM 之間的延遲和增強的效能。
--placement-hints '[{"hintType":"Affinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-1>","schedulingExecution":"Hard","scope":"Machine"}]'
將虛擬機器放在相同的機架中(VM 親和性)
在此範例中,使用 Affinity
做為提示類型和 Rack
範圍的組態,會導致虛擬機器放置在與指定資源識別碼所識別之 VM 相同的機架內。 因此,新的 VM 會置於參考 VM 的實體鄰近位置,可能會降低網路延遲並增強效能。
--placement-hints '[{"hintType":"Affinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-1>","schedulingExecution":"Hard","scope":"Rack"}]'
防止虛擬機器放置在特定虛擬機器附近(VM 反親和性)
在本節中,會 AntiAffinity
使用提示類型來防止將 VM 放在靠近特定其他 VM 的位置。 參數 scope
會決定此區隔是否發生在電腦層級或機架層級。 當 VM 需要分散到不同的硬體,以避免發生錯誤或效能問題時,此設定很有用。
防止虛擬機器放在相同的裸機機器上(VM 反親和性)
在此範例中,當您將範圍設定為 Machine
時,它會防止 VM 放在相同的裸機電腦上。 這種方法可藉由降低影響工作負載的單一電腦失敗風險來提升容錯能力,進而增加整體健全性。
--placement-hints '[{"hintType":"AntiAffinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-2>","schedulingExecution":"Hard","scope":"Machine"}]'
防止虛擬機器放在相同的機架中(VM 反親和性)
在此範例中,設定範圍以確保 Rack
VM 不會放在相同的機架內。 此設定可藉由確保單一機架失敗不會影響工作負載,藉此協助增強容錯能力。
--placement-hints '[{"hintType":"AntiAffinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-2>","schedulingExecution":"Hard","scope":"Rack"}]'
下一步
雖然本文提供的範例示範一些常見的使用案例,但 API 可用來實作各種不同的放置案例,使其成為管理虛擬機器放置的彈性且可調整的解決方案。 scope
調整不同組合中的 、 schedulingExecution
和 hintType
參數,以瞭解它們如何影響 VM 位置。 適當使用放置提示可以改善在 Azure 操作員 Nexus 實例中執行之應用程式和服務的可用性和復原能力。