Självstudie: Ändra en VM-skalningsuppsättning med Hjälp av Azure CLI

Under hela livscykeln för dina program kan du behöva ändra eller uppdatera vm-skalningsuppsättningen. Dessa uppdateringar kan omfatta hur du uppdaterar konfigurationen av skalningsuppsättningen eller ändrar programkonfigurationen. I den här artikeln beskrivs hur du ändrar en befintlig skalningsuppsättning med hjälp av Azure CLI.

Uppdatera skalningsuppsättningsmodellen

En skalningsuppsättning har en "skalningsuppsättningsmodell" som fångar upp det önskade tillståndet för skalningsuppsättningen som helhet. Om du vill fråga modellen efter en skalningsuppsättning kan du använda az vmss show:

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

Den exakta presentationen av utdata beror på vilka alternativ du anger för kommandot. I följande exempel visas komprimerade exempelutdata från Azure CLI:

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

Du kan använda az vmss update för att uppdatera olika egenskaper för din skalningsuppsättning. Du kan till exempel uppdatera din licenstyp eller en instansskyddsprincip för virtuella datorer.

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

Om du tidigare distribuerade skalningsuppsättningen az vmss create med kommandot kan du dessutom köra az vmss create kommandot igen för att uppdatera skalningsuppsättningen. Kontrollera att alla egenskaper i az vmss create kommandot är desamma som tidigare, förutom de egenskaper som du vill ändra. Nedan ökar vi till exempel antalet instanser till fem.

Viktigt!

Från och med november 2023 kommer VM-skalningsuppsättningar som skapats med PowerShell och Azure CLI som standard att vara flexibla orkestreringsläge om inget orkestreringsläge har angetts. Mer information om den här ändringen och vilka åtgärder du bör vidta finns i Icke-bakåtkompatibla ändringar för VMSS PowerShell/CLI-kunder – 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

Uppdatera enskilda VM-instanser i en skalningsuppsättning

På samma sätt som en skalningsuppsättning har en modellvy har varje VM-instans i skalningsuppsättningen en egen modellvy. Om du vill köra frågor mot modellvyn för en viss VM-instans i en skalningsuppsättning kan du använda az vm show.

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

Den exakta presentationen av utdata beror på vilka alternativ du anger för kommandot. I följande exempel visas komprimerade exempelutdata från Azure CLI:

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

De här egenskaperna beskriver konfigurationen av en virtuell datorinstans i en skalningsuppsättning, inte konfigurationen av skalningsuppsättningen som helhet.

Du kan utföra uppdateringar av enskilda VM-instanser i en skalningsuppsättning på samma sätt som en fristående virtuell dator. Du kan till exempel koppla en ny datadisk till instans 1:

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

När du kör az vm show igen ser vi nu att den virtuella datorinstansen har den nya disken ansluten.

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

Lägga till en instans i din skalningsuppsättning

Det finns tillfällen då du kanske vill lägga till en ny virtuell dator i skalningsuppsättningen men vill ha andra konfigurationsalternativ än vad som sedan anges i skalningsuppsättningsmodellen. Virtuella datorer kan läggas till i en skalningsuppsättning när du skapar med kommandot az vm create och ange det skalningsuppsättningsnamn som du vill att instansen ska läggas till i.

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": ""

Om vi sedan kontrollerar vår skalningsuppsättning ser vi att den nya instansen har lagts till.

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

Bring VMs up-to-date med den senaste skalningsuppsättningsmodellen

Kommentar

Uppgraderingslägen stöds för närvarande inte i vm-skalningsuppsättningar med flexibelt orkestreringsläge.

Skalningsuppsättningar har en "uppgraderingsprincip" som avgör hur virtuella datorer är uppdaterade med den senaste skalningsuppsättningsmodellen. De tre lägena för uppgraderingsprincipen är:

  • Automatisk – I det här läget ger skalningsuppsättningen inga garantier för ordningen på virtuella datorer som tas bort. Skalningsuppsättningen kan ta bort alla virtuella datorer samtidigt.
  • Rullande – I det här läget distribuerar skalningsuppsättningen uppdateringen i batchar med en valfri paustid mellan batchar.
  • Manuell – När du uppdaterar skalningsuppsättningsmodellen i det här läget händer ingenting med befintliga virtuella datorer förrän en manuell uppdatering utlöses.

Om skalningsuppsättningen är inställd på manuella uppgraderingar kan du utlösa en manuell uppgradering med az vmss update.

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

Kommentar

Service Fabric-kluster kan bara använda automatiskt läge, men uppdateringen hanteras på olika sätt. Mer information finns i Service Fabric-programuppgraderingar.

Återskapa en skalningsuppsättning

Vm-skalningsuppsättningar genererar ett unikt namn för varje virtuell dator i skalningsuppsättningen. Namngivningskonventionen skiljer sig åt beroende på orkestreringsläge:

  • Flexibelt orkestreringsläge: {scale-set-name}_{8-char-guid}
  • Enhetligt orkestreringsläge: {scale-set-name}_{instance-id}

I de fall där du behöver återskapa en specifik instans använder du az vmss reimage och anger instansnamnen.

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

Uppdatera OS-avbildningen för skalningsuppsättningen

Du kan ha en skalningsuppsättning som kör en gammal version av Ubuntu. Du vill uppdatera till en nyare version av Ubuntu, till exempel version 22.04.202204200. Egenskapen för avbildningsreferensversion är inte en del av en lista, så du kan ändra dessa egenskaper direkt med az vmss update.

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

Du kan också ändra den bild som skalningsuppsättningen använder. Du kanske till exempel vill uppdatera eller ändra en anpassad avbildning som används av skalningsuppsättningen. Du kan ändra den avbildning som skalningsuppsättningen använder genom att uppdatera egenskapen för bildreferens-ID. Egenskapen för avbildningsreferens-ID är inte en del av en lista, så du kan ändra den här egenskapen direkt med 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

Om du använder Azure-plattformsavbildningar kan du uppdatera avbildningen genom att ändra imageReference (mer information finns i REST API-dokumentationen).

Kommentar

Med plattformsbilder är det vanligt att ange "senaste" för avbildningsreferensversionen. När du skapar, skalar ut och återskapar skapas virtuella datorer med den senaste tillgängliga versionen. Det innebär dock inte att OS-avbildningen uppdateras automatiskt med tiden när nya avbildningsversioner släpps. En separat funktion ger automatiska OS-uppgraderingar. Mer information finns i dokumentationen om automatiska os-uppgraderingar.

Om du använder anpassade avbildningar kan du uppdatera avbildningen genom att uppdatera imageReference-ID:t (mer information finns i REST API-dokumentationen).

Uppdatera lastbalanseraren för din skalningsuppsättning

Anta att du har en skalningsuppsättning med en Azure Load Balancer och att du vill ersätta Azure Load Balancer med en Azure Application Gateway. Egenskaperna lastbalanserare och Application Gateway för en skalningsuppsättning ingår i en lista, så du kan använda kommandona för att ta bort eller lägga till listelement i stället för att ändra egenskaperna direkt.

# 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}"}'

Kommentar

Dessa kommandon förutsätter att det bara finns en IP-konfiguration och lastbalanserare på skalningsuppsättningen. Om det finns flera kan du behöva använda ett annat listindex än 0.

Nästa steg

I den här självstudien har du lärt dig hur du ändrar olika aspekter av din skalningsuppsättning och enskilda instanser.

  • Uppdatera skalningsuppsättningsmodellen
  • Uppdatera en enskild VM-instans i en skalningsuppsättning
  • Lägga till en instans i din skalningsuppsättning
  • Bring VMs up-to-date med den senaste skalningsuppsättningsmodellen
  • Återskapa en skalningsuppsättning
  • Uppdatera OS-avbildningen för skalningsuppsättningen
  • Uppdatera lastbalanseraren för din skalningsuppsättning