Share via


Uso degli hint di posizionamento nella macchina virtuale Nexus dell'operatore di Azure

Questo articolo illustra come usare i suggerimenti per guidare il posizionamento delle macchine virtuali nell'ambiente Nexus dell'operatore di Azure. Questi hint di posizionamento possono essere usati per creare affinità o anti-affinità tra macchine virtuali, computer bare metal o rack. Usare hint di posizionamento per assicurarsi che le macchine virtuali siano pianificate nel modo desiderato all'interno dell'ambiente Nexus dell'operatore di Azure.

Le regole di affinità consentono di specificare che le macchine virtuali devono essere ospitate nello stesso computer fisico o rack. Viceversa, le regole anti-affinità assicurano che le macchine virtuali siano ospitate in computer fisici o rack diversi.

È possibile aumentare la resilienza complessiva dell'applicazione usando regole anti-affinità per distribuire le macchine virtuali tra domini di errore diversi (rack, computer fisici e così via). È possibile aumentare l'efficienza dei costi dell'applicazione usando regole di affinità per comprimere le macchine virtuali in un minor numero di computer fisici.

Prerequisiti

Prima di procedere con questa guida pratica, assicurarsi di aver completato tutti i passaggi descritti nella Guida introduttiva alla macchina virtuale Nexus dell'operatore di Azure.

Configurazione degli hint di posizionamento

Questa sezione illustra il concetto di hint di posizionamento e il funzionamento di ogni campo nell'API, utile per la configurazione e la gestione delle macchine virtuali.

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

Tipo di hint

L'argomento hintType viene usato negli hint di posizionamento per specificare se l'hint di posizionamento supporta l'affinità o l'anti-affinità con le risorse di riferimento.

L'argomento hintType ha due valori possibili: Affinity o AntiAffinity.

  • Affinità: se hintType è impostato su Affinity, l'hint di posizionamento viene usato per creare una regola di affinità tra la macchina virtuale e le risorse a cui si fa riferimento. Di conseguenza, la macchina virtuale viene pianificata in base allo specifico computer bare metal, rack o vicino all'istanza della macchina virtuale come risorsa a cui si fa riferimento.
  • AntiAffinity: se hintType è impostato su AntiAffinity, l'hint di posizionamento viene usato per creare una regola di anti-affinità tra la macchina virtuale e le risorse a cui si fa riferimento. Di conseguenza, la macchina virtuale viene pianificata in un'altra istanza bare metal, rack o macchina virtuale dalla risorsa a cui si fa riferimento.

ID risorsa

L'argomento resourceId negli hint di posizionamento specifica l'oggetto di destinazione in base al quale vengono controllati gli hint di posizionamento. L'oggetto di destinazione può essere uno dei seguenti.

  • Una macchina virtuale: se l'oggetto di destinazione è una macchina virtuale, l'hint di posizionamento viene controllato rispetto a quella specifica istanza della macchina virtuale.
  • BareMetalMachine: se l'oggetto di destinazione è un computer bare metal, l'hint di posizionamento viene controllato rispetto a quella specifica macchina bare metal.
  • Rack: se l'oggetto di destinazione è un rack, l'hint di posizionamento viene controllato su tutti i computer bare metal in esecuzione su tale rack.

Importante

L'argomento resourceId deve essere specificato sotto forma di ID ARM e deve essere un ID risorsa valido per l'oggetto di destinazione. Se resourceId non è corretto o non è valido, l'hint di posizionamento non funzionerà correttamente e la pianificazione della macchina virtuale potrebbe non riuscire.

Ambito

L'argomento scope viene usato negli hint di posizionamento per specificare l'ambito dell'affinità della macchina virtuale o dell'hint di posizionamento anti-affinità. L'argomento ambito è applicabile solo quando l'argomento resourceId è destinato a una macchina virtuale.

L'argomento ambito ha due valori possibili: Machine o Rack.

  • Computer: se l'ambito è impostato su Computer, l'hint di posizionamento si applica alla stessa macchina bare metal della macchina virtuale specificata. Ad esempio, se l'hint di posizionamento specifica che la macchina virtuale deve essere posizionata nello stesso computer bare metal della macchina virtuale specificata, l'ambito verrà impostato su Computer.
  • Rack: se l'ambito è impostato su Rack, l'hint di posizionamento si applica al rack a cui appartiene la macchina virtuale specificata. Ad esempio, se l'hint di posizionamento specifica che la macchina virtuale deve essere posizionata nello stesso rack in cui è attualmente posizionata la macchina virtuale specificata, l'ambito verrà impostato su Rack.

Importante

Questo argomento non può essere lasciato vuoto.

Pianificazione dell'esecuzione

L'argomento schedulingExecution viene usato negli hint di posizionamento per specificare se l'hint di posizionamento è un requisito rigido o flessibile durante la pianificazione.

L'argomento schedulingExecution ha due valori possibili: Hard o Soft.

  • Hard: quando la pianificazioneExecution è impostata su Hard, l'hint di posizionamento viene considerato un requisito rigoroso durante la pianificazione. Di conseguenza, l'utilità di pianificazione inserisce solo la macchina virtuale nella risorsa specificata specificata nell'hint di posizionamento. Se non è disponibile alcuna risorsa che soddisfi il requisito rigido, la pianificazione della macchina virtuale ha esito negativo.
  • Soft: quando la pianificazioneExecution è impostata su Soft, l'hint di posizionamento viene considerato una preferenza durante la pianificazione. Di conseguenza, l'utilità di pianificazione tenta di posizionare la macchina virtuale nella risorsa specificata nell'hint di posizionamento, ma se non è possibile, l'utilità di pianificazione può posizionare la macchina virtuale in una risorsa diversa.

Esempio di hint di posizionamento di affinità rack e anti-affinità

Ottenere gli ID rack disponibili

  1. Impostare le variabili necessarie.

    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. Ottenere l'ID del rack.

    az networkcloud rack list -g $NEXUS_CLUSTER_MANAGED_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id
    
  3. Output di esempio.

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

Posizionare la macchina virtuale in un rack specifico

In questo esempio vengono esaminati i concetti di affinità soft e hard, in particolare per l'inserimento di macchine virtuali in rack specifici.

Nota

In questo e negli esempi seguenti vengono fornite solo varianti dell'argomento --placement-hints . Per la creazione effettiva della macchina virtuale con hint di posizionamento, è necessario aggiungere --placement-hints all'interfaccia della riga di comando illustrata nella guida introduttiva alla macchina virtuale.

Pianificazione rigorosa (affinità rack)

Questo hint di posizionamento usa hintType Affinity per assicurarsi che la macchina virtuale sia pianificata solo nel rack specificato con l'ID rack specificato. Se il rack non è disponibile o non dispone della capacità, la pianificazione non riesce. Questo hint di posizionamento può essere utile nelle situazioni in cui si vuole assicurarsi che determinate macchine virtuali siano posizionate su rack specifici per prestazioni, sicurezza o altri motivi.

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

Nota

La configurazione dell'hint di posizionamento corrente con affinity hintType garantisce che la macchina virtuale sia pianificata esclusivamente nel rack specificato con l'ID rack specificato. Tuttavia, è importante notare che non è possibile specificare l'affinità rack per più rack con Hard esecuzione di pianificazione. Questa limitazione potrebbe influenzare la strategia di distribuzione, in particolare se si stanno valutando l'inserimento di macchine virtuali in più rack e la selezione da parte dell'utilità di pianificazione.

Pianificazione preferita (affinità rack)

Questo hint di posizionamento usa hintType Affinity per stabilire una regola di affinità tra la macchina virtuale e il rack designato. Usa anche una Soft pianificazioneExecution per consentire l'inserimento della macchina virtuale in un rack alternativo nel caso in cui il rack specificato non sia accessibile o non abbia capacità.

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

Impedire che la macchina virtuale venga posizionata su un rack specifico

In questo esempio vengono esaminati i concetti di anti-affinità soft e hard, in particolare per impedire che le macchine virtuali vengano posizionate su rack specifici.

Pianificazione rigorosa (anti-affinità rack)

Questo hint di posizionamento usa sia hintType AntiAffinity che Hard schedulingExecution per impedire che la macchina virtuale venga pianificata nel rack specificato identificato dall'ID rack. In questa configurazione, l'utilità di pianificazione segue rigorosamente questi hint di posizionamento. Tuttavia, se l'ID del rack non è corretto o non è disponibile una capacità sufficiente in altri rack, il posizionamento della macchina virtuale potrebbe non riuscire a causa dell'applicazione rigorosa della regola di Hard pianificazione

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

Pianificazione preferita (anti-affinità rack)

Questo hint di posizionamento usa hintType AntiAffinity con l'intenzione di evitare un rack specifico per il posizionamento della macchina virtuale. Tuttavia, è importante notare che, nonostante questa preferenza, la macchina virtuale potrebbe comunque essere posizionata su questo rack indesiderato se altri rack non hanno capacità sufficiente. Questo posizionamento si verifica perché la pianificazioneExecution è impostata su Soft, che consente di ospitare la macchina virtuale nel rack inizialmente evitato se altre opzioni non sono fattibili.

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

Esempio di affinità della macchina bare metal e hint di posizionamento anti-affinità

Ottenere gli ID macchina bare metal disponibili

  1. Impostare le variabili necessarie.

    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. Ottenere l'ID del rack.

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

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

Posizionare la macchina virtuale in una macchina bare metal specifica

In questo esempio vengono esaminati i concetti di affinità soft e hard, in particolare per l'inserimento di macchine virtuali in macchine bare metal specifiche.

Pianificazione rigorosa (affinità di macchina bare metal)

Questo hint di posizionamento usa hintType Affinity per assicurarsi che la macchina virtuale sia pianificata solo nella macchina bare metal specificata con l'ID macchina bare metal specificato. Se la macchina bare metal non è disponibile o non dispone della capacità, la pianificazione non riesce. Questo suggerimento di posizionamento può essere utile nelle situazioni in cui si vuole assicurarsi che determinate macchine virtuali siano posizionate in una macchina bare metal specifica per motivi di prestazioni, sicurezza o altri motivi.

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

Pianificazione preferita (affinità computer bare metal)

Questo hint di posizionamento usa hintType Affinity per stabilire una regola di affinità tra la macchina virtuale e la macchina bare metal designata. Usa anche una Soft schedulingExecution per consentire l'inserimento della macchina virtuale in un computer bare metal alternativo nel caso in cui la macchina bare metal specificata non sia accessibile o non abbia capacità.

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

Impedire che la macchina virtuale venga posizionata in una macchina bare metal specifica

In questo esempio vengono esaminati i concetti di anti-affinità soft e hard, in particolare per impedire che le macchine virtuali vengano inserite in macchine bare metal specifiche.

Pianificazione rigorosa (anti-affinità macchina bare metal)

Questo hint di posizionamento usa sia hintType AntiAffinity che Hard schedulingExecution per impedire che la macchina virtuale venga pianificata nella macchina bare metal specificata identificata dall'ID computer bare metal specificato. In questa configurazione, l'utilità di pianificazione segue rigorosamente questi hint di posizionamento. Tuttavia, se l'ID macchina bare metal non è corretto o non è disponibile una capacità sufficiente in altri computer bare metal, il posizionamento della macchina virtuale potrebbe non riuscire a causa dell'applicazione rigorosa della Hard regola di pianificazione

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

Pianificazione preferita (anti-affinità computer bare metal)

Questo hint di posizionamento usa hintType AntiAffinity con l'intenzione di evitare una macchina bare metal specifica per il posizionamento della macchina virtuale. Tuttavia, è importante notare che, nonostante questa preferenza, la macchina virtuale potrebbe comunque essere posizionata su questa macchina bare metal indesiderata se altre macchine bare metal non hanno una capacità sufficiente. Questo posizionamento si verifica perché la pianificazioneExecution è impostata su Soft, che consente di ospitare la macchina virtuale nel computer bare metal inizialmente evitato se altre opzioni non sono fattibili.

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

Esempio di hint di posizionamento da macchina virtuale a macchina virtuale e anti-affinità

Ottenere gli ID macchina virtuale disponibili

  1. Impostare le variabili necessarie.

    RESOURCE_GROUP=<Target VM resource group>
    NEXUS_CLUSTER_SUBSCRIPTION="$(az account show -o tsv --query id)"
    
  2. Ottenere l'ID macchina virtuale.

    az networkcloud virtualmachine list -g $RESOURCE_GROUP --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id
    
  3. Output di esempio.

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

Posizionare la macchina virtuale vicino a una macchina virtuale specifica

Questa sezione illustra il posizionamento delle macchine virtuali vicino a determinate macchine virtuali, evidenziando il ruolo importante del scope parametro nella configurazione degli hint di posizionamento. L'utilità di pianificazione, tramite l'ambito definito, indirizza i posizionamenti delle macchine virtuali sullo stesso computer bare metal o all'interno dello stesso rack del resourceId della macchina virtuale a cui si fa riferimento. È importante notare che, mentre gli esempi forniti qui illustrano l'esecuzione Hard della pianificazione, è possibile usare Soft la pianificazione in base alle esigenze, in base al caso d'uso specifico.

Posizionare macchine virtuali in una stessa macchina bare metal (affinità vm)

In questo esempio, specificando Affinity come tipo di hint e Machine come ambito, la configurazione comporta l'inserimento della macchina virtuale nella stessa macchina bare metal della macchina virtuale identificata dall'ID risorsa specificato. Di conseguenza, la nuova macchina virtuale condivide la stessa macchina bare metal della macchina virtuale a cui si fa riferimento, causando latenze potenzialmente inferiori tra macchine virtuali e prestazioni migliorate.

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

Posizionare le macchine virtuali in uno stesso rack (affinità di macchina virtuale)

In questo esempio, la configurazione con Affinity come tipo di hint e Rack come ambito comporta il posizionamento delle macchine virtuali all'interno dello stesso rack della macchina virtuale identificata dall'ID risorsa specificato. Di conseguenza, le nuove macchine virtuali vengono posizionate in prossimità fisica alla macchina virtuale di riferimento, riducendo potenzialmente la latenza di rete e migliorando le prestazioni.

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

Impedire che le macchine virtuali vengano posizionate vicino a una macchina virtuale specifica (anti-affinità di macchina virtuale)

In questa sezione viene usato il AntiAffinity tipo di hint per impedire che le macchine virtuali vengano posizionate vicino a determinate altre macchine virtuali. Il scope parametro decide se questa separazione avviene a livello di computer o rack. Questa configurazione è utile quando le macchine virtuali devono essere distribuite in hardware diverso per evitare errori o problemi di prestazioni.

Impedire che le macchine virtuali vengano posizionate in una stessa macchina bare metal (anti-affinità macchina virtuale)

In questo esempio, quando si imposta l'ambito su Machine, si impedisce che le macchine virtuali vengano posizionate sullo stesso computer bare metal. Questo approccio aumenta la tolleranza di errore riducendo il rischio di errore di un singolo computer che influisce sul carico di lavoro, aumentando quindi l'affidabilità complessiva.

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

Impedire l'immissione di macchine virtuali in uno stesso rack (anti-affinità delle macchine virtuali)

In questo esempio, l'impostazione dell'ambito su Rack garantisce che le macchine virtuali non siano posizionate nello stesso rack. Questa configurazione consente di migliorare la tolleranza di errore assicurando che un errore di un singolo rack non influisca sul carico di lavoro.

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

Passaggi successivi

Mentre gli esempi forniti in questo articolo illustrano alcuni casi d'uso comuni, l'API può essere usata per implementare un'ampia gamma di scenari di posizionamento, rendendola una soluzione flessibile e adattabile per la gestione del posizionamento delle macchine virtuali. Modificare i scopeparametri , schedulingExecutione hintType in combinazioni diverse per comprendere in che modo influiscono sui posizionamenti delle macchine virtuali. L'uso corretto degli hint di posizionamento può migliorare la disponibilità e la resilienza delle applicazioni e dei servizi in esecuzione nell'istanza di Nexus dell'operatore di Azure.