Trabalhando com dicas de posicionamento na máquina virtual do Azure Operator Nexus
Neste artigo, você aprenderá a usar dicas para orientar o posicionamento de máquinas virtuais no ambiente do Azure Operator Nexus. Essas dicas de posicionamento podem ser usadas para criar afinidade ou antiafinidade 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 no ambiente do Azure Operator Nexus.
As regras de afinidade permitem especificar que as máquinas virtuais devem ser hospedadas na mesma máquina física ou rack. Por outro lado, as regras antiafinidade garantem que as máquinas virtuais sejam hospedadas em diferentes máquinas físicas ou racks.
Você pode aumentar a resiliência geral de seu aplicativo usando regras de antiafinidade 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 de seu aplicativo usando regras de afinidade para empacotar máquinas virtuais em menos máquinas físicas.
Pré-requisitos
Antes de continuar 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 oferece suporte a afinidade ou antiafinidade com os recursos referenciados.
O argumento hintType tem dois valores possíveis: Affinity
ou AntiAffinity
.
- Afinidade: Se o hintType estiver 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 bare-metal específica, no rack ou perto da instância da máquina virtual como o recurso referenciado.
- AntiAffinity: Se o hintType estiver definido como AntiAffinity, a dica de posicionamento será usada para criar uma regra de antiafinidade entre a VM e os recursos referenciados. Como resultado, a VM é agendada em uma instância de máquina bare-metal, rack ou máquina virtual diferente do recurso referenciado.
ID de Recurso
O resourceId
argumento nas dicas de posicionamento especifica o objeto de destino em relação ao 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 específica da máquina virtual.
- Uma 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 ARM e deve ser uma ID de recurso válida para o objeto de destino. Se o resourceId estiver incorreto ou inválido, a dica de posicionamento não funcionará corretamente e o agendamento da VM poderá falhar.
Escopo
O scope
argumento é usado em dicas de posicionamento para especificar o escopo da afinidade de máquina virtual ou dica de posicionamento antiafinidade. O argumento scope só é aplicável quando o resourceId
argumento tem como alvo uma máquina virtual.
O argumento scope 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 na mesma máquina bare-metal que a VM especificada, o escopo será definido como Máquina.
- 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 em 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.
Agendamento de 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 o agendamentoExecução é definido como Difícil, a dica de posicionamento é considerada um requisito estrito durante o agendamento. Como resultado, o agendador coloca apenas a máquina virtual no recurso especificado especificado na dica de posicionamento. Se não houver nenhum recurso disponível que satisfaça o requisito rígido, o agendamento da máquina virtual falhará.
- Soft: 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 pode colocar a máquina virtual em um recurso diferente.
Exemplo de dicas de posicionamento de afinidade e antiafinidade de rack
Obtenha os IDs de rack disponíveis
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 '\"')"
Obtenha o ID do rack.
az networkcloud rack list -g $NEXUS_CLUSTER_MANAGED_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id
Saída de amostra.
$ 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 máquina virtual em um rack específico
Neste exemplo, exploramos os conceitos de afinidades soft e hard, particularmente sobre a colocação de máquinas virtuais em racks específicos.
Observação
Neste e nos exemplos a seguir, apenas 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.
Programação rigorosa (afinidade de rack)
Essa dica de posicionamento usa o hintType para garantir que a máquina virtual seja agendada apenas no rack especificado com o Affinity
ID de rack fornecido. Se o rack 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 racks específicos por motivos de desempenho, segurança ou outros.
--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 atual da dica de posicionamento com o Affinity hintType garante que a máquina virtual seja agendada exclusivamente no rack especificado com o ID de rack fornecido. 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 elas.
Agendamento preferencial (afinidade de rack)
Essa dica de posicionamento utiliza o hintType para estabelecer uma regra de afinidade entre a máquina virtual e o Affinity
rack designado. Ele também emprega um schedulingExecution para permitir que a VM seja colocada em um Soft
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 antiafinidades suaves e rígidas, particularmente sobre impedir que máquinas virtuais sejam colocadas em racks específicos.
Programação rigorosa (anti-afinidade de rack)
Essa dica de posicionamento usa o hintType e Hard
o AntiAffinity
schedulingExecution para impedir que a máquina virtual seja agendada no rack especificado identificado pelo ID do rack. Nessa configuração, o agendador segue estritamente essas dicas de posicionamento. No entanto, se o ID do rack estiver incorreto ou não houver capacidade suficiente em outros racks, o posicionamento da VM poderá falhar devido à aplicação estrita da regra de Hard
agendamento
--placement-hints '[{"hintType":"AntiAffinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/racks/<compute-rack-2>","schedulingExecution":"Hard","scope":"Rack"}]'
Agendamento preferencial (antiafinidade de rack)
Essa dica de posicionamento usa o hintType com a intenção de evitar um rack específico para o AntiAffinity
posicionamento da máquina virtual. No entanto, é importante notar que, apesar dessa preferência, a VM ainda pode ser colocada nesse rack indesejado se outros racks não tiverem capacidade suficiente. Esse posicionamento acontece porque o schedulingExecution é 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 afinidade de máquina bare-metal e dicas de colocação anti-afinidade
Obtenha os IDs de máquina bare-metal disponíveis
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 '\"')"
Obtenha o ID do rack.
az networkcloud baremetalmachine list -g $NEXUS_CLUSTER_RG --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query "sort_by([].{ID: id, RackID: rackId}, &RackID)"
Saída de amostra.
$ 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 soft e hard, particularmente sobre a colocação de máquinas virtuais em máquinas bare-metal específicas.
Programação rigorosa (afinidade de máquina bare-metal)
Essa dica de posicionamento usa o Affinity
hintType para garantir que a máquina virtual seja agendada apenas na máquina bare-metal especificada com a ID de máquina bare-metal fornecida. Se a máquina bare-metal 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 máquinas bare-metal específicas por motivos de desempenho, segurança ou outros.
--placement-hints '[{"hintType":"Affinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>","schedulingExecution":"Hard","scope":"Machine"}]'
Agendamento preferencial (afinidade de 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 seja 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 antiafinidades suaves e duras, particularmente sobre como impedir que máquinas virtuais sejam colocadas em máquinas bare-metal específicas.
Programação rigorosa (anti-afinidade da máquina bare-metal)
Essa dica de posicionamento usa o hintType e Hard
o AntiAffinity
schedulingExecution para impedir que a máquina virtual seja agendada na máquina bare-metal especificada identificada pelo 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, o posicionamento da VM poderá falhar devido à aplicação estrita da regra de Hard
agendamento
--placement-hints '[{"hintType":"AntiAffinity","resourceId":"/subscriptions/<subscription>/resourceGroups/<managed-resource-group>/providers/Microsoft.NetworkCloud/bareMetalMachines/<machine-name>","schedulingExecution":"Hard","scope":"Machine"}]'
Programação preferencial (antiafinidade da máquina bare-metal)
Essa dica de posicionamento usa o hintType com a intenção de evitar uma máquina bare-metal específica para o AntiAffinity
posicionamento da máquina virtual. No entanto, é importante notar que, apesar dessa preferência, a VM ainda pode ser colocada nessa máquina bare-metal indesejada se outras máquinas bare-metal não tiverem capacidade suficiente. Esse posicionamento acontece porque o schedulingExecution é definido como Soft
, o que permite que a VM seja acomodada na máquina bare-metal inicialmente evitada se outras opções não forem 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 afinidade de VM para VM e de posicionamento antiafinidade
Obter os IDs de máquina virtual disponíveis
Defina as variáveis necessárias.
RESOURCE_GROUP=<Target VM resource group> NEXUS_CLUSTER_SUBSCRIPTION="$(az account show -o tsv --query id)"
Obtenha a ID da máquina virtual.
az networkcloud virtualmachine list -g $RESOURCE_GROUP --subscription $NEXUS_CLUSTER_SUBSCRIPTION --query [].id
Saída de amostra.
$ 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, destacando o scope
papel importante do parâmetro na configuração de dicas de posicionamento. O agendador, por meio do escopo definido, direciona os posicionamentos de VM na mesma máquina bare-metal ou no mesmo rack que o resourceId da VM referenciada. É importante observar que, embora os exemplos fornecidos aqui ilustrem a execução do agendamento, você pode usar Soft
o Hard
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 em máquina virtual sendo colocada 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 bare-metal que a VM referenciada, levando a latências inter-VM potencialmente mais baixas 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
como o tipo de dica e Rack
como o 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 da 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 (antiafinidade de VM)
Nesta seção, o tipo de dica AntiAffinity
é usado para impedir que as VMs sejam colocadas perto de determinadas outras VMs. O scope
parâmetro decide se essa separação acontece no nível da máquina ou do rack. Essa configuração é útil quando as VMs precisam ser espalhadas por diferentes hardwares para evitar falhas ou problemas de desempenho.
Impedir que máquinas virtuais sejam colocadas em uma mesma máquina bare-metal (antiafinidade de VM)
Neste exemplo, quando você define o escopo como Machine
, ele impede que as VMs sejam colocadas na mesma máquina bare-metal. Essa abordagem aumenta a tolerância a falhas, reduzindo o risco de falha de uma única máquina afetar a carga de trabalho, aumentando assim 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 (antiafinidade de VM)
Neste exemplo, definir o escopo para Rack
garantir que as VMs não sejam colocadas no 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 variedade de cenários de posicionamento, tornando-a uma solução flexível e adaptável para gerenciar o posicionamento de máquinas virtuais. Ajuste os parâmetros , schedulingExecution
e hintType
em diferentes combinações para entender como eles afetam os scope
posicionamentos de 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.