Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans cet article, vous allez apprendre à utiliser des indicateurs pour guider le positionnement des machines virtuelles dans l’environnement Azure Operator Nexus. Ces conseils de placement peuvent être utilisés pour créer une affinité ou une anti-affinité entre des machines virtuelles, des serveurs physiques 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.
Prerequisites
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. En conséquence, la machine virtuelle est planifiée sur un autre serveur physique, rack ou instance de machine virtuelle distincts 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 vérifiés. L’objet cible peut être l’un des éléments suivants.
- Machine virtuelle : si l’objet cible est une machine virtuelle, l’indicateur de positionnement est vérifié par rapport à cette instance de machine virtuelle spécifique.
- BareMetalMachine : Si l’objet cible est une machine bare metal, l’indicateur de positionnement est vérifié par rapport à cette machine bare metal spécifique.
- Un rack : si l’objet cible est un rack, l’indicateur de placement est vérifié sur tous les serveurs bare-metal fonctionnant 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.
Scope
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 celui-ci constitue une exigence stricte ou souple 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 programmation est définie sur Soft, l'indicateur de placement est considéré comme une préférence lors de la programmation. 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 de suggestions d’affinité et d’anti-affinité de placement pour les racks
Obtenir les identifiants de rack disponibles
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 '\"')"Obtenez l'identifiant du rack.
az networkcloud rack list -g $NEXUS_CLUSTER_MANAGED_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].idExemple 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.
Note
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"}]'
Note
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 lors de l'exécution du planificateur avec Hard. 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é de 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 exécution de planification Soft 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 manque 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 (répartition anti-affinité des racks)
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 l'exécution de la planification est définie sur Soft, ce qui permet à la machine virtuelle d'être hébergée sur le rack précédemment é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é et d'anti-affinité de placement des machines bare-metal
Obtenir les ID de machine nue disponibles
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 '\"')"Obtenez l'identifiant du rack.
az networkcloud baremetalmachine list -g $NEXUS_CLUSTER_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query "sort_by([].{ID: id, RackID: rackId}, &RackID)"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 un serveur bare-metal spécifique
Dans cet exemple, nous explorons les concepts des affinités souples et rigides, en particulier concernant le placement de machines virtuelles sur des serveurs bare-metal spécifiques.
Planification stricte (affinité avec machine métallique)
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 bare-metal n’est pas disponible ou n’a pas assez 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é des systèmes non virtualisés)
Cet indicateur de placement utilise le Affinity hintType pour établir une règle d’affinité entre la machine virtuelle et le serveur physique désigné. Il utilise également une Soft stratégie de planification pour permettre à la machine virtuelle d’être placée sur une autre machine physique dans le cas où la machine physique spécifiée n’est pas accessible ou n’a pas de capacité suffisante.
--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 bare metal)
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 la machine physique est incorrect ou qu'il n’y a pas suffisamment de capacité sur d'autres machines physiques, le déploiement de la machine virtuelle peut échouer en raison de l'application stricte de la règle de planification Hard.
--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 indice de placement utilise le type d'indice AntiAffinity avec l'intention d'éviter une machine physique 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 le schedulingExecution est défini sur Soft, ce qui permet à la machine virtuelle d’être logée sur le serveur bare-metal 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/bareMetalMachines/<machine-name>","schedulingExecution":"Soft","scope":"Machine"}]'
Exemple de conseils pour le placement d’affinité et d’anti-affinité entre machines virtuelles
Obtenir les ID de machine virtuelle disponibles
Définissez les variables requises.
RESOURCE_GROUP=<Target VM resource group> NEXUS_CLUSTER_SUBSCRIPTION="$(az account show -o tsv --query id)"Obtenez l’ID de la machine virtuelle.
az networkcloud virtualmachine list -g $RESOURCE_GROUP --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].idExemple 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 soit sur la même machine physique, soit dans le même rack que le resourceId de machine virtuelle référencé. Il est important de noter que, bien que les exemples fournis ici illustrent l'exécution Hard du calendrier, vous pouvez opter pour Soft un calendrier différent selon votre besoin spécifique.
Placer des machines virtuelles sur une même machine bare-metal (affinité VM)
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 un même serveur physique (règle d'anti-affinité)
Dans cet exemple, lorsque vous définissez l’étendue sur Machine, cela empêche les machines virtuelles d’être placées sur la même machine physique. 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é des machines virtuelles)
Dans cet exemple, en définissant l'étendue sur Rack, vous garantissez 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 scope, schedulingExecution, et hintType 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.