Partager via


Utilisation des conseils de placement dans une machine virtuelle Azure Operator Nexus

Dans cet article, vous allez apprendre à utiliser des indicateurs pour guider le positionnement des machines virtuelles dans l’environnement Azure Operator Nexus. Ces indicateurs de placement peuvent être utilisés pour créer une affinité ou une anti-affinité entre des machines virtuelles, des machines nues ou des racks. Utilisez des indicateurs de placement pour vous assurer que les machines virtuelles sont planifiées de la manière souhaitée dans l’environnement Nexus de l’opérateur Azure.

Les règles d’affinité vous permettent de spécifier que les machines virtuelles doivent être hébergées sur la même machine physique ou rack. À l’inverse, les règles anti-affinité garantissent que les machines virtuelles sont hébergées sur différentes machines physiques ou racks.

Vous pouvez augmenter la résilience globale de votre application à l’aide de règles anti-affinité pour répartir des machines virtuelles entre différents domaines d’échec (racks, machines physiques, etc.). Vous pouvez augmenter l’efficacité du coût de votre application en utilisant des règles d’affinité pour empaqueter des machines virtuelles sur moins de machines physiques.

Prérequis

Avant de suivre ce guide pratique, vérifiez que vous avez effectué toutes les étapes du guide de démarrage rapide de la machine virtuelle Azure Operator Nexus.

Configuration des indicateurs de positionnement

Cette section explique le concept d’indicateurs de placement et le fonctionnement de chaque champ de l’API, ce qui est utile lors de la configuration et de la gestion des machines virtuelles.

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

Type d’indicateur

L’argument hintType est utilisé dans les indicateurs de placement pour spécifier si l’indicateur de placement prend en charge l’affinité ou l’anti-affinité avec les ressources référencées.

L’argument hintType a deux valeurs possibles : Affinity ou AntiAffinity.

  • Affinité : si l’indicateur hintType est défini sur Affinity, l’indicateur de placement est utilisé pour créer une règle d’affinité entre la machine virtuelle et les ressources référencées. Par conséquent, la machine virtuelle est planifiée sur la machine nue, le rack ou près de l’instance de machine virtuelle comme ressource référencée.
  • AntiAffinity : si l’indicateur hintType est défini sur AntiAffinity, l’indicateur de placement est utilisé pour créer une règle anti-affinité entre la machine virtuelle et les ressources référencées. Par conséquent, la machine virtuelle est planifiée sur une autre machine nue, rack ou instance de machine virtuelle à partir de la ressource référencée.

ID de ressource

L’argument resourceId dans les indicateurs de placement spécifie l’objet cible sur lequel les indicateurs de placement sont case activée ed. L’objet cible peut être l’un des éléments suivants.

  • Machine virtuelle : si l’objet cible est une machine virtuelle, l’indicateur de placement est case activée sur cette instance de machine virtuelle spécifique.
  • BareMetalMachine : Si l’objet cible est une machine nue, l’indicateur de placement est case activée sur cette machine nue spécifique.
  • Un rack : si l’objet cible est un rack, l’indicateur de placement est case activée sur tous les ordinateurs nus exécutés sur ce rack.

Important

L’argument resourceId doit être spécifié sous la forme d’un ID ARM, et il doit s’agir d’un ID de ressource valide pour l’objet cible. Si resourceId est incorrect ou non valide, l’indicateur de placement ne fonctionne pas correctement et la planification de la machine virtuelle peut échouer.

Étendue

L’argument scope est utilisé dans les indicateurs de placement pour spécifier l’étendue de l’indicateur d’affinité de machine virtuelle ou d’anti-affinité. L’argument d’étendue s’applique uniquement lorsque l’argument resourceId cible une machine virtuelle.

