Dela via


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 din Virtual Machine Scale Set. 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.

Nedan deklarerar vi miljövariabler som ska användas i hela det här dokumentet. Ett slumpmässigt suffix läggs till i resursnamn som måste vara unika för varje distribution. REGION är inställt på WestUS2.

Konfigurera resursgrupp

Kontrollera att resursgruppen finns innan du fortsätter. Det här steget skapar resursgruppen om den inte redan finns.

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

Skapa uppsättningen för virtuell maskinskalning

Skapa en vm-skalningsuppsättning för att säkerställa att efterföljande uppdaterings- och frågekommandon har en giltig resurs att arbeta med. I det här steget distribuerar vi en grundläggande skalningsuppsättning med en giltig avbildning (Ubuntu204) och anger antalet instanser till 5 så att instansspecifika uppdateringar kan rikta in sig på ett befintligt instans-ID.

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

Uppdatera skalningsuppsättningsmodellen

En skaluppsättning har en "skaluppsättningsmodell" som återger det önskade tillståndet för skaluppsättningen som helhet. För att hämta information om en skalningsuppsättning från modellen kan du använda az vmss show:

az vmss show --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME

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/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"
    }
  }
}

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 virtuell dators instansskyddsprincip. Observera att värdet för den tillåtna licenstypen är RHEL_BYOS i stället för 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

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 använda flexibelt 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 Brytande ändring för VMSS PowerShell/CLI-kunder – 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

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.

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

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/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"
  }
}

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 $MY_RESOURCE_GROUP_NAME --vm-name $INSTANCE_NAME --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/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/disks/disk_name1",
          "resourceGroup": "myResourceGroupxxx",
          "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 de som 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.

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

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

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

Uppdatera VMs up-tomed den senaste modellen för skalningsuppsättningar

Anmärkning

Uppgraderingslägen stöds för närvarande inte på virtuella maskinskalningsuppsättningar som använder flexibelt orkestreringsläge.

Skalningsuppsättningar har en "uppgraderingsprincip" som avgör hur virtuella datorer tas med up-to-date 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 $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME

Anmärkning

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 instans-ID. Ett annat alternativ är att använda az vm redeploy för att återskapa den virtuella datorn direkt. Det här kommandot är användbart om du vill återskapa en virtuell dator utan att behöva ange instans-ID:t.

# 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

Uppdatera OS-avbildningen för din skalgrupp

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 den senaste versionen. 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 $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --set virtualMachineProfile.storageProfile.imageReference.version=latest

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 dina skalningsuppsättningar. Du kan ändra den avbild som skalningsuppsättningen använder genom att uppdatera bildens referens-ID-egenskap. 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.

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

Anmärkning

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. För mer information, se dokumentationen om automatiska operativsystemsuppgraderingar.

Om du använder egendesignade bilder kan du uppdatera bilden genom att ändra imageReference-ID (mer information finns i REST API-dokumentationen).

Uppdatera lastbalanseraren för din skalsats

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

Anmärkning

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
  • Uppdatera VMs up-tomed den senaste modellen för skalningsuppsättningar
  • Återskapa en skalningsuppsättning
  • Uppdatera OS-avbildningen för din skalgrupp
  • Uppdatera lastbalanseraren för din skalsats