Dela via


Skapa en VM-skalningsuppsättning

Kommentar

Många av stegen i det här dokumentet gäller för vm-skalningsuppsättningar med enhetlig orkestreringsläge. Vi rekommenderar att du använder flexibel orkestrering för nya arbetsbelastningar. Mer information finns i Orchesration-lägen för VM-skalningsuppsättningar i Azure.

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 REST-API:er, Azure PowerShell eller Azure CLI.

Grundläggande koncept

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

  • REST API med compute/virtualmachinescalesets/get enligt följande:

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet?api-version={apiVersion}
    
  • Azure PowerShell med Get-AzVmss:

    Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"
    
  • Azure CLI med az vmss show:

    az vmss show --resource-group myResourceGroup --name myScaleSet
    
  • Du kan också använda resources.azure.com eller språkspecifika Azure SDK:er.

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:

az vmss show --resource-group myResourceGroup --name myScaleSet
{
  "location": "westus",
  "overprovision": true,
  "plan": null,
  "singlePlacementGroup": true,
  "sku": {
    "additionalProperties": {},
    "capacity": 1,
    "name": "Standard_D2_v2",
    "tier": "Standard"
  },
}

Dessa egenskaper gäller för skalningsuppsättningen som helhet.

Instansvyn för skalningsuppsättning

En skalningsuppsättning har också en "skalningsuppsättningsinstansvy" som avbildar det aktuella körningstillståndet för skalningsuppsättningen som helhet. Om du vill köra frågor mot instansvyn för en skalningsuppsättning kan du använda:

  • REST API med compute/virtualmachinescalesets/getinstanceview enligt följande:

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/instanceView?api-version={apiVersion}
    
  • Azure PowerShell med Get-AzVmss:

    Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceView
    
  • Azure CLI med az vmss get-instance-view:

    az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet
    
  • Du kan också använda resources.azure.com eller språkspecifika Azure SDK:er

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:

$ az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet
{
  "statuses": [
    {
      "additionalProperties": {},
      "code": "ProvisioningState/succeeded",
      "displayStatus": "Provisioning succeeded",
      "level": "Info",
      "message": null,
      "time": "{time}"
    }
  ],
  "virtualMachine": {
    "additionalProperties": {},
    "statusesSummary": [
      {
        "additionalProperties": {},
        "code": "ProvisioningState/succeeded",
        "count": 1
      }
    ]
  }
}

Dessa egenskaper ger en sammanfattning av det aktuella körningstillståndet för de virtuella datorerna i skalningsuppsättningen, till exempel statusen för tillägg som tillämpas på skalningsuppsättningen.

Vm-modellvyn för 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:

  • REST API med compute/virtualmachinescalesetvms/get enligt följande:

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/virtualmachines/instanceId?api-version={apiVersion}
    
  • Azure PowerShell med Get-AzVmssVm:

    Get-AzVmssVm -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId instanceId
    
  • Azure CLI med az vmss show:

    az vmss show --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
    
  • Du kan också använda resources.azure.com eller Azure SDK:er.

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:

$ az vmss show --resource-group myResourceGroup --name myScaleSet
{
  "location": "westus",
  "name": "{name}",
  "sku": {
    "name": "Standard_D2_v2",
    "tier": "Standard"
  },
}

De här egenskaperna beskriver konfigurationen av en virtuell datorinstans i en skalningsuppsättning, inte konfigurationen av skalningsuppsättningen som helhet. Till exempel har overprovision skalningsuppsättningsmodellen som en egenskap, medan modellen för en vm-instans i en skalningsuppsättning inte gör det. Den här skillnaden beror på att överetablering är en egenskap för skalningsuppsättningen som helhet, inte enskilda VM-instanser i skalningsuppsättningen (mer information om överetablering finns i Designöverväganden för skalningsuppsättningar).

Vm-instansvyn för skalningsuppsättning

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

  • REST API med compute/virtualmachinescalesetvms/getinstanceview enligt följande:

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/virtualmachines/instanceId/instanceView?api-version={apiVersion}
    
  • Azure PowerShell med Get-AzVmssVm:

    Get-AzVmssVm -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId instanceId -InstanceView
    
  • Azure CLI med az vmss get-instance-view

    az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
    
  • Du kan också använda resources.azure.com eller Azure SDK:er

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:

$ az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
{
  "additionalProperties": {
    "osName": "ubuntu",
    "osVersion": "16.04"
  },
  "disks": [
    {
      "name": "{name}",
      "statuses": [
        {
          "additionalProperties": {},
          "code": "ProvisioningState/succeeded",
          "displayStatus": "Provisioning succeeded",
          "time": "{time}"
        }
      ]
    }
  ],
  "statuses": [
    {
      "additionalProperties": {},
      "code": "ProvisioningState/succeeded",
      "displayStatus": "Provisioning succeeded",
      "time": "{time}"
    },
    {
      "additionalProperties": {},
      "code": "PowerState/running",
      "displayStatus": "VM running"
    }
  ],
  "vmAgent": {
    "statuses": [
      {
        "additionalProperties": {},
        "code": "ProvisioningState/succeeded",
        "displayStatus": "Ready",
        "level": "Info",
        "message": "Guest Agent is running",
        "time": "{time}"
      }
    ],
    "vmAgentVersion": "{version}"
  },
}

De här egenskaperna beskriver det aktuella körningstillståndet för en virtuell datorinstans i en skalningsuppsättning, som innehåller eventuella tillägg som tillämpas på skalningsuppsättningen.

Uppdatera egenskaper för globala skalningsuppsättningar

Om du vill uppdatera en global skalningsuppsättningsegenskap måste du uppdatera egenskapen i skalningsuppsättningsmodellen. Du kan göra den här uppdateringen via:

  • REST API med compute/virtualmachinescalesets/createorupdate på följande sätt:

    PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet?api-version={apiVersion}
    
  • Du kan distribuera en Resource Manager-mall med egenskaperna från REST-API:et för att uppdatera globala skalningsuppsättningsegenskaper.

  • Azure PowerShell med Update-AzVmss:

    Update-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -VirtualMachineScaleSet {scaleSetConfigPowershellObject}
    
  • Azure CLI med az vmss update:

    • Så här ändrar du en egenskap:

      az vmss update --set {propertyPath}={value}
      
    • Så här lägger du till ett objekt i en listegenskap i en skalningsuppsättning:

      az vmss update --add {propertyPath} {JSONObjectToAdd}
      
    • Så här tar du bort ett objekt från en listegenskap i en skalningsuppsättning:

      az vmss update --remove {propertyPath} {indexToRemove}
      
    • Om du tidigare distribuerade skalningsuppsättningen az vmss create med kommandot kan du 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.

  • Du kan också använda resources.azure.com eller Azure SDK:er.

När skalningsuppsättningsmodellen har uppdaterats gäller den nya konfigurationen för alla nya virtuella datorer som skapats i skalningsuppsättningen. Modellerna för de befintliga virtuella datorerna i skalningsuppsättningen måste dock fortfarande uppdateras med den senaste övergripande skalningsuppsättningsmodellen. I modellen för varje virtuell dator finns en boolesk egenskap som heter latestModelApplied som anger om den virtuella datorn är uppdaterad med den senaste övergripande skalningsuppsättningsmodellen (true innebär att den virtuella datorn är uppdaterad med den senaste modellen).

Egenskaper med begränsningar för ändring

Egenskaper för skapa tid

Vissa egenskaper kan bara anges när du skapar skalningsuppsättningen. Några exempel är kontotypen för hanterad os-disklagring och feldomäner.

Egenskaper som bara kan ändras baserat på det aktuella värdet

Vissa egenskaper kan ändras, med undantag beroende på aktuellt värde. Dessa egenskaper omfattar:

  • singlePlacementGroup
  • subnet
  • imageReferenceSku
  • imageReferenceOffer
  • Tillgänglighetszoner (förhandsversion)

Exempel 1

Om du vill uppdatera skalningsuppsättningen så att den använder en annan operativsystemversion måste du ange alla uppdaterade egenskaper i ett enda anrop. I det här exemplet ändrar vi från Unbuntu Server 20.04 till 22.04.

az vmss update \
--resource-group myResourceGroup \
--name myScaleSet \
--set virtualMachineProfile.storageProfile.imageReference.offer=0001-com-ubuntu-server-jammy \
--set virtualMachineProfile.storageProfile.imageReference.publisher=Canonical \
--set virtualMachineProfile.storageProfile.imageReference.sku=22_04-lts-gen2 \
--set virtualMachineProfile.storageProfile.imageReference.version=latest

Exempel 2

Om du vill uppdatera skalningsuppsättningen så att den använder en annan operativsystemversion måste du ange alla uppdaterade egenskaper i ett enda anrop. I det här exemplet byter vi från Windows Server 2016 till Windows Server 2019.

$VMSS = Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"

Set-AzVmssStorageProfile $vmss `
    -OsDiskCreateOption "FromImage" `
    -ImageReferencePublisher "MicrosoftWindowsServer" `
    -ImageReferenceOffer "WindowsServer" `
    -ImageReferenceSku "2019-datacenter" `
    -ImageReferenceVersion "latest"

Update-AzVmss -ResourceGroupName "myResourceGroup" -Name "myScaleSet" -VirtualMachineScaleSet $VMSS

Egenskaper som kräver frigöring för att ändras

Vissa egenskaper kan bara ändras till vissa värden om de virtuella datorerna i skalningsuppsättningen frigörs. Dessa egenskaper omfattar:

  • SKU-namn – Om den nya virtuella datorns SKU inte stöds på maskinvaran som skalningsuppsättningen för närvarande är på, måste du frigöra de virtuella datorerna i skalningsuppsättningen innan du ändrar SKU-namnet. Mer information finns i så här ändrar du storlek på en virtuell Azure-dator.

VM-specifika uppdateringar

Vissa ändringar kan tillämpas på specifika virtuella datorer i stället för de globala skalningsuppsättningsegenskaperna. För närvarande är den enda VM-specifika uppdatering som stöds att koppla/koppla från datadiskar till/från virtuella datorer i skalningsuppsättningen. Den här funktionen är en förhandsversion. Mer information finns i förhandsgranskningsdokumentationen.

Scenarier

Programuppdateringar

Om ett program distribueras till en skalningsuppsättning via tillägg gör en uppdatering av tilläggskonfigurationen att programmet uppdateras i enlighet med uppgraderingsprincipen. Om du till exempel har en ny version av ett skript som ska köras i ett anpassat skripttillägg kan du uppdatera egenskapen fileUris så att den pekar på det nya skriptet. I vissa fall kanske du vill framtvinga en uppdatering även om tilläggskonfigurationen är oförändrad (till exempel har du uppdaterat skriptet utan att ändra URI:n för skriptet). I dessa fall kan du ändra forceUpdateTag för att framtvinga en uppdatering. Azure-plattformen tolkar inte den här egenskapen. Om du ändrar värdet påverkas inte hur tillägget körs. En ändring tvingar helt enkelt tillägget att köras igen. Mer information om forceUpdateTag finns i REST API-dokumentationen för tillägg. Observera att forceUpdateTag kan användas med alla tillägg, inte bara det anpassade skripttillägget.

Det är också vanligt att program distribueras via en anpassad avbildning. Det här scenariot beskrivs i följande avsnitt.

OS-uppdateringar

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).

Exempel

Uppdatera OS-avbildningen för skalningsuppsättningen

Du kan ha en skalningsuppsättning som kör en gammal version av Ubuntu LTS 16.04. Du vill uppdatera till en nyare version av Ubuntu LTS 16.04, till exempel version 16.04.201801090. Egenskapen för avbildningsreferensversionen ingår inte i en lista, så du kan ändra dessa egenskaper direkt med något av följande kommandon:

  • Azure PowerShell med Update-AzVmss på följande sätt:

    Update-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -ImageReferenceVersion 16.04.201801090
    
  • Azure CLI med az vmss update:

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

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 bildreferens-ID är inte en del av en lista, så du kan ändra den här egenskapen direkt med något av följande kommandon:

  • Azure PowerShell med Update-AzVmss på följande sätt:

    Update-AzVmss `
        -ResourceGroupName "myResourceGroup" `
        -VMScaleSetName "myScaleSet" `
        -ImageReferenceId /subscriptions/{subscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/myNewImage
    
  • Azure CLI 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
    

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:

  • Azure PowerShell:

    # Get the current model of the scale set and store it in a local PowerShell object named $vmss
    $vmss=Get-AzVmss -ResourceGroupName "myResourceGroup" -Name "myScaleSet"
    
    # Create a local PowerShell object for the new desired IP configuration, which includes the reference to the application gateway
    $ipconf = New-AzVmssIPConfig -ApplicationGatewayBackendAddressPoolsId /subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/{applicationGatewayBackendAddressPoolName} -SubnetId $vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations[0].IpConfigurations[0].Subnet.Id -Name $vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations[0].IpConfigurations[0].Name
    
    # Replace the existing IP configuration in the local PowerShell object (which contains the references to the current Azure Load Balancer) with the new IP configuration
    $vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations[0].IpConfigurations[0] = $ipconf
    
    # Update the model of the scale set with the new configuration in the local PowerShell object
    Update-AzVmss -ResourceGroupName "myResourceGroup" -Name "myScaleSet" -virtualMachineScaleSet $vmss
    
  • Azure CLI:

    # 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

Du kan också utföra vanliga hanteringsuppgifter på skalningsuppsättningar med Azure CLI eller Azure PowerShell.