L’argument d’étendue a deux valeurs possibles : Machine ou Rack.

  • Machine : si l’étendue est définie sur Machine, l’indicateur de placement s’applique à la même machine nue que la machine virtuelle spécifiée. Par exemple, si l’indicateur de placement spécifie que la machine virtuelle doit être placée sur la même machine nue que celle spécifiée, l’étendue est définie sur Machine.
  • Rack : si l’étendue est définie sur Rack, l’indicateur de placement s’applique au rack auquel appartient la machine virtuelle spécifiée. Par exemple, si l’indicateur de placement spécifie que la machine virtuelle doit être placée sur le même rack que la machine virtuelle spécifiée est actuellement placée, l’étendue est définie sur Rack.

Important

Cet argument ne peut pas être laissé vide.

Planification de l’exécution

L’argument schedulingExecution est utilisé dans les indicateurs de placement pour spécifier si l’indicateur de placement est une exigence difficile ou réversible pendant la planification.

L’argument schedulingExecution a deux valeurs possibles : Hard ou Soft.

  • Dur : lorsque l’exécution de la planification est définie sur Hard, l’indicateur de placement est considéré comme une exigence stricte lors de la planification. Par conséquent, le planificateur place uniquement la machine virtuelle sur la ressource spécifiée spécifiée dans l’indicateur de placement. S’il n’existe aucune ressource disponible qui satisfait aux exigences difficiles, la planification de la machine virtuelle échoue.
  • Soft : lorsque l’exécution de la planification est définie sur Soft, l’indicateur de placement est considéré comme une préférence pendant la planification. Par conséquent, le planificateur tente de placer la machine virtuelle sur la ressource spécifiée dans l’indicateur de placement, mais s’il n’est pas possible, le planificateur peut placer la machine virtuelle sur une autre ressource.

Exemple d’indicateur d’affinité de rack et d’anti-affinité

Obtenir les ID de rack disponibles

  1. Définissez les variables requises.

    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. Obtenez l’ID du rack.

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

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

Placer une machine virtuelle sur un rack spécifique

Dans cet exemple, nous explorons les concepts des affinités souples et difficiles, en particulier sur le placement de machines virtuelles sur des racks spécifiques.

Remarque

Dans cet exemple et les exemples suivants, seules les variantes de l’argument --placement-hints sont fournies. Pour la création réelle de la machine virtuelle avec des indicateurs de positionnement, vous devez ajouter --placement-hints à l’interface CLI illustrée dans le guide de démarrage rapide de la machine virtuelle.

Planification stricte (affinité rack)

Cet indicateur de placement utilise le Affinity hintType pour s’assurer que la machine virtuelle est planifiée uniquement sur le rack spécifié avec l’ID de rack donné. Si le rack n’est pas disponible ou ne dispose pas de capacité, la planification échoue. Cet indicateur de placement peut être utile dans les situations où vous souhaitez vous assurer que certaines machines virtuelles sont placées sur des racks spécifiques pour des raisons de performances, de sécurité ou d’autres raisons.

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

Remarque

La configuration actuelle de l’indicateur de placement avec l’hintType Affinity garantit que la machine virtuelle est planifiée exclusivement sur le rack spécifié avec l’ID de rack fourni. Toutefois, il est important de noter que l’affinité de rack ne peut pas être spécifiée pour plusieurs racks avec Hard la planification de l’exécution. Cette limitation peut influencer votre stratégie de déploiement, en particulier si vous envisagez de placer des machines virtuelles sur plusieurs racks et d’autoriser le planificateur à les sélectionner.

Planification préférée (affinité rack)

Cet indicateur de placement utilise le Affinity hintType pour établir une règle d’affinité entre la machine virtuelle et le rack désigné. Il utilise également une Soft planificationExecution pour permettre à la machine virtuelle d’être placée sur un rack alternatif dans le cas où le rack spécifié n’est pas accessible ou n’a pas de capacité.

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

Empêcher l’emplacement d’une machine virtuelle sur un rack spécifique

Dans cet exemple, nous explorons les concepts des anti-affinités souples et dures, en particulier sur l’empêchement des machines virtuelles d’être placées sur des racks spécifiques.

Planification stricte (anti-affinité en rack)

Cet indicateur de placement utilise à la fois hintType AntiAffinity et Hard scheduleExecution pour empêcher la planification de la machine virtuelle sur le rack spécifié identifié par l’ID de rack. Dans cette configuration, le planificateur suit strictement ces indicateurs de placement. Toutefois, si l’ID de rack est incorrect ou qu’il n’y a pas suffisamment de capacité sur d’autres racks, le positionnement de la machine virtuelle peut échouer en raison de l’application stricte de la Hard règle de planification

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

Planification préférée (anti-affinité en rack)

Cet indicateur de placement utilise le AntiAffinity hintType avec l’intention d’éviter un rack spécifique pour le placement de la machine virtuelle. Toutefois, il est important de noter que, malgré cette préférence, la machine virtuelle peut toujours être placée sur ce rack non souhaité si d’autres racks n’ont pas suffisamment de capacité. Ce placement se produit parce que la planificationExecution est définie Softsur , ce qui permet à la machine virtuelle d’être prise en charge sur le rack initialement évité si d’autres options ne sont pas réalisables.

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

Exemple d’affinité de machine nue et d’anti-affinité

Obtenir les ID de machine nue disponibles

  1. Définissez les variables requises.

    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. Obtenez l’ID du rack.

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

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

Placer une machine virtuelle sur une machine nue spécifique

Dans cet exemple, nous explorons les concepts des affinités souples et difficiles, en particulier sur le placement de machines virtuelles sur des machines nues spécifiques.

Planification stricte (affinité de machine nue)

Cet indicateur de placement utilise le Affinity hintType pour s’assurer que la machine virtuelle est planifiée uniquement sur la machine nue spécifiée avec l’ID de machine nue donné. Si la machine nue n’est pas disponible ou ne dispose pas de capacité, la planification échoue. Cet indicateur de placement peut être utile dans les situations où vous souhaitez vous assurer que certaines machines virtuelles sont placées sur une machine nue spécifique pour des raisons de performances, de sécurité ou d’autres raisons.

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

Planification préférée (affinité de machine nue)

Cet indicateur de placement utilise le Affinity hintType pour établir une règle d’affinité entre la machine virtuelle et la machine nue désignée. Il utilise également une Soft planificationExecution pour permettre à la machine virtuelle d’être placée sur une autre machine nue dans le cas où la machine nue spécifiée n’est pas accessible ou n’a pas de capacité.

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

Empêcher l’emplacement d’une machine virtuelle sur une machine nue spécifique

Dans cet exemple, nous explorons les concepts des anti-affinités souples et dures, en particulier sur l’empêchement des machines virtuelles d’être placées sur des machines nues spécifiques.

Planification stricte (anti-affinité de machine nue)

Cet indicateur de placement utilise à la fois hintType AntiAffinity et Hard scheduleExecution pour empêcher la planification de la machine virtuelle sur la machine nue spécifiée identifiée par l’ID de machine nue. Dans cette configuration, le planificateur suit strictement ces indicateurs de placement. Toutefois, si l’ID de machine nue est incorrect ou qu’il n’y a pas suffisamment de capacité sur d’autres machines nues, le placement de la machine virtuelle peut échouer en raison de l’application stricte de la Hard règle de planification

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

Planification préférée (anti-affinité de machine nue)

Cet indicateur de placement utilise le AntiAffinity hintType avec l’intention d’éviter une machine nue spécifique pour le placement de la machine virtuelle. Toutefois, il est important de noter qu’en dépit de cette préférence, la machine virtuelle peut toujours être placée sur cette machine nue non souhaitée si d’autres machines nues n’ont pas suffisamment de capacité. Ce placement se produit parce que la planificationExecution est définie Softsur , ce qui permet à la machine virtuelle d’être prise en charge sur la machine nue initialement évitée si d’autres options ne sont pas réalisables.

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

Exemple d’indicateurs de placement de machine virtuelle vers une machine virtuelle et d’anti-affinité

Obtenir les ID de machine virtuelle disponibles

  1. Définissez les variables requises.

    RESOURCE_GROUP=<Target VM resource group>
    NEXUS_CLUSTER_SUBSCRIPTION="$(az account show -o tsv --query id)"
    
  2. Obtenez l’ID de la machine virtuelle.

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

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

Placer une machine virtuelle près d’une machine virtuelle spécifique

Cette section explore l’emplacement des machines virtuelles près de certaines machines virtuelles, mettant en évidence le rôle important du paramètre dans la scope configuration des indicateurs de placement. Le planificateur, par le biais de l’étendue définie, dirige les placements de machines virtuelles sur la même machine nue ou dans le même rack que l’ID de ressource de machine virtuelle référencée. Il est important de noter que, bien que les exemples fournis ici illustrent l’exécution Hard de la planification, vous pouvez utiliser Soft la planification si nécessaire, en fonction de votre cas d’usage spécifique.

Placer des machines virtuelles sur une même machine nue (affinité de machine virtuelle)

Dans cet exemple, en spécifiant Affinity comme type d’indicateur et Machine comme étendue, la configuration entraîne la mise en place d’une machine virtuelle sur la même machine nue que la machine virtuelle identifiée par l’ID de ressource donné. Par conséquent, la nouvelle machine virtuelle partage la même machine nue que la machine virtuelle référencée, ce qui entraîne des latences potentiellement inférieures entre machines virtuelles et des performances améliorées.

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

Placer des machines virtuelles dans un même rack (affinité de machine virtuelle)

Dans cet exemple, la configuration avec Affinity le type d’indicateur et Rack l’étendue entraîne le placement de machines virtuelles dans le même rack que la machine virtuelle identifiée par l’ID de ressource donné. Par conséquent, les nouvelles machines virtuelles sont placées à proximité physique de la machine virtuelle de référence, ce qui peut réduire la latence du réseau et améliorer les performances.

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

Empêcher les machines virtuelles d’être placées près d’une machine virtuelle spécifique (anti-affinité de machine virtuelle)

Dans cette section, le AntiAffinity type d’indicateur est utilisé pour empêcher les machines virtuelles d’être placées près de certaines autres machines virtuelles. Le scope paramètre détermine si cette séparation se produit au niveau de l’ordinateur ou du rack. Cette configuration est utile lorsque les machines virtuelles doivent être réparties sur différents matériels pour éviter les erreurs ou les problèmes de performances.

Empêcher les machines virtuelles d’être placées sur une même machine nue (anti-affinité de machine virtuelle)

Dans cet exemple, lorsque vous définissez l’étendue Machinesur , elle empêche les machines virtuelles d’être placées sur la même machine nue. Cette approche améliore la tolérance de panne en réduisant le risque d’échec d’une seule machine affectant la charge de travail, ce qui augmente la robustesse globale.

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

Empêcher les machines virtuelles d’être placées dans un même rack (anti-affinité de machine virtuelle)

Dans cet exemple, définissez l’étendue pour Rack vous assurer que les machines virtuelles ne sont pas placées dans le même rack. Cette configuration permet d’améliorer la tolérance de panne en garantissant qu’une défaillance d’un seul rack n’affecte pas la charge de travail.

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

Étapes suivantes

Bien que les exemples fournis dans cet article illustrent certains cas d’usage courants, l’API peut être utilisée pour implémenter un large éventail de scénarios de placement, ce qui en fait une solution flexible et adaptable pour la gestion du placement des machines virtuelles. Ajustez les paramètres schedulingExecutionet hintType les scopeparamètres dans différentes combinaisons pour comprendre comment ils affectent les placements de machines virtuelles. L’utilisation appropriée des indicateurs de placement peut améliorer la disponibilité et la résilience des applications et des services exécutés dans l’instance Azure Operator Nexus.