Compartilhar via


Trabalhando com dicas de posicionamento na máquina virtual Nexus do Operador do Azure

Neste artigo, você aprenderá a usar dicas para orientar o posicionamento de máquinas virtuais no ambiente do Nexus do Operador do Azure. Essas dicas de posicionamento podem ser usadas para criar afinidade ou anti-afinidade entre máquinas virtuais, máquinas bare-metal ou racks. Use dicas de posicionamento para garantir que as máquinas virtuais sejam agendadas da maneira desejada dentro do ambiente do Nexus do Operador do Azure.

As regras de afinidade permitem especificar que as máquinas virtuais devem ser hospedadas no mesmo computador físico ou rack. Por outro lado, as regras anti-afinidade garantem que as máquinas virtuais sejam hospedadas em diferentes máquinas físicas ou racks.

Você pode aumentar a resiliência geral do aplicativo usando regras anti-afinidade para espalhar máquinas virtuais em diferentes domínios de falha (racks, máquinas físicas etc.). Você pode aumentar a eficiência de custo do seu aplicativo usando regras de afinidade para empacotar máquinas virtuais em menos máquinas físicas.

Pré-requisitos

Antes de prosseguir com este guia de instruções, verifique se você concluiu todas as etapas no guia de Início Rápido da máquina virtual Nexus do Operador do Azure.

Configuração de dicas de posicionamento

Esta seção explica o conceito de dicas de posicionamento e como cada campo na API funciona, o que é útil ao configurar e gerenciar máquinas virtuais.

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

Tipo de dica

O hintType argumento é usado em dicas de posicionamento para especificar se a dica de posicionamento dá suporte à afinidade ou anti-afinidade com os recursos referenciados.

O argumento hintType tem dois valores possíveis: Affinity ou AntiAffinity.

  • Afinidade: se o hintType for definido como Affinity, a dica de posicionamento será usada para criar uma regra de afinidade entre a VM e os recursos referenciados. Como resultado, a VM é agendada na máquina física bare-metal específica, no rack ou próxima à instância da máquina virtual, como o recurso designado.
  • AntiAffinity: se o hintType estiver definido como AntiAffinity, a dica de posicionamento será usada para criar uma regra anti-afinidade entre a VM e os recursos referenciados. Como resultado, a VM é alocada em uma máquina bare-metal, em um rack ou em uma instância de máquina virtual diferente do recurso referenciado.

ID de Recurso

O resourceId argumento em dicas de posicionamento especifica o objeto de destino no qual as dicas de posicionamento são verificadas. O objeto de destino pode ser qualquer um dos seguintes.

  • Uma Máquina Virtual: se o objeto de destino for uma máquina virtual, a dica de posicionamento será verificada em relação a essa instância de máquina virtual específica.
  • BareMetalMachine: se o objeto de destino for uma máquina bare-metal, a dica de posicionamento será verificada em relação a essa máquina bare-metal específica.
  • Um Rack: se o objeto de destino for um rack, a dica de posicionamento será verificada em relação a todas as máquinas bare-metal em execução nesse rack.

Importante

O argumento resourceId deve ser especificado na forma de uma ID do ARM e deve ser uma ID de recurso válida para o objeto de destino. Se a resourceId estiver incorreta ou inválida, a dica de posicionamento não funcionará corretamente e o agendamento da VM poderá falhar.

Scope

O scope argumento é usado em indicações de posicionamento para especificar o escopo da afinidade da máquina virtual ou da indicação de posicionamento de anti-afinidade. O argumento de escopo só é aplicável quando o resourceId argumento é direcionado a uma máquina virtual.

O argumento de escopo tem dois valores possíveis: Machine ou Rack.

  • Máquina: Se o escopo estiver definido como Máquina, a dica de posicionamento se aplicará à mesma máquina bare-metal que a máquina virtual especificada. Por exemplo, se a dica de posicionamento especificar que a VM deve ser colocada no mesmo computador bare-metal que a VM especificada, o escopo será definido como Machine.
  • Rack: se o escopo estiver definido como Rack, a dica de posicionamento se aplicará ao rack ao qual a máquina virtual especificada pertence. Por exemplo, se a dica de posicionamento especificar que a VM deve ser colocada no mesmo rack que a máquina virtual especificada está colocada no momento, o escopo será definido como Rack.

Importante

Esse argumento não pode ser deixado em branco.

Agendando a execução

O schedulingExecution argumento é usado em dicas de posicionamento para especificar se a dica de posicionamento é um requisito rígido ou flexível durante o agendamento.

O argumento schedulingExecution tem dois valores possíveis: Hard ou Soft.

  • Difícil: quando a execução de agendamento é definida como Difícil, a indicação de posicionamento é considerada um requisito estrito durante o agendamento. Como resultado, o agendador só coloca a máquina virtual no recurso especificado na dica de posicionamento. Se não houver nenhum recurso disponível que atenda ao requisito rígido, o agendamento da máquina virtual falhará.
  • Suave: quando o schedulingExecution é definido como Soft, a dica de posicionamento é considerada uma preferência durante o agendamento. Como resultado, o agendador tenta colocar a máquina virtual no recurso especificado na dica de posicionamento, mas se não for possível, o agendador poderá colocar a máquina virtual em um recurso diferente.

Exemplo de dicas de afinidade de rack e posicionamento antia afinidade

Obter IDs de rack disponíveis

  1. Defina as variáveis necessárias.

    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. Obter a identificação do rack.

    az networkcloud rack list -g $NEXUS_CLUSTER_MANAGED_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id
    
  3. Saída de exemplo.

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

Colocar a máquina virtual em um rack específico

Neste exemplo, exploramos os conceitos de afinidades suaves e duras, particularmente sobre a colocação de máquinas virtuais em racks específicos.

Observação

Neste e nos exemplos a seguir, somente variações do --placement-hints argumento são fornecidas. Para a criação real da VM com dicas de posicionamento, você deve adicionar --placement-hints à CLI ilustrada no guia de Início Rápido da VM.

Agendamento estrito (afinidade de rack)

Essa dica de posicionamento usa o Affinity hintType para garantir que a máquina virtual seja agendada apenas no rack especificado com a ID do rack fornecida. Se o rack não estiver disponível ou não tiver capacidade, o agendamento falhará. Essa dica de posicionamento pode ser útil em situações em que você deseja garantir que determinadas máquinas virtuais sejam colocadas em racks específicos por desempenho, segurança ou outros motivos.

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

Observação

A configuração de dica de posicionamento atual com o Affinity hintType garante que a máquina virtual seja agendada exclusivamente no rack especificado com a ID do rack fornecida. No entanto, é importante observar que a afinidade de rack não pode ser especificada para mais de um rack com Hard execução de agendamento. Essa limitação pode influenciar sua estratégia de implantação, especialmente se você estiver considerando colocar VMs em vários racks e permitir que o agendador selecione entre eles.

Agendamento preferencial (afinidade de rack)

Essa dica de posicionamento utiliza o Affinity hintType para estabelecer uma regra de afinidade entre a máquina virtual e o rack designado. Ele também emprega um Soft schedulingExecution para permitir que a VM seja colocada em um rack alternativo caso o rack especificado não esteja acessível ou não tenha capacidade.

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

Impedir que a máquina virtual seja colocada em um rack específico

Neste exemplo, exploramos os conceitos de anti-afinidades suaves e duras, particularmente ao impedir que máquinas virtuais sejam colocadas em racks específicos.

Agendamento estrito (antia afinidade de rack)

Essa dica de posicionamento usa hintType AntiAffinity e Hard schedulingExecution para impedir que a máquina virtual seja agendada no rack especificado identificado pela ID do rack. Nessa configuração, o agendador segue estritamente essas dicas de posicionamento. No entanto, se a ID do rack estiver incorreta ou não houver capacidade suficiente em outros racks, o posicionamento da VM poderá falhar devido à estrita aplicação da regra de agendamento Hard.

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

Agendamento preferencial (antia afinidade de rack)

Essa dica de posicionamento usa o AntiAffinity hintType com a intenção de evitar um rack específico para o posicionamento da máquina virtual. No entanto, é importante observar que, apesar dessa preferência, a VM ainda poderá ser colocada neste rack indesejado se outros racks não tiverem capacidade suficiente. Esse posicionamento ocorre porque o schedulingExecution está definido como Soft, o que permite que a VM seja acomodada no rack inicialmente evitado se outras opções não forem viáveis.

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

Exemplo de sugestões de afinidade e anti-afinidade para posicionamento de servidores bare-metal

Obtenha os identificadores das máquinas bare-metal disponíveis

  1. Defina as variáveis necessárias.

    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. Obter a identificação do rack.

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

    $ 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 máquina virtual em uma máquina bare-metal específica

Neste exemplo, exploramos os conceitos de afinidades suaves e duras, particularmente sobre a colocação de máquinas virtuais em máquinas bare-metal específicas.

Agendamento estrito (afinidade de máquina bare-metal)

Esta dica de posicionamento utiliza o Affinity hintType para garantir que a máquina virtual seja agendada apenas no servidor bare-metal especificado com a ID do servidor bare-metal fornecida. Se a máquina bare-metal estiver indisponível ou não tiver capacidade, o agendamento falhará. Essa dica de posicionamento pode ser útil em situações em que você deseja garantir que determinadas máquinas virtuais sejam colocadas em máquinas bare-metal específicas por desempenho, segurança ou outros motivos.

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

Agendamento preferencial (afinidade com máquina bare-metal)

Essa dica de posicionamento utiliza o Affinity hintType para estabelecer uma regra de afinidade entre a máquina virtual e a máquina bare-metal designada. Ele também emprega um Soft schedulingExecution para permitir que a VM seja colocada em uma máquina bare-metal alternativa caso a máquina bare-metal especificada não esteja acessível ou não tenha capacidade.

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

Impedir que a máquina virtual seja colocada em uma máquina bare-metal específica

Neste exemplo, exploramos os conceitos de anti-afinidades flexíveis e rígidas, especialmente em relação a impedir que máquinas virtuais sejam colocadas em máquinas bare-metal específicas.

Agendamento estrito (antia afinidade de máquina bare-metal)

Esta indicação de posicionamento usa tanto o tipo de dica AntiAffinity quanto a execução de agendamento Hard para impedir que a máquina virtual seja agendada na máquina bare-metal especificada, identificada pela ID da máquina bare-metal. Nessa configuração, o agendador segue estritamente essas dicas de posicionamento. No entanto, se o ID da máquina bare-metal estiver incorreto ou não houver capacidade suficiente em outras máquinas bare-metal, a alocação da VM poderá falhar devido à aplicação rigorosa da regra de agendamento Hard.

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

Agendamento preferencial (antia afinidade de máquina bare-metal)

Essa dica de posicionamento utiliza o "hintType" com a intenção de evitar o uso de uma máquina de metal nu específica para o posicionamento da máquina virtual. No entanto, é importante observar que, apesar dessa preferência, a VM ainda pode ser colocada nessa máquina bare-metal indesejada se as outras máquinas bare-metal não tiverem capacidade suficiente. Esse posicionamento ocorre porque o schedulingExecution está definido como Soft, o que permite que a VM seja acomodada na máquina bare-metal que foi inicialmente evitada, caso outras opções não sejam viáveis.

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

Exemplo de dicas de posicionamento de afinidade e antiafinidade de VM para VM

Obter os identificadores das máquinas virtuais disponíveis

  1. Defina as variáveis necessárias.

    RESOURCE_GROUP=<Target VM resource group>
    NEXUS_CLUSTER_SUBSCRIPTION="$(az account show -o tsv --query id)"
    
  2. Obtenha a ID da máquina virtual.

    az networkcloud virtualmachine list -g $RESOURCE_GROUP --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id
    
  3. Saída de exemplo.

    $ 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 a máquina virtual perto de uma máquina virtual específica

Esta seção explora o posicionamento de máquinas virtuais perto de determinadas VMs, realçando a função importante do scope parâmetro na configuração de dicas de posicionamento. O agendador, por meio do escopo definido, direciona os posicionamentos de VM no mesmo computador bare-metal ou dentro do mesmo rack que o Id de recurso VM referenciado. É importante observar que, embora os exemplos fornecidos aqui ilustrem a execução do Hard agendamento, você pode usar o Soft agendamento conforme necessário, com base em seu caso de uso específico.

Colocar máquinas virtuais em uma mesma máquina bare-metal (afinidade de VM)

Neste exemplo, especificando Affinity como o tipo de dica e Machine como o escopo, a configuração resulta na colocação da máquina virtual na mesma máquina bare-metal que a VM identificada pela ID de recurso fornecida. Como resultado, a nova VM compartilha a mesma máquina física bare-metal que a VM referenciada, o que pode levar a latências inter-VM menores e desempenho aprimorado.

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

Colocar máquinas virtuais em um mesmo rack (afinidade de VM)

Neste exemplo, a configuração com Affinity o tipo de dica e Rack como escopo leva ao posicionamento de máquinas virtuais no mesmo rack que a VM identificada pela ID de recurso fornecida. Como resultado, as novas VMs são colocadas em proximidade física com a VM de referência, potencialmente reduzindo a latência de rede e melhorando o desempenho.

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

Impedir que máquinas virtuais sejam colocadas perto de uma máquina virtual específica (antia afinidade de VM)

Nesta seção, o AntiAffinity tipo de dica é usado para impedir que as VMs sejam colocadas perto de determinadas outras VMs. O scope parâmetro decide se essa separação ocorre no nível do computador ou do rack. Essa configuração é útil quando as VMs precisam ser distribuídas por um hardware diferente para evitar falhas ou problemas de desempenho.

Impedir que máquinas virtuais sejam colocadas no mesmo servidor bare-metal (restrição de anti-afinidade de VM)

Neste exemplo, quando você define o escopo como Machine, ele impede que as VMs sejam colocadas no mesmo computador bare-metal. Essa abordagem aumenta a tolerância a falhas reduzindo o risco de falha de um único computador que afeta a carga de trabalho, aumentando a robustez geral.

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

Impedir que máquinas virtuais sejam colocadas em um mesmo rack (antia afinidade de VM)

Neste exemplo, definir o escopo para Rack garantir que as VMs não sejam colocadas dentro do mesmo rack. Essa configuração ajuda a melhorar a tolerância a falhas, garantindo que uma falha de um único rack não afete a carga de trabalho.

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

Próximas etapas

Embora os exemplos fornecidos neste artigo demonstrem alguns casos de uso comuns, a API pode ser usada para implementar uma ampla gama de cenários de posicionamento, tornando-a uma solução flexível e adaptável para gerenciar o posicionamento da máquina virtual. Ajuste os parâmetros scope, schedulingExecution e hintType em diferentes combinações para entender como eles afetam os posicionamentos da VM. O uso adequado de dicas de posicionamento pode melhorar a disponibilidade e a resiliência de aplicativos e serviços em execução na instância do Nexus do Operador do Azure.