Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Durante todo o ciclo de vida de seus aplicativos, talvez seja necessário modificar ou atualizar seu Conjunto de Dimensionamento de Máquina Virtual. Essas atualizações podem incluir como atualizar a configuração do conjunto de escala ou alterar a configuração do aplicativo. Este artigo descreve como modificar um conjunto de escala existente usando a CLI do Azure.
Abaixo, declaramos as variáveis de ambiente que serão usadas ao longo deste documento. Um sufixo aleatório é anexado a nomes de recursos que precisam ser exclusivos para cada implantação. O REGION
está definido para WestUS2.
Configurar Grupo de Recursos
Antes de prosseguir, verifique se o grupo de recursos existe. Esta etapa cria o grupo de recursos se ele ainda não existir.
export RANDOM_SUFFIX=$(openssl rand -hex 3)
export MY_RESOURCE_GROUP_NAME="myResourceGroup$RANDOM_SUFFIX"
export REGION="WestUS2"
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
{
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx",
"location": "WestUS2",
"managedBy": null,
"name": "myResourceGroupxxx",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Criar o conjunto de escala de máquina virtual
Para garantir que os comandos de atualização e consulta subsequentes tenham um recurso válido para trabalhar, crie um Conjunto de Dimensionamento de Máquina Virtual. Nesta etapa, implantamos um conjunto de escala básica usando uma imagem válida (Ubuntu2204) e definimos a contagem de instâncias como 5 para que as atualizações específicas da instância possam ter como alvo um ID de instância existente.
export SCALE_SET_NAME="myScaleSet$RANDOM_SUFFIX"
az vmss create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $SCALE_SET_NAME \
--image Ubuntu2204 \
--upgrade-policy-mode manual \
--instance-count 5 \
--admin-username azureuser \
--generate-ssh-keys
{
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetxxx",
"location": "WestUS2",
"name": "myScaleSetxxx",
"provisioningState": "Succeeded"
}
Atualizar o modelo do conjunto de escalas
Um "conjunto de escalas" possui um "modelo de conjunto de escalas" que define o estado desejado do conjunto de escalas como um todo. Para consultar o modelo para um conjunto de escalas, você pode usar az vmss show:
az vmss show --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME
A apresentação exata da saída depende das opções fornecidas ao comando. O exemplo a seguir mostra a saída de exemplo condensada da CLI do Azure:
{
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetxxx",
"location": "WestUS2",
"name": "myScaleSetxxx",
"orchestrationMode": "Flexible",
"platformFaultDomainCount": 1,
"resourceGroup": "myResourceGroupxxx",
"sku": {
"capacity": 5,
"name": "Standard_DS1_v2",
"tier": "Standard"
},
"timeCreated": "2022-11-29T22:16:43.250912+00:00",
"type": "Microsoft.Compute/virtualMachineScaleSets",
"networkProfile": {
"networkApiVersion": "2020-11-01",
"networkInterfaceConfigurations": [
{
"deleteOption": "Delete",
"disableTcpStateTracking": false,
"dnsSettings": {
"dnsServers": []
},
"enableIpForwarding": false,
"ipConfigurations": [
{
"applicationGatewayBackendAddressPools": [],
"applicationSecurityGroups": [],
"loadBalancerBackendAddressPools": [
{
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/loadBalancers/myScaleSetLB/backendAddressPools/myScaleSetLBBEPool",
"resourceGroup": "myResourceGroupxxx"
}
],
"name": "mysca2215IPConfig",
"privateIpAddressVersion": "IPv4",
"subnet": {
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/virtualNetworks/myScaleSetVNET/subnets/myScaleSetSubnet",
"resourceGroup": "myResourceGroupxxx"
}
}
],
"name": "mysca2215Nic",
"networkSecurityGroup": {
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/networkSecurityGroups/myScaleSetNSG",
"resourceGroup": "myResourceGroupxxx"
},
"primary": true
}
]
},
"osProfile": {
"allowExtensionOperations": true,
"computerNamePrefix": "myScaleS",
"linuxConfiguration": {
"disablePasswordAuthentication": true,
"enableVmAgentPlatformUpdates": false,
"patchSettings": {
"assessmentMode": "ImageDefault",
"patchMode": "ImageDefault"
},
"provisionVmAgent": true
}
},
"storageProfile": {
"imageReference": {
"offer": "UbuntuServer",
"publisher": "Canonical",
"sku": "22_04-lts",
"version": "latest"
},
"osDisk": {
"caching": "ReadWrite",
"createOption": "FromImage",
"deleteOption": "Delete",
"diskSizeGb": 30,
"managedDisk": {
"storageAccountType": "Premium_LRS"
},
"osType": "Linux"
}
}
}
Você pode usar az vmss update para atualizar várias propriedades do seu conjunto de escalas. Por exemplo, atualizar seu tipo de licença ou a política de proteção de instância de uma VM. Observe que o valor do tipo de licença permitido é RHEL_BYOS em vez de Windows_Server.
az vmss update --name $SCALE_SET_NAME --resource-group $MY_RESOURCE_GROUP_NAME --license-type RHEL_BYOS
export INSTANCE_ID=$(az vmss list-instances \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $SCALE_SET_NAME \
--query "[0].instanceId" \
-o tsv)
az vmss update \
--name $SCALE_SET_NAME \
--resource-group $MY_RESOURCE_GROUP_NAME \
--instance-id "$INSTANCE_ID" \
--protect-from-scale-set-actions False \
--protect-from-scale-in
Além disso, se você implantou anteriormente o conjunto de escala com o az vmss create
comando, poderá executá-lo az vmss create
novamente para atualizar o conjunto de escalas. Certifique-se de que todas as propriedades no comando az vmss create
são as mesmas de antes, exceto as propriedades que queira modificar. Por exemplo, abaixo estamos aumentando a contagem de instâncias para cinco.
Importante
A partir de novembro de 2023, os conjuntos de dimensionamento de VM criados usando o PowerShell e a CLI do Azure assumirão como padrão o Modo de Orquestração Flexível se nenhum modo de orquestração for especificado. Para obter mais informações sobre essa alteração e quais ações você deve tomar, vá para Breaking Change for VMSS PowerShell/CLI Customers - Microsoft Community Hub
az vmss create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $SCALE_SET_NAME \
--orchestration-mode flexible \
--image RHELRaw8LVMGen2 \
--admin-username azureuser \
--generate-ssh-keys \
--instance-count 5 \
--os-disk-size-gb 64
Atualizando instâncias de VM individuais em um conjunto de escala
Semelhante a como um conjunto de escala tem uma exibição de modelo, cada instância de VM no conjunto de escala tem sua própria exibição de modelo. Para consultar a exibição de modelo para uma instância de VM específica em um conjunto de escala, você pode usar az vm show.
export INSTANCE_NAME=$(az vmss list-instances \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $SCALE_SET_NAME \
--query "[0].name" \
-o tsv)
az vm show --resource-group $MY_RESOURCE_GROUP_NAME --name $INSTANCE_NAME
A apresentação exata da saída depende das opções fornecidas ao comando. O exemplo a seguir mostra a saída de exemplo condensada da CLI do Azure:
{
"hardwareProfile": {
"vmSize": "Standard_DS1_v2"
},
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachines/myScaleSet_Instance1",
"location": "WestUS2",
"name": "myScaleSet_Instance1",
"networkProfile": {
"networkInterfaces": [
{
"deleteOption": "Delete",
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/networkInterfaces/mysca2215Nic-5cf164f7",
"primary": true,
"resourceGroup": "myResourceGroupxxx"
}
]
},
"osProfile": {
"allowExtensionOperations": true,
"computerName": "myScaleset_Computer1",
"linuxConfiguration": {
"disablePasswordAuthentication": true,
"enableVmAgentPlatformUpdates": false,
"patchSettings": {
"assessmentMode": "ImageDefault",
"patchMode": "ImageDefault"
},
"provisionVmAgent": true
}
},
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroupxxx",
"storageProfile": {
"dataDisks": [],
"imageReference": {
"exactVersion": "22.04.202204200",
"offer": "0001-com-ubuntu-server-jammy",
"publisher": "Canonical",
"sku": "22_04-lts",
"version": "latest"
},
"osDisk": {
"caching": "ReadWrite",
"createOption": "FromImage",
"deleteOption": "Delete",
"diskSizeGb": 30,
"managedDisk": {
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/disks/myScaleSet_Instance1_disk1_xxx",
"resourceGroup": "myResourceGroupxxx",
"storageAccountType": "Premium_LRS"
},
"name": "myScaleSet_Instance1_disk1_xxx",
"osType": "Linux"
}
},
"timeCreated": "2022-11-29T22:16:44.500895+00:00",
"type": "Microsoft.Compute/virtualMachines",
"virtualMachineScaleSet": {
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetxxx",
"resourceGroup": "myResourceGroupxxx"
}
}
Essas propriedades descrevem a configuração de uma instância de VM dentro de um conjunto de escala, não a configuração do conjunto de escala como um todo.
Você pode executar atualizações para instâncias de VM individuais em um conjunto de escala como faria com uma VM autônoma. Por exemplo, anexando um novo disco de dados à instância 1:
az vm disk attach --resource-group $MY_RESOURCE_GROUP_NAME --vm-name $INSTANCE_NAME --name disk_name1 --new
Executando az vm show novamente, agora veremos que a instância da VM tem o novo disco conectado.
{
"storageProfile": {
"dataDisks": [
{
"caching": "None",
"createOption": "Empty",
"deleteOption": "Detach",
"diskSizeGb": 1023,
"lun": 0,
"managedDisk": {
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/disks/disk_name1",
"resourceGroup": "myResourceGroupxxx",
"storageAccountType": "Premium_LRS"
},
"name": "disk_name1",
"toBeDetached": false
}
]
}
}
Adicionar uma instância ao seu conjunto de escala
Há momentos em que você pode querer adicionar uma nova VM ao seu conjunto de escala, mas deseja opções de configuração diferentes daquelas listadas no modelo de conjunto de escala. As VMs podem ser adicionadas a um conjunto de escala durante a criação usando o comando az vm create e especificando o nome do conjunto de escala ao qual você deseja que a instância seja adicionada.
export NEW_INSTANCE_NAME="myNewInstance$RANDOM_SUFFIX"
az vm create --name $NEW_INSTANCE_NAME --resource-group $MY_RESOURCE_GROUP_NAME --vmss $SCALE_SET_NAME --image RHELRaw8LVMGen2
{
"fqdns": "",
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachines/myNewInstancexxx",
"location": "WestUS2",
"macAddress": "60-45-BD-D7-13-DD",
"powerState": "VM running",
"privateIpAddress": "10.0.0.6",
"publicIpAddress": "20.172.144.96",
"resourceGroup": "myResourceGroupxxx",
"zones": ""
}
Se verificarmos nosso conjunto de escalas, veremos a nova instância adicionada.
az vm list --resource-group $MY_RESOURCE_GROUP_NAME --output table
Name ResourceGroup Location
-------------------- --------------- ----------
myNewInstancexxx myResourceGroupxxx WestUS2
myScaleSet_Instance1 myResourceGroupxxx WestUS2
myScaleSet_Instance1 myResourceGroupxxx WestUS2
Atualize as VMs up-topara a versão mais recente do modelo de conjunto de escalonamento.
Observação
Atualmente, os modos de atualização não são suportados em Conjuntos de Dimensionamento de Máquina Virtual usando o modo de orquestração flexível.
Os conjuntos de escala têm uma "política de atualização" que determina como as VMs são atualizadas up-tocom o modelo de conjunto de escala mais recente. Os três modos para a política de atualização são:
- Automático - Neste modo, o conjunto de escala não garante a ordem das VMs que estão sendo derrubadas. O conjunto de escala pode derrubar todas as VMs ao mesmo tempo.
- Rolagem - Neste modo, o conjunto de escala distribui a atualização em lotes com um tempo de pausa opcional entre lotes.
- Manual - Neste modo, quando você atualiza o modelo de conjunto de escalas, nada acontece com as VMs existentes até que uma atualização manual seja acionada.
Se o conjunto de dimensionamento estiver configurado para atualizações manuais, pode iniciar uma atualização manual usando az vmss update.
az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME
Observação
Os clusters do Service Fabric só podem usar o modo Automático , mas a atualização é tratada de forma diferente. Para obter mais informações, consulte Atualizações de aplicativos do Service Fabric.
Recriar a imagem de um conjunto de escalas
Os Conjuntos de Escala de Máquina Virtual gerarão um nome exclusivo para cada VM no conjunto de escala. A convenção de nomenclatura difere de acordo com o modo de orquestração:
- Modo de orquestração flexível: {scale-set-name}_{8-char-guid}
- Modo de orquestração uniforme: {scale-set-name}_{instance-id}
Nos casos em que você precisa recriar uma imagem de uma instância específica, use az vmss reimage e especifique o id da instância. Outra opção é usar az vm redeploy para recriar a imagem da VM diretamente. Esse comando é útil se você quiser criar uma nova imagem de uma VM sem precisar especificar o ID da instância.
# Get the VM name first
VM_NAME=$(az vmss list-instances \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $SCALE_SET_NAME \
--query "[0].name" \
-o tsv)
# Reimage the VM directly
az vm redeploy \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $VM_NAME
Atualizar a imagem do SO para o seu conjunto de escalas
Você pode ter um conjunto de escala que executa uma versão antiga do Ubuntu. Você deseja atualizar para uma versão mais recente do Ubuntu, como a versão mais recente. A propriedade da versão de referência da imagem não faz parte de uma lista, pelo que pode modificar diretamente estas propriedades utilizando az vmss update.
az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --set virtualMachineProfile.storageProfile.imageReference.version=latest
Como alternativa, você pode querer alterar a imagem que seu conjunto de escala usa. Por exemplo, talvez você queira atualizar ou alterar uma imagem personalizada usada pelo seu conjunto de escalas. Você pode alterar a imagem usada pelo conjunto de escalas atualizando a propriedade ID de referência da imagem. A propriedade ID de referência de imagem não faz parte de uma lista, portanto, você pode modificar diretamente essa propriedade usando az vmss update.
Se utilizar imagens da plataforma Azure, pode atualizar a imagem modificando o imageReference (para mais informações, consulte a documentação da API REST).
Observação
Com imagens de plataforma, é comum especificar "mais recente" para a versão de referência da imagem. Quando você cria, dimensiona e recria imagens, as VMs são criadas com a versão mais recente disponível. No entanto, isso não significa que a imagem do sistema operativo é atualizada automaticamente conforme novas versões de imagem são lançadas. Um recurso separado fornece atualizações automáticas do sistema operacional. Para obter mais informações, consulte a documentação Atualizações automáticas do sistema operacional.
Se utilizar imagens personalizadas, pode atualizá-las atualizando o ID de imageReference (para obter mais informações, consulte a documentação da API REST).
Atualizar o balanceador de carga para seu conjunto de escalas
Digamos que tenha um conjunto de dimensionamento com um Balanceador de Carga do Azure e pretenda substituir o Balanceador de Carga do Azure por um Gateway de Aplicações do Azure. O balanceador de carga e as propriedades do Application Gateway para um conjunto de escala fazem parte de uma lista, portanto, você pode usar os comandos para remover ou adicionar elementos de lista em vez de modificar as propriedades diretamente.
# Remove the load balancer backend pool from the scale set model
az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --remove virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].loadBalancerBackendAddressPools 0
# Remove the load balancer backend pool from the scale set model; only necessary if you have NAT pools configured on the scale set
az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --remove virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].loadBalancerInboundNatPools 0
# Add the application gateway backend pool to the scale set model
az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --add virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].ApplicationGatewayBackendAddressPools '{"id": "/subscriptions/xxxxx/resourceGroups/'$MY_RESOURCE_GROUP_NAME'/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/{applicationGatewayBackendPoolName}"}'
Observação
Esses comandos pressupõem que haja apenas uma configuração IP e balanceador de carga no conjunto de escala. Se houver vários, talvez seja necessário usar um índice diferente de 0.
Próximos passos
Neste tutorial, você aprendeu como modificar vários aspetos do seu conjunto de escala e instâncias individuais.
- Atualizar o modelo do conjunto de escalas
- Atualizar uma instância de VM individual em um conjunto de escala
- Adicionar uma instância ao seu conjunto de escala
- Atualize as VMs up-topara a versão mais recente do modelo de conjunto de escalonamento.
- Recriar a imagem de um conjunto de escalas
- Atualizar a imagem do SO para o seu conjunto de escalas
- Atualizar o balanceador de carga para seu conjunto de escalas