Partilhar via


Tutorial: Modificar um conjunto de escala de máquina virtual usando a CLI do Azure

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.

Atualizar o modelo do conjunto de escalas

Um conjunto de escalas tem um "modelo de conjunto de escalas" que captura 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 myResourceGroup --name myScaleSet

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/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet",
  "location": "eastus",
  "name": "myScaleSet",
  "orchestrationMode": "Flexible",
  "platformFaultDomainCount": 1,
  "resourceGroup": "myResourceGroup",
  "sku": {
    "capacity": 2,
    "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/resourceGroups/myResourceGroup/providers/Microsoft.Network/loadBalancers/myScaleSetLB/backendAddressPools/myScaleSetLBBEPool",
                  "resourceGroup": "myResourceGroup"
                }
              ],
              "name": "mysca2215IPConfig",
              "privateIpAddressVersion": "IPv4",
              "subnet": {
                "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myScaleSetVNET/subnets/myScaleSetSubnet",
                "resourceGroup": "myResourceGroup"
              }
            }
          ],
          "name": "mysca2215Nic",
          "networkSecurityGroup": {
            "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myScaleSetNSG",
            "resourceGroup": "myResourceGroup"
          },
          "primary": true
        }
      ]
    },
    "osProfile": {
      "allowExtensionOperations": true,
      "computerNamePrefix": "myScaleS",
      "linuxConfiguration": {
        "disablePasswordAuthentication": true,
        "enableVmAgentPlatformUpdates": false,
        "patchSettings": {
          "assessmentMode": "ImageDefault",
          "patchMode": "ImageDefault"
        },
        "provisionVmAgent": true,
      },
    },
    "storageProfile": {
      "imageReference": {
        "offer": "0001-com-ubuntu-server-jammy",
        "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, atualizando seu tipo de licença ou uma política de proteção de instância de VMs.

az vmss update --name MyScaleSet --resource-group MyResourceGroup --license-type windows_server
az vmss update --name MyScaleSet --resource-group MyResourceGroup --instance-id 4 --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 az vmss create propriedades no comando são as mesmas de antes, exceto as propriedades que você deseja 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 myResourceGroup \
  --name myScaleSet \
  --orchestration-mode flexible \
  --image RHELRaw8LVMGen2 \
  --admin-username azureuser \
  --generate-ssh-keys \
  --instance-count 5

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.

az vm show --resource-group myResourceGroup --name myScaleSet_Instanace1

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/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myScaleSet_Instance1",
  "location": "eastus",
  "name": "myScaleSet_Instance1",
  "networkProfile": {
    "networkInterfaces": [
      {
        "deleteOption": "Delete",
        "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/mysca2215Nic-5cf164f7",
        "primary": true,
        "resourceGroup": "myResourceGroup"
      }
    ]
  },
  "osProfile": {
    "allowExtensionOperations": true,
    "computerName": "myScaleset_Computer1",
    "linuxConfiguration": {
      "disablePasswordAuthentication": true,
      "enableVmAgentPlatformUpdates": false,
      "patchSettings": {
        "assessmentMode": "ImageDefault",
        "patchMode": "ImageDefault"
      },
      "provisionVmAgent": true,
    },
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "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/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/myScaleSet_Instance1_disk1_e1a6c46a6b5f44d695fc9e38727267c2",
        "resourceGroup": "myResourceGroup",
        "storageAccountType": "Premium_LRS"
      },
      "name": "myScaleSet_Instance1_disk1_e1a6c46a6b5f44d695fc9e38727267c2",
      "osType": "Linux",
    }
  },
  "timeCreated": "2022-11-29T22:16:44.500895+00:00",
  "type": "Microsoft.Compute/virtualMachines",
  "virtualMachineScaleSet": {
    "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet",
    "resourceGroup": "myResourceGroup"
  },
}

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 myResourceGroup --vm-name myScaleSet_Instance1 --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/49d84582-7207-4a4f-824e-044e83c71887/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/disk_name1",
          "resourceGroup": "myResourceGroup",
          "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 das 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.

az vm create --name myNewInstance --resource-group myResourceGroup --vmss myScaleSet --image RHELRaw8LVMGen2
{
  "fqdns": "",
  "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myNewInstance",
  "location": "eastus",
  "macAddress": "60-45-BD-D7-13-DD",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.6",
  "publicIpAddress": "20.172.144.96",
  "resourceGroup": "myResourceGroup",
  "zones": ""

Se verificarmos nosso conjunto de escalas, veremos a nova instância adicionada.

az vm list --resource-group myResourceGroup --output table
Name                 ResourceGroup    Location
-------------------  ---------------  ----------
myNewInstance         myResourceGroup  eastus
myScaleSet_Instance1  myResourceGroup  eastus
myScaleSet_Instance1  myResourceGroup  eastus

Atualize as VMs com o modelo de conjunto de escala mais recente

Nota

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 com 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 definido como atualizações manuais, você poderá acionar uma atualização manual usando az vmss update.

az vmss update --resource-group myResourceGroup --name myScaleSet

Nota

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 criar uma nova imagem de uma instância específica, use az vmss reimage e especifique os nomes das instâncias.

az vmss reimage --resource-group myResourceGroup --name myScaleSet --instance-id myScaleSet_Instance1

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 22.04.202204200. A propriedade image reference version não faz parte de uma lista, portanto, você pode modificar diretamente essas propriedades usando az vmss update.

az vmss update --resource-group myResourceGroup --name myScaleSet --set virtualMachineProfile.storageProfile.imageReference.version=22.04.202204200

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.

az vmss update \
--resource-group myResourceGroup \
--name myScaleSet \
--set virtualMachineProfile.storageProfile.imageReference.id=/subscriptions/{subscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/myNewImage

Se você usar imagens da plataforma Azure, poderá atualizar a imagem modificando o imageReference (mais informações, consulte a documentação da API REST).

Nota

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 operacional é atualizada automaticamente ao longo do tempo à medida que 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 você usar imagens personalizadas, poderá atualizá-la atualizando o ID 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 você tenha um conjunto de escala com um Balanceador de Carga do Azure e queira substituir o Balanceador de Carga do Azure por um Gateway de Aplicativo 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 myResourceGroup --name myScaleSet --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 myResourceGroup --name myScaleSet --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 myResourceGroup --name myScaleSet --add virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].ApplicationGatewayBackendAddressPools '{"id": "/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/{applicationGatewayBackendPoolName}"}'

Nota

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 de lista 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 com o modelo de conjunto de escala mais recente
  • 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