你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

处理 Azure Operator 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 参数有两个可能的值: AffinityAntiAffinity

  • 相关性:如果 hintType 设置为 Affinity,则放置提示用于在 VM 和引用的资源之间创建关联规则。 因此,VM 计划在特定裸机、机架上或靠近虚拟机实例作为引用的资源。
  • AntiAffinity:如果 hintType 设置为 AntiAffinity,则放置提示用于在 VM 和引用的资源之间创建反关联规则。 因此,VM 计划于引用资源中的不同裸机、机架或虚拟机实例上。

资源 ID

resourceId放置提示中的参数指定放置提示检查的目标对象。 目标对象可以是以下任一对象。

  • 虚拟机:如果目标对象是虚拟机,则会针对该特定虚拟机实例检查放置提示。
  • BareMetalMachine:如果目标对象是裸机,则会针对该特定裸机检查放置提示。
  • 机架:如果目标对象是机架,则会针对在该机架上运行的所有裸机计算机检查放置提示。

重要

resourceId 参数必须以 ARM ID 的形式指定,并且它必须是目标对象的有效资源 ID。 如果 resourceId 不正确或无效,放置提示将无法正常工作,并且 VM 计划可能会失败。

范围

参数 scope 用于放置提示,以指定虚拟机相关性或反关联放置提示的范围。 仅当参数面向虚拟机时 resourceId ,范围参数才适用。

范围参数有两个可能的值: MachineRack

  • 计算机:如果范围设置为“计算机”,放置提示将应用于与指定虚拟机相同的裸机。 例如,如果放置提示指定 VM 应放置在与指定 VM 相同的裸机计算机上,则范围将设置为“计算机”。
  • 机架:如果范围设置为 Rack,放置提示将应用于指定虚拟机所属的机架。 例如,如果放置提示指定 VM 应放置在当前放置指定的虚拟机所在的同一机架上,则范围将设置为 Rack。

重要

此参数不能留空。

计划执行

schedulingExecution 参数用于放置提示,以指定放置提示是计划期间的硬要求还是软要求。

scheduleExecution 参数有两个可能的值: HardSoft

  • 硬:当 scheduleExecution 设置为 Hard 时,放置提示在计划期间被视为严格的要求。 因此,计划程序仅将虚拟机放置在放置提示中指定的指定资源上。 如果没有满足硬要求的资源可用,则虚拟机的计划将失败。
  • 软:当 scheduleExecution 设置为“软”时,放置提示在计划期间被视为首选项。 因此,计划程序会尝试将虚拟机放置在放置提示中指定的指定资源上,但如果不可能,计划程序可以将虚拟机放置在其他资源上。

机架相关性和反相关性放置提示示例

获取可用的机架 ID

  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. 获取机架 ID。

    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 来确保虚拟机仅在具有给定机架 ID 的指定机架上计划。 如果机架不可用或容量不足,则计划会失败。 在希望确保特定机架上放置某些虚拟机时,出于性能、安全性或其他原因,此放置提示非常有用。

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

注意

使用 Affinity hintType 的当前放置提示配置可确保虚拟机专门安排在具有提供的机架 ID 的指定机架上。 但是,请务必注意,无法为多个机架指定机架相关性,并 Hard 计划执行。 此限制可能会影响部署策略,尤其是在考虑将 VM 放置在多个机架上并允许计划程序从它们中进行选择时。

首选计划(机架相关性)

此放置提示利用 Affinity hintType 在虚拟机和指定机架之间建立关联规则。 它还使用 Soft scheduleExecution 使 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 来防止虚拟机在由机架 ID 标识的指定机架上进行计划。 在此配置中,计划程序严格遵循这些放置提示。 但是,如果机架 ID 不正确或其他机架上的容量不足,则 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 仍可放置在此不需要的机架上。 发生此放置是因为 scheduleExecution 设置为 Soft,这样,如果其他选项不可行,则 VM 可以容纳在最初避免的机架上。

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

裸机关联和反相关性放置提示示例

获取可用的裸机 ID

  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. 获取机架 ID。

    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 来确保虚拟机仅在具有给定裸机 ID 的指定裸机计算机上计划。 如果裸机不可用或容量不足,则计划会失败。 在希望确保特定裸机计算机上放置某些虚拟机时,出于性能、安全性或其他原因,此放置提示非常有用。

--placement-hints '[{"hintType":"Affinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>","schedulingExecution":"Hard","scope":"Machine"}]'

首选计划(裸机相关性)

此放置提示利用 Affinity hintType 在虚拟机和指定的裸机之间建立关联规则。 它还使用 Soft scheduleExecution 使 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 来防止虚拟机在裸机 ID 标识的指定裸机计算机上进行计划。 在此配置中,计划程序严格遵循这些放置提示。 但是,如果裸机 ID 不正确,或者其他裸机计算机上没有足够的容量,则 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 仍可放置在此不需要的裸机计算机上。 发生此放置是因为 scheduleExecution 设置为 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 相关性和反关联放置提示示例

获取可用的虚拟机 ID

  1. 设置所需的变量。

    RESOURCE_GROUP=<Target VM resource group>
    NEXUS_CLUSTER_SUBSCRIPTION="$(az account show -o tsv --query id)"
    
  2. 获取虚拟机 ID。

    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 范围,配置会导致虚拟机放置在与给定资源 ID 标识的 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 作用域的配置会导致虚拟机与给定资源 ID 标识的 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调整不同组合中的参数schedulingExecutionhintType参数,以了解它们如何影响 VM 位置。 正确使用放置提示可以提高 Azure 操作员 Nexus 实例中运行的应用程序和服务的可用性和复原能力。