在 Azure Operator Nexus 虚拟机中使用“Placement Hints”

本文介绍如何使用提示来指导虚拟机在 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 被安排在与所引用资源不同的裸机、机架或虚拟机实例上。

资源标识符

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

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

重要

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

Scope

参数 scope 用于放置建议,以指定虚拟机亲和性或反亲和性放置建议的范围。 范围参数仅适用于resourceId参数面向虚拟机时。

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

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

重要

此参数不能留空。

调度执行

schedulingExecution 参数用于排布提示,以指定排布提示在调度过程中是硬性要求还是软性要求。

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

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

机架亲和性和反亲和性布局提示示例

获取可用的机架 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 调度执行(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 schedulingExecution 来防止虚拟机被调度到由裸机 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>"
    ]
    

将虚拟机放置在特定虚拟机附近

本部分探讨将虚拟机放置在特定虚拟机附近,强调 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"}]'

防止虚拟机放置在特定虚拟机附近(虚拟机反亲和性)

在本部分中, AntiAffinity 提示类型用于防止将 VM 放置在靠近某些其他 VM 的位置。 该 scope 参数决定这种分离是否发生在计算机级别或机架级别。 当 VM 需要分布在不同的硬件上以避免故障或性能问题时,此配置非常有用。

防止虚拟机放置在相同的裸机上(VM 反亲和性)

在此示例中,当您将范围设置为 Machine 时,它会阻止将虚拟机放置在同一裸机服务器上。 此方法通过降低影响工作负荷的单台计算机故障的风险来提高容错能力,从而提高整体可靠性。

--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 操作员 Nexus 实例中运行的应用程序和服务的可用性和复原能力。