Compartir a través de


Uso de sugerencias de ubicación en la máquina virtual de Azure Operator Nexus

En este artículo, aprenderá a usar sugerencias para guiar la colocación de máquinas virtuales en el entorno de Azure Operator Nexus. Estas sugerencias de colocación se pueden usar para crear afinidad o antiafinidad entre máquinas virtuales, máquinas físicas o bastidores. Use sugerencias de selección de ubicación para asegurarse de que las máquinas virtuales están programadas de la manera deseada en el entorno de Azure Operator Nexus.

Las reglas de afinidad permiten especificar que las máquinas virtuales deben hospedarse en la misma máquina física o bastidor. Por el contrario, las reglas antiafinidad garantizan que las máquinas virtuales se hospeden en diferentes máquinas físicas o bastidores.

Puede aumentar la resiliencia general de su aplicación utilizando reglas de anti-afinidad para distribuir máquinas virtuales entre distintos dominios de fallo (bastidores, máquinas físicas, etc.). Puede aumentar la rentabilidad de la aplicación mediante reglas de afinidad para empaquetar máquinas virtuales en menos máquinas físicas.

Prerrequisitos

Antes de continuar con esta guía paso a paso, asegúrese de que ha completado todos los pasos de la guía de inicio rápido de la máquina virtual Nexus del operador de Azure.

Configuración de sugerencias de colocación

En esta sección se explica el concepto de sugerencias de selección de ubicación y cómo funciona cada campo de la API, lo que resulta útil al configurar y administrar máquinas virtuales.

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

Tipo de sugerencia

El hintType argumento se usa en sugerencias de selección de ubicación para especificar si la sugerencia de selección de ubicación admite afinidad o antiafinidad con los recursos a los que se hace referencia.

El argumento hintType tiene dos valores posibles: Affinity o AntiAffinity.

  • Affinity: Si el hintType se establece en Affinity, la sugerencia de ubicación se emplea para crear una regla de afinidad entre la máquina virtual y los recursos referenciados. Como resultado, la máquina virtual se asigna en la máquina física específica, el bastidor, o cerca de la instancia de máquina virtual referida como recurso.
  • AntiAffinity: si hintType se establece en AntiAffinity, la sugerencia de colocación se usa para crear una regla de antiafinidad entre la máquina virtual y los recursos a los que se hace referencia. Como resultado, la máquina virtual se programa en una máquina sin sistema operativo, un bastidor o una instancia de máquina virtual diferente del recurso al que se hace referencia.

Identificador del recurso

El resourceId argumento de las sugerencias de selección de ubicación especifica el objeto de destino en el que se comprueban las sugerencias de selección de ubicación. El objeto de destino puede ser cualquiera de los siguientes.

  • Una máquina virtual: si el objeto de destino es una máquina virtual, la sugerencia de selección de ubicación se comprueba con esa instancia de máquina virtual específica.
  • Una máquina BareMetal: Si el objeto de destino es una máquina bare-metal, la sugerencia de ubicación se verifica en esa máquina bare-metal específica.
  • Un rack: Si el objeto de destino es un rack, la sugerencia de colocación se comprueba en todas las máquinas bare-metal que se ejecutan en ese rack.

Importante

El argumento resourceId debe especificarse en forma de identificador de ARM y debe ser un identificador de recurso válido para el objeto de destino. Si el valor de resourceId es incorrecto o no es válido, la sugerencia de selección de ubicación no funcionará correctamente y es posible que se produzca un error en la programación de la máquina virtual.

Ámbito

El scope argumento se utiliza en las sugerencias de ubicación para especificar el ámbito de afinidad o antiafinidad de la máquina virtual. El argumento scope solo es aplicable cuando el resourceId argumento tiene como destino una máquina virtual.

El argumento scope tiene dos valores posibles: Machine o Rack.

  • Máquina: Si el ámbito se establece en Máquina, la sugerencia de colocación se aplica a la misma máquina física que la máquina virtual especificada. Por ejemplo, si la sugerencia de ubicación especifica que la máquina virtual debe colocarse en la misma máquina física que la máquina virtual especificada, el ámbito se establecería en Máquina.
  • Rack: si el ámbito se establece en Rack, la sugerencia de colocación se aplica al bastidor al que pertenece la máquina virtual especificada. Por ejemplo, si la sugerencia de colocación especifica que la máquina virtual debería colocarse en el mismo bastidor en el que está actualmente colocada la máquina virtual especificada, el ámbito se establecería en Rack.

Importante

Este argumento no se puede dejar en blanco.

Programación de la ejecución

El schedulingExecution argumento se usa en sugerencias de colocación para especificar si la sugerencia de colocación es un requisito estricto o flexible durante la programación.

El argumento schedulingExecution tiene dos valores posibles: Hard o Soft.

  • Hard: cuando la ejecución de programación se establece en "Hard", el indicador de ubicación se considera un requisito estricto durante la planificación. Como resultado, el planificador solo coloca la máquina virtual en el recurso especificado según la sugerencia de ubicación. Si no hay ningún recurso disponible que cumpla el requisito difícil, se produce un error en la programación de la máquina virtual.
  • Soft: Cuando la ejecución de programación se establece en Soft, el indicador de ubicación se considera una preferencia durante la programación. Como resultado, el programador intenta colocar la máquina virtual en el recurso especificado en la sugerencia de colocación, pero si no es posible, el programador puede colocar la máquina virtual en un recurso diferente.

Ejemplo de sugerencias de colocación de afinidad y antiafinidad en racks

Obtención de los identificadores de bastidor disponibles

  1. Establezca las variables necesarias.

    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. Obtenga el identificador del bastidor.

    az networkcloud rack list -g $NEXUS_CLUSTER_MANAGED_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id
    
  3. Salida de ejemplo.

    $ 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>"
    ]
    

Ubicar una máquina virtual en un bastidor específico

En este ejemplo, se exploran los conceptos de afinidades suaves y duras, particularmente en cuanto a la colocación de máquinas virtuales en racks específicos.

Nota:

En este y en los ejemplos siguientes, solo se proporcionan variaciones del --placement-hints argumento . Para la creación real de la máquina virtual con sugerencias de ubicación, debe agregar --placement-hints a la CLI que se ilustra en la guía de inicio rápido de la máquina virtual.

Programación estricta (afinidad de rack)

Esta sugerencia de colocación usa hintType Affinity para asegurarse de que la máquina virtual solo está programada en el bastidor especificado con el identificador de bastidor especificado. Si el bastidor no está disponible o carece de capacidad, se produce un error en la programación. Esta sugerencia de colocación puede ser útil en situaciones en las que desea asegurarse de que determinadas máquinas virtuales se colocan en bastidores específicos por motivos de rendimiento, seguridad u otros motivos.

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

Nota:

La configuración de sugerencias de colocación actual con affinity hintType garantiza que la máquina virtual se programe exclusivamente en el bastidor especificado con el identificador de bastidor proporcionado. Sin embargo, es importante tener en cuenta que no se puede especificar la afinidad de bastidor para más de un bastidor con Hard ejecución de programación. Esta limitación puede influir en la estrategia de implementación, especialmente si está pensando en colocar máquinas virtuales en varios bastidores y permitir que el programador seleccione entre ellas.

Programación preferida (afinidad de rack)

Esta sugerencia de colocación utiliza hintType Affinity para establecer una regla de afinidad entre la máquina virtual y el bastidor designado. También emplea una programación de ejecución para permitir que la máquina virtual se coloque en un bastidor alternativo en caso de que el bastidor especificado no sea accesible o carezca de capacidad.

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

Impedir que la máquina virtual se coloque en un bastidor específico

En este ejemplo, exploramos los conceptos de antiafinidad suave y dura, especialmente en relación con la prevención de colocar máquinas virtuales en bastidores específicos.

Programación estricta (antiafinidad de rack)

Esta sugerencia de ubicación utiliza tanto el AntiAffinity hintType como el Hard schedulingExecution para evitar que la máquina virtual se asigne al bastidor específico identificado por su ID. En esta configuración, el programador sigue estrictamente estas sugerencias de colocación. Sin embargo, si el identificador del bastidor es incorrecto o no hay suficiente capacidad en otros bastidores, es posible que se produzca un error en la selección de ubicación de la máquina virtual debido a la aplicación estricta de la Hard regla de programación.

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

Programación preferida (antiafinidad de bastidor)

Esta sugerencia de colocación utiliza el tipo de sugerencia AntiAffinity con la intención de evitar un rack específico para la colocación de la máquina virtual. Sin embargo, es importante tener en cuenta que, a pesar de esta preferencia, la máquina virtual todavía podría colocarse en este bastidor no deseado si otros bastidores no tienen suficiente capacidad. Esta colocación se produce porque el schedulingExecution se establece en Soft, lo que permite que la máquina virtual se pueda ubicar en el bastidor inicialmente evitado si otras opciones no son factibles.

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

Ejemplo de afinidad y antiafinidad para indicaciones de ubicación en máquinas de metal desnudo

Obtener los identificadores de máquinas bare-metal disponibles

  1. Establezca las variables necesarias.

    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. Obtenga el identificador del bastidor.

    az networkcloud baremetalmachine list -g $NEXUS_CLUSTER_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query "sort_by([].{ID: id, RackID: rackId}, &RackID)"
    
  3. Salida de ejemplo.

    $ 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>"
      }
    ]
    

Colocar una máquina virtual en una máquina física específica

En este ejemplo, se exploran los conceptos de afinidades suaves y estrictas, especialmente sobre la colocación de máquinas virtuales en máquinas físicas específicas.

Programación estricta (afinidad de máquina sin sistema operativo)

Esta sugerencia de colocación usa el tipo de sugerencia Affinity para asegurarse de que la máquina virtual se programe únicamente en la máquina bare-metal especificada con el identificador de máquina bare-metal dado. Si la máquina de metal desnudo no está disponible o carece de capacidad, la programación falla. Esta sugerencia de colocación puede ser útil en situaciones en las que desea asegurarse de que determinadas máquinas virtuales se colocan en una máquina bare-metal específica por motivos de rendimiento, seguridad u otros.

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

Programación preferida (afinidad de máquina sin sistema operativo)

Esta sugerencia de colocación utiliza el Affinity hintType para establecer una regla de afinidad entre la máquina virtual y la máquina bare-metal designada. También emplea una programación de ejecución Soft para permitir que la máquina virtual se coloque en una máquina física alternativa en caso de que la máquina física especificada no sea accesible o no tenga capacidad.

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

Impedir que la máquina virtual se coloque en un servidor bare-metal específico

En este ejemplo, se exploran los conceptos de antiafinidad suave y dura, particularmente en lo que se refiere a la prevención de que las máquinas virtuales se coloquen en máquinas físicas específicas.

Programación estricta (antiafinidad de máquinas bare-metal)

Esta sugerencia de colocación usa la sugerencia AntiAffinity hintType y Hard schedulingExecution para evitar que la máquina virtual se asigne en la máquina bare-metal especificada, identificada por su ID correspondiente. En esta configuración, el programador sigue estrictamente estas sugerencias de colocación. Sin embargo, si el identificador de máquina física es incorrecto o no hay suficiente capacidad en otras máquinas físicas, es posible que se produzca un error en la ubicación de la máquina virtual debido a la aplicación estricta de la Hard regla de programación.

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

Programación preferida (antiafinidad de máquinas bare-metal)

Esta sugerencia de colocación utiliza el tipo de indicación AntiAffinity con la intención de evitar una máquina bare-metal específica para la colocación de la máquina virtual. Sin embargo, es importante tener en cuenta que, a pesar de esta preferencia, la máquina virtual todavía podría colocarse en esta máquina bare-metal no deseada si otras máquinas bare-metal no tienen suficiente capacidad. Esta colocación se produce porque el atributo de ejecución de programación se establece en Soft, lo cual permite acomodar la máquina virtual en la máquina bare-metal inicialmente evitada si otras opciones no son viables.

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

Ejemplo de indicaciones de colocación de afinidad y antiafinidad de máquina virtual a máquina virtual

Obtención de los identificadores de máquina virtual disponibles

  1. Establezca las variables necesarias.

    RESOURCE_GROUP=<Target VM resource group>
    NEXUS_CLUSTER_SUBSCRIPTION="$(az account show -o tsv --query id)"
    
  2. Obtenga el identificador de la máquina virtual.

    az networkcloud virtualmachine list -g $RESOURCE_GROUP --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id
    
  3. Salida de ejemplo.

    $ 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>"
    ]
    

Colocar una máquina virtual cerca de una máquina virtual específica

En esta sección se explora la ubicación de las máquinas virtuales cerca de ciertas VMs, lo que resalta el importante papel del parámetro scope en la configuración de indicaciones de selección de ubicación. El planificador, a través del ámbito definido, dirige las ubicaciones de máquinas virtuales, ya sea en la misma máquina física o dentro del mismo bastidor que el resourceId de la máquina virtual a la que se hace referencia. Es importante tener en cuenta que, aunque los ejemplos proporcionados aquí muestran la ejecución de la Hard planificación, puede utilizar la Soft planificación según sea necesario, en función de su caso de uso específico.

Colocar máquinas virtuales en una misma máquina sin sistema operativo (afinidad de máquina virtual)

En este ejemplo, especificando Affinity como el tipo de sugerencia y Machine como ámbito, la configuración da como resultado que la máquina virtual se coloque en la misma máquina sin sistema operativo que la máquina virtual identificada por el identificador de recurso especificado. Como resultado, la nueva máquina virtual comparte la misma máquina sin sistema operativo que la máquina virtual a la que se hace referencia, lo que conduce a latencias potencialmente inferiores entre máquinas virtuales y un rendimiento mejorado.

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

Ubicar máquinas virtuales en el mismo rack (afinidad entre máquinas virtuales)

En este ejemplo, la configuración con Affinity como tipo de sugerencia y Rack como ámbito, conduce a la colocación de máquinas virtuales dentro del mismo bastidor que la máquina virtual identificada por el identificador de recurso especificado. Como resultado, las nuevas máquinas virtuales se colocan en proximidad física a la máquina virtual de referencia, lo que podría reducir la latencia de red y mejorar el rendimiento.

--placement-hints '[{"hintType":"Affinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-1>","schedulingExecution":"Hard","scope":"Rack"}]'

Impedir que las máquinas virtuales se coloquen cerca de una máquina virtual específica (antiafinidad de máquina virtual)

En esta sección, el AntiAffinity tipo de sugerencia se usa para evitar que las máquinas virtuales se coloquen cerca de otras máquinas virtuales. El scope parámetro decide si esta separación se produce en el nivel de máquina o en el nivel de bastidor. Esta configuración es útil cuando las máquinas virtuales deben distribuirse entre hardware diferente para evitar errores o problemas de rendimiento.

Impedir que las máquinas virtuales se coloquen en una misma máquina física (antiafinidad de las máquinas virtuales)

En este ejemplo, al establecer el ámbito en Machine, se impide que las máquinas virtuales se coloquen en la misma máquina física. Este enfoque aumenta la tolerancia a errores al reducir el riesgo de que el error de una sola máquina afecte a la carga de trabajo, lo que aumenta la solidez general.

--placement-hints '[{"hintType":"AntiAffinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/virtualMachines/<vm-2>","schedulingExecution":"Hard","scope":"Machine"}]'

Impedir que las máquinas virtuales se coloquen en el mismo rack (antiafinidad de máquinas virtuales)

En este ejemplo, establecer el ámbito en Rack garantiza que las máquinas virtuales no se coloquen en el mismo rack. Esta configuración ayuda a mejorar la tolerancia a errores al garantizar que un error de un único bastidor no afecte a la carga de trabajo.

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

Pasos siguientes

Aunque los ejemplos proporcionados en este artículo muestran algunos casos de uso comunes, la API se puede usar para implementar una amplia gama de escenarios de selección de ubicación, lo que lo convierte en una solución flexible y adaptable para administrar la selección de ubicación de máquinas virtuales. Ajuste los scope, schedulingExecution y hintType parámetros en diferentes combinaciones para comprender cómo afectan a las ubicaciones de las máquinas virtuales. El uso adecuado de sugerencias de selección de ubicación puede mejorar la disponibilidad y resistencia de las aplicaciones y servicios que se ejecutan en la instancia de Nexus del operador de Azure.