共用方式為


使用 Azure 運算子連接點虛擬機器的放置提示

在本文中,您將了解如何利用提示將虛擬機器放置在 Azure 運算子連接點環境中。 這些放置提示可用來建立虛擬機器、裸機電腦或機架之間的親和性或反親和性。 使用放置提示,可確保會在 Azure 運算子連接點環境中以所需的方式排程虛擬機器。

親和性規則可讓您指定虛擬機器應裝載在相同的實體機器或機架上。 相反地,反親和性規則可確保虛擬機器會裝載在不同的實體機器或機架上。

您可以使用反親和性規則,將虛擬機器分散到不同的失敗網域 (機架、實體機器等),以提高應用程式的整體復原能力。 您可以使用親和性規則將虛擬機器設置在較少的實體機器上,以提高應用程式的成本效益。

必要條件

繼續進行本操作指南之前,請確定您已完成 Azure 運算子連接點虛擬機器快速入門指南中的所有步驟。

放置提示設定

本節說明放置提示的概念,以及 API 中各個欄位的運作方式,這在設定及管理虛擬機器時將有其效用。

{
 "hintType": "Affinity/AntiAffinity",
 "resourceId": "ARM ID of the virtual machine, bare-metal machine, or rack",
 "schedulingExecution": "Hard/Soft",
 "scope": "Rack/Machine"
}

提示類型

hintType 引數在放置提示中用來指定放置提示對於參考的資源是否支援親和性或反親和性。

hintType 引數有兩個可能的值:AffinityAntiAffinity

  • Affinity:如果 hintType 設定為 Affinity,則會使用放置提示在 VM 與參考的資源之間建立親和性規則。 因此,VM 會排程在特定裸機電腦、機架上或靠近虛擬機器執行個體之處,作為參考的資源。
  • AntiAffinity:如果 hintType 設定為 AntiAffinity,則會使用放置提示在 VM 與參考的資源之間建立反親和性規則。 因此,VM 會排程在與參考的資源不同的裸機電腦、機架或虛擬機器執行個體上。

資源識別碼

放置提示中的 resourceId 引數會指定要對哪個目標物件檢查放置提示。 目標物件可以是下列任一項。

  • 虛擬機器:如果目標物件是虛擬機器,則會對該虛擬機器執行個體檢查放置提示。
  • BareMetalMachine:如果目標物件是裸機電腦,則會對該裸機電腦檢查放置提示。
  • 機架:如果目標物件是機架,則會對執行於該機架上的所有裸機電腦檢查放置提示。

重要

resourceId 引數必須以 ARM 識別碼的形式指定,且必須是目標物件的有效資源識別碼。 如果 resourceId 不正確或無效,放置提示就無法正確運作,且 VM 排程可能會失敗。

範圍

scope 引數在放置提示中用來指定虛擬機器親和性或反親和性放置提示的範圍。 只有在 resourceId 引數以虛擬機器為目標時,範圍引數才適用。

範圍引數有兩個可能的值:MachineRack

  • 機器:如果範圍設定為機器,則放置提示會套用至與指定的虛擬機器相同的裸機電腦。 例如,如果放置提示指定 VM 應放在與指定 VM 相同的裸機電腦上,範圍會設定為機器。
  • 機架:如果範圍設定為機架,則放置提示會套用至指定的虛擬機器所屬的機架。 例如,如果放置提示指定 VM 應放在指定的虛擬機器目前放置所在的相同機架上,範圍就會設定為機架。

重要

此引數不可保留空白。

排程執行

schedulingExecution 引數在放置提示中用來指定放置提示在排程期間是硬性還是軟性需求。

schedulingExecution 引數有兩個可能的值:HardSoft

  • 硬性:當 schedulingExecution 設定為「硬性」時,在排程期間就會將放置提示視為嚴格的需求。 因此,排程器只會將虛擬機器放在放置提示中指定的資源上。 如果沒有可用的資源符合硬性需求,虛擬機器排程就會失敗。
  • 軟性:當 schedulingExecution 設定為「軟性」時,在排程期間就會將放置提示視為喜好設定。 因此,排程器會嘗試將虛擬機器放在放置提示中指定的資源上,但若不可行,排程器可以將虛擬機器放在不同的資源上。

機架親和性和反親和性放置提示範例

取得可用的機架識別碼

  1. 設定必要變數。

    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 '\"')"
    
  2. 取得機架識別碼。

    az networkcloud rack list -g $NEXUS_CLUSTER_MANAGED_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id
    
  3. 範例輸出。

    $ 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 schedulingExecution 讓 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 仍可能放置在這個您不想要的機架上。 之所以這樣放置,是因為 schedulingExecution 設定為 Soft,因此在沒有其他可行的選項時,會允許將 VM 置於原先避免的機架上。

--placement-hints '[{"hintType":"AntiAffinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-2>","schedulingExecution":"Soft","scope":"Rack"}]'

裸機電腦親和性和反親和性放置提示範例

取得可用的裸機電腦識別碼

  1. 設定必要變數。

    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 '\"')"
    
  2. 取得機架識別碼。

    az networkcloud baremetalmachine list -g $NEXUS_CLUSTER_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query "sort_by([].{ID: id, RackID: rackId}, &RackID)"
    
  3. 範例輸出。

    $ 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 schedulingExecution 讓 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 仍可能放置在這個您不想要的裸機電腦上。 之所以這樣放置,是因為 schedulingExecution 設定為 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 親和性和反親和性放置提示範例

取得可用的虛擬機器識別碼

  1. 設定必要變數。

    RESOURCE_GROUP=<Target VM resource group>
    NEXUS_CLUSTER_SUBSCRIPTION="$(az account show -o tsv --query id)"
    
  2. 取得虛擬機器識別碼。

    az networkcloud virtualmachine list -g $RESOURCE_GROUP --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id
    
  3. 範例輸出。

    $ 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 實作各種不同的放置案例,使其成為靈活、可調整的解決方案用以管理虛擬機器的放置。 在不同組合中調整 scopeschedulingExecutionhintType 參數,以了解這對於 VM 放置有何影響。 適當使用放置提示,可改善在 Azure 運算子連接點執行個體中執行的應用程式和服務的可用性與復原能力。