Share via


Esercitazione: Modificare un set di scalabilità di macchine virtuali Linux tramite l'interfaccia della riga di comando di Azure

Per tutto il ciclo di vita delle applicazioni, potrebbe essere necessario modificare o aggiornare il set di scalabilità di macchine virtuali. Questi aggiornamenti possono includere come aggiornare la configurazione del set di scalabilità o modificare la configurazione dell'applicazione. Questo articolo descrive come modificare un set di scalabilità esistente tramite l'interfaccia della riga di comando di Azure.

Aggiornare il modello del set di scalabilità

Un set di scalabilità ha un "modello" che acquisisce lo stato desiderato del set di scalabilità nel suo insieme. Per eseguire query sul modello per un set di scalabilità, è possibile usare az vmss show:

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

La presentazione esatta dell'output dipende dalle opzioni fornite al comando. L'esempio seguente illustra l'output di esempio condensato dall'interfaccia della riga di comando di 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",
      }
    },
  },
}

È possibile usare az vmss update per aggiornare varie proprietà del set di scalabilità. Ad esempio, aggiornare il tipo di licenza o un criterio di protezione dell'istanza delle macchine virtuali.

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

Inoltre, se in precedenza si è distribuito il set di scalabilità con il comando az vmss create, è possibile eseguire di nuovo il comando az vmss create per aggiornare il set di scalabilità. Verificare che tutte le proprietà nel comando az vmss create siano rimaste invariate, a eccezione di quelle che si vuole modificare. Ad esempio, di seguito viene aumentato il numero di istanze a cinque.

Importante

A partire da novembre 2023, i set di scalabilità di macchine virtuali creati con PowerShell e l'interfaccia della riga di comando di Azure avranno per impostazione predefinita la modalità di orchestrazione flessibile se non è specificata alcuna modalità di orchestrazione. Per altre informazioni su questa modifica e sulle azioni da eseguire, vedere Modifica che causa un'interruzione per i clienti di PowerShell/CLI di VMSS - Hub della community Microsoft

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --orchestration-mode flexible \
  --image RHELRaw8LVMGen2 \
  --admin-username azureuser \
  --generate-ssh-keys \
  --instance-count 5

Aggiornamento di singole istanze di macchine virtuali in un set di scalabilità

Come un set di scalabilità ha una visualizzazione modello, così anche ogni istanza di macchina virtuale nel set di scalabilità ha una propria visualizzazione modello. Per eseguire query sulla visualizzazione modello per un'istanza di macchina virtuale specifica in un set di scalabilità è possibile usare az vm show.

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

La presentazione esatta dell'output dipende dalle opzioni fornite al comando. L'esempio seguente illustra l'output di esempio condensato dall'interfaccia della riga di comando di 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"
  },
}

Queste proprietà descrivono la configurazione di un'istanza della macchina virtuale all'interno di un set di scalabilità e non quella del set di scalabilità nel suo insieme.

È possibile eseguire aggiornamenti alle singole istanze di macchina virtuale in un set di scalabilità esattamente come si farebbe con una macchina virtuale autonoma. Ad esempio, collegare un nuovo disco dati all'istanza 1:

az vm disk attach --resource-group myResourceGroup --vm-name myScaleSet_Instance1 --name disk_name1 --new

Eseguendo az vm show, si noterà ora che l'istanza della macchina virtuale ha il nuovo disco collegato.

  "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,
      }
    ],

Aggiungere un'istanza al set di scalabilità

In alcuni casi potrebbe essere necessario aggiungere una nuova macchina virtuale al set di scalabilità, ma si desiderano opzioni di configurazione diverse rispetto a quelle elencate nel modello del set di scalabilità. Le macchine virtuali possono essere aggiunte a un set di scalabilità durante la creazione usando il comando az vm create e specificando il nome del set di scalabilità a cui si vuole aggiungere l'istanza.

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 quindi si controlla il set di scalabilità, verrà aggiunta la nuova istanza.

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

Aggiornare le macchine virtuali con il più recente modello del set di scalabilità

Nota

Le modalità di aggiornamento non sono attualmente supportate nei set di scalabilità di macchine virtuali usando la modalità di orchestrazione flessibile.

I set di scalabilità hanno un "criterio di aggiornamento" che determina il modo in cui le macchine virtuali vengono aggiornate con l'ultima versione del modello del set di scalabilità. Le tre modalità del criterio di aggiornamento sono:

  • Automatico: in questa modalità il set di scalabilità non offre alcuna garanzia sull'ordine in cui le macchine virtuali vengono arrestate. Potrebbe arrestarle tutte contemporaneamente.
  • In sequenza: in questa modalità il set di scalabilità implementa l'aggiornamento in batch con una pausa facoltativa fra i singoli batch.
  • Manuale: in questa modalità, quando si aggiorna il modello del set di scalabilità, le macchine virtuali esistenti rimangono invariate finché non viene attivato un aggiornamento manuale.

Se il set di scalabilità è impostato su aggiornamenti manuali, è possibile attivare un aggiornamento manuale usando az vmss update.

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

Nota

I cluster di Service Fabric possono usare solo la modalità automatica, ma l'aggiornamento viene gestito in modo diverso. Per altre informazioni, vedere Aggiornamenti delle applicazioni di Service Fabric.

Ricreare l'immagine di un set di scalabilità

I set di scalabilità di macchine virtuali genereranno un nome univoco per ogni macchina virtuale nel set di scalabilità. La convenzione di denominazione differisce in base alla modalità di orchestrazione:

  • Modalità di orchestrazione flessibile: {scale-set-name}_{8-char-guid}
  • Modalità di orchestrazione uniforme: {scale-set-name}_{instance-id}

Nei casi in cui è necessario creare nuovamente l'immagine di un'istanza specifica, usare az vmss reimage e specificare i nomi delle istanze.

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

Aggiornare l'immagine del sistema operativo per il set di scalabilità

Si può avere un set di scalabilità che esegue una versione precedente di Ubuntu. Si vuole eseguire l'aggiornamento a una versione più recente di Ubuntu, ad esempio la versione 22.04.202204200. La proprietà della versione di riferimento dell'immagine non fa parte di un elenco, pertanto è possibile modificare direttamente queste proprietà usando az vmss update.

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

In alternativa è possibile modificare l'immagine usata dal set di scalabilità. Ad esempio è possibile aggiornare o modificare un'immagine personalizzata usata dal set di scalabilità. È possibile modificare l'immagine usata dal set di scalabilità aggiornando la proprietà dell'ID di riferimento all'immagine. La proprietà ID riferimento immagine non fa parte di un elenco, pertanto è possibile modificare direttamente questa proprietà 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 si usano immagini della piattaforma di Azure, è possibile aggiornare l'immagine modificando la proprietà imageReference. Per altre informazioni, vedere la documentazione relativa all'API REST.

Nota

Con le immagini della piattaforma si specifica solitamente "latest" come versione del riferimento all'immagine. Quando si crea, si aumenta il numero di istanze e si ricrea l'immagine, le macchine virtuali vengono create con l'ultima versione disponibile. Non significa però che l'immagine del sistema operativo viene aggiornata automaticamente nel tempo man mano che vengono rilasciate nuove versioni dell'immagine. Una funzionalità separata fornisce aggiornamenti automatici del sistema operativo. Per altre informazioni, consultare la documentazione relativa agli aggiornamenti automatici del sistema operativo.

Se si usano immagini personalizzate, è possibile aggiornare l'immagine aggiornando l'ID della proprietà imageReference. Per altre informazioni, vedere la documentazione relativa all'API REST.

Aggiornare il bilanciamento del carico del set di scalabilità

Supponiamo di avere un set di scalabilità con un servizio Azure Load Balancer e di voler sostituire tale servizio con un gateway applicazione di Azure. Le proprietà del servizio di bilanciamento del carico e del gateway applicazione di un set di scalabilità fanno parte di un elenco, quindi è possibile usare i comandi per rimuovere o aggiungere elementi di elenco invece di modificare le proprietà direttamente.

# 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

Questi comandi presuppongono che nel set di scalabilità siano presenti una sola configurazione IP e un solo servizio di bilanciamento del carico. Se ce ne sono di più, potrebbe essere necessario usare un indice di elenco diverso da 0.

Passaggi successivi

In questa esercitazione si è appreso come modificare vari aspetti del set di scalabilità e delle singole istanze.

  • Aggiornare il modello del set di scalabilità
  • Aggiornare una singola istanza di macchina virtuale in un set di scalabilità
  • Aggiungere un'istanza al set di scalabilità
  • Aggiornare le macchine virtuali con il più recente modello del set di scalabilità
  • Ricreare l'immagine di un set di scalabilità
  • Aggiornare l'immagine del sistema operativo per il set di scalabilità
  • Aggiornare il bilanciamento del carico del set di scalabilità