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öraaz vmss create
kommandot igen för att uppdatera skalningsuppsättningen. Kontrollera att alla egenskaper iaz 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
- Zoner
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.
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.