Trabalhando com dicas de posicionamento na máquina virtual 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 de antiafinidade garantem que as máquinas virtuais sejam hospedadas em diferentes máquinas físicas ou racks.
Você pode aumentar a resiliência geral do seu aplicativo usando regras de antiafinidade para distribuir máquinas virtuais por diferentes domínios de falha (racks, máquinas físicas, etc.). Você pode aumentar a eficiência de custos 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, certifique-se de ter concluído todas as etapas no guia de início rápido da máquina virtual Azure Operator Nexus.
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 suporta 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, 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 máquina bare-metal, rack ou instância de máquina virtual diferente do recurso referenciado.
ID do Recurso
O resourceId
argumento em 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.
- A BareMetalMachine: Se o objeto alvo 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.
Âmbito
O scope
argumento é usado em dicas de posicionamento para especificar o escopo da dica de posicionamento de afinidade de máquina virtual ou 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 que a máquina virtual especificada está atualmente colocada, o escopo será definido como Rack.
Importante
Este argumento não pode ser deixado em branco.
Agendamento da 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 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 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 afinidade de rack e posicionamento antiafinidade
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 a 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.
Nota
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 VM QuickStart.
Agendamento rigoroso (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 de 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"}]'
Nota
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 a ID de 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 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 como impedir que máquinas virtuais sejam colocadas em racks específicos.
Agendamento rigoroso (anti-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 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 Hard
regra de 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 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 de máquina bare-metal e posicionamento anti-afinidade
Obtenha os IDs de máquinas 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>" } ]
Coloque a 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 hintType para garantir que a máquina virtual seja agendada apenas na máquina bare-metal especificada com o Affinity
ID de máquina bare-metal fornecido. 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 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"}]'
Programação preferida (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 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 antiafinidades suaves e rígidas, particularmente sobre como impedir que máquinas virtuais sejam colocadas em máquinas bare-metal específicas.
Programação rigorosa (máquina bare-metal anti-afinidade)
Essa dica de posicionamento usa hintType AntiAffinity
e Hard
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 preferida (antiafinidade de máquina bare-metal)
Esta 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 nesta máquina bare-metal indesejada se outras máquinas bare-metal não tiverem capacidade suficiente. Esse posicionamento acontece porque o schedulingExecution está 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 afinidade de VM para VM e posicionamento de 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 o 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 papel importante do scope
parâmetro na configuração de dicas de posicionamento. O agendador, por meio do escopo definido, direciona os posicionamentos da VM na mesma máquina bare-metal ou dentro do mesmo rack que o resourceId da VM referenciado. É 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 no 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 pelo ID de recurso fornecido. Como resultado, a nova VM compartilha a mesma máquina bare-metal que a VM referenciada, levando a latências interVM 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 dentro do mesmo rack que a VM identificada pelo ID de recurso fornecido. Como resultado, as novas VMs são colocadas na proximidade física da 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 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 distribuídas por hardware diferente 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óximos passos
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-se uma solução flexível e adaptável para gerenciar o posicionamento de máquinas virtuais. Ajuste os parâmetros , schedulingExecution
e em hintType
diferentes combinações para entender como eles afetam os scope
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 Azure Operator Nexus.