Een virtuele-machineschaalset wijzigen

Notitie

Veel van de stappen in dit document zijn van toepassing op virtuele-machineschaalsets met behulp van de modus Uniform Orchestration. We raden u aan Flexibele indeling te gebruiken voor nieuwe workloads. Zie Orchesration-modi voor virtuele-machineschaalsets in Azure voor meer informatie.

Tijdens de levenscyclus van uw toepassingen moet u mogelijk uw virtuele-machineschaalset wijzigen of bijwerken. Deze updates kunnen omvatten hoe u de configuratie van de schaalset bijwerkt of de toepassingsconfiguratie wijzigt. In dit artikel wordt beschreven hoe u een bestaande schaalset wijzigt met de REST API's, Azure PowerShell of Azure CLI.

Fundamentele concepten

Het schaalsetmodel

Een schaalset heeft een 'schaalsetmodel' waarmee de gewenste status van de schaalset als geheel wordt vastgelegd. Als u een query wilt uitvoeren op het model voor een schaalset, kunt u de

  • REST API met compute/virtualmachinescalesets/get als volgt:

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

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

    az vmss show --resource-group myResourceGroup --name myScaleSet
    
  • U kunt ook resources.azure.com of de taalspecifieke Azure SDK's gebruiken.

De exacte presentatie van de uitvoer is afhankelijk van de opties die u aan de opdracht geeft. In het volgende voorbeeld ziet u verkorte voorbeelduitvoer van de 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"
  },
}

Deze eigenschappen zijn van toepassing op de schaalset als geheel.

De exemplaarweergave van de schaalset

Een schaalset heeft ook een 'exemplaarweergave van de schaalset' waarmee de huidige runtimestatus van de schaalset als geheel wordt vastgelegd. Als u een query wilt uitvoeren op de exemplaarweergave voor een schaalset, kunt u het volgende gebruiken:

De exacte presentatie van de uitvoer is afhankelijk van de opties die u aan de opdracht geeft. In het volgende voorbeeld ziet u verkorte voorbeelduitvoer van de 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
      }
    ]
  }
}

Deze eigenschappen bieden een samenvatting van de huidige runtimestatus van de VM's in de schaalset, zoals de status van extensies die zijn toegepast op de schaalset.

De vm-modelweergave van de schaalset

Net als bij hoe een schaalset een modelweergave heeft, heeft elk VM-exemplaar in de schaalset een eigen modelweergave. Als u een query wilt uitvoeren op de modelweergave voor een bepaald VM-exemplaar in een schaalset, kunt u het volgende gebruiken:

  • REST API met compute/virtualmachinescalesetvms/get als volgt:

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

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

    az vmss show --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
    
  • U kunt ook resources.azure.com of de Azure SDK's gebruiken.

De exacte presentatie van de uitvoer is afhankelijk van de opties die u aan de opdracht geeft. In het volgende voorbeeld ziet u verkorte voorbeelduitvoer van de Azure CLI:

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

Deze eigenschappen beschrijven de configuratie van een VM-exemplaar in een schaalset, niet de configuratie van de schaalset als geheel. Het schaalsetmodel heeft overprovision bijvoorbeeld als eigenschap, terwijl het model voor een VM-exemplaar in een schaalset dat niet doet. Dit verschil is dat overprovisioning een eigenschap is voor de schaalset als geheel, niet voor afzonderlijke VM-exemplaren in de schaalset (zie Ontwerpoverwegingen voor schaalsets voor meer informatie over overprovisioning).

De weergave vm-exemplaar van de schaalset

Net als bij hoe een schaalset een exemplaarweergave heeft, heeft elk VM-exemplaar in de schaalset een eigen exemplaarweergave. Als u een query wilt uitvoeren op de exemplaarweergave voor een bepaald VM-exemplaar binnen een schaalset, kunt u het volgende gebruiken:

  • REST API met compute/virtualmachinescalesetvms/getinstanceview als volgt:

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

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

    az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
    
  • U kunt ook resources.azure.com of de Azure SDK's gebruiken

De exacte presentatie van de uitvoer is afhankelijk van de opties die u aan de opdracht geeft. In het volgende voorbeeld ziet u verkorte voorbeelduitvoer van de 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}"
  },
}

Deze eigenschappen beschrijven de huidige runtimestatus van een VM-exemplaar in een schaalset, waaronder eventuele extensies die op de schaalset worden toegepast.

Eigenschappen van een globale schaalset bijwerken

Als u een globale schaalseteigenschap wilt bijwerken, moet u de eigenschap in het schaalsetmodel bijwerken. U kunt deze update uitvoeren via:

  • REST API met compute/virtualmachinescalesets/createorupdate als volgt:

    PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet?api-version={apiVersion}
    
  • U kunt een Resource Manager-sjabloon implementeren met de eigenschappen van de REST API om eigenschappen van globale schaalsets bij te werken.

  • Azure PowerShell met Update-AzVmss:

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

    • Een eigenschap wijzigen:

      az vmss update --set {propertyPath}={value}
      
    • Een object toevoegen aan een lijsteigenschap in een schaalset:

      az vmss update --add {propertyPath} {JSONObjectToAdd}
      
    • Een object verwijderen uit een lijsteigenschap in een schaalset:

      az vmss update --remove {propertyPath} {indexToRemove}
      
    • Als u de schaalset eerder hebt geïmplementeerd met de az vmss create opdracht, kunt u de az vmss create opdracht opnieuw uitvoeren om de schaalset bij te werken. Zorg ervoor dat alle eigenschappen in de az vmss create opdracht hetzelfde zijn als voorheen, met uitzondering van de eigenschappen die u wilt wijzigen.

  • U kunt ook resources.azure.com of de Azure SDK's gebruiken.

Zodra het schaalsetmodel is bijgewerkt, is de nieuwe configuratie van toepassing op nieuwe VM's die in de schaalset zijn gemaakt. De modellen voor de bestaande VM's in de schaalset moeten echter nog steeds up-to-date worden gebracht met het meest recente algemene schaalsetmodel. In het model voor elke VIRTUELE machine is een booleaanse eigenschap latestModelApplied die aangeeft of de VIRTUELE machine al dan niet up-to-date is met het meest recente algemene schaalsetmodel (true betekent dat de VM up-to-date is met het nieuwste model).

Eigenschappen met beperkingen voor wijziging

Eigenschappen voor tijd maken

Sommige eigenschappen kunnen alleen worden ingesteld wanneer u de schaalset maakt. Enkele voorbeelden hiervan zijn het type opslagaccount voor beheerde besturingssystemen en foutdomeinen.

Eigenschappen die alleen kunnen worden gewijzigd op basis van de huidige waarde

Sommige eigenschappen kunnen worden gewijzigd, met uitzonderingen, afhankelijk van de huidige waarde. Deze eigenschappen zijn onder andere:

  • singlePlacementGroup
  • subnet
  • imageReferenceSku
  • imageReferenceOffer
  • Beschikbaarheidszones (preview)

Voorbeeld 1

Als u uw schaalset wilt bijwerken voor het gebruik van een andere versie van het besturingssysteem, moet u alle bijgewerkte eigenschappen in één aanroep instellen. In dit voorbeeld veranderen we van Unbuntu Server 20.04 in 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

Voorbeeld 2

Als u uw schaalset wilt bijwerken voor het gebruik van een andere versie van het besturingssysteem, moet u alle bijgewerkte eigenschappen in één aanroep instellen. In dit voorbeeld veranderen we van Windows Server 2016 in 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

Eigenschappen waarvoor deallocatie moet worden gewijzigd

Sommige eigenschappen kunnen alleen worden gewijzigd in bepaalde waarden als de toewijzing van de VM's in de schaalset ongedaan wordt gemaakt. Deze eigenschappen zijn onder andere:

  • SKU-naam: als de nieuwe VM-SKU niet wordt ondersteund op de hardware waarop de schaalset zich momenteel bevindt, moet u de toewijzing van de VM's in de schaalset ongedaan maken voordat u de SKU-naam wijzigt. Zie voor meer informatie hoe u het formaat van een Virtuele Azure-machine wijzigt.

VM-specifieke updates

Bepaalde wijzigingen kunnen worden toegepast op specifieke VM's in plaats van de eigenschappen van de globale schaalset. Momenteel is de enige VM-specifieke update die wordt ondersteund, het koppelen/loskoppelen van gegevensschijven naar/van VM's in de schaalset. Deze functie is beschikbaar als preview-versie. Zie de preview-documentatie voor meer informatie.

Scenario's

Toepassingsupdates

Als een toepassing wordt geïmplementeerd in een schaalset via extensies, zorgt een update voor de extensieconfiguratie ervoor dat de toepassing wordt bijgewerkt in overeenstemming met het upgradebeleid. Als u bijvoorbeeld een nieuwe versie van een script hebt die moet worden uitgevoerd in een aangepaste scriptextensie, kunt u de eigenschap fileUris bijwerken zodat deze verwijst naar het nieuwe script. In sommige gevallen wilt u mogelijk een update afdwingen, ook al is de extensieconfiguratie ongewijzigd (u hebt het script bijvoorbeeld bijgewerkt zonder een wijziging in de URI van het script). In deze gevallen kunt u de forceUpdateTag wijzigen om een update af te dwingen. Deze eigenschap wordt niet geïnterpreteerd door het Azure-platform. Als u de waarde wijzigt, is er geen effect op hoe de extensie wordt uitgevoerd. Een wijziging dwingt de extensie gewoon opnieuw uit te worden uitgevoerd. Zie de REST API-documentatie voor extensies voor meer informatie over forceUpdateTag. Houd er rekening mee dat de forceUpdateTag kan worden gebruikt met alle extensies, niet alleen de aangepaste scriptextensie.

Het is ook gebruikelijk dat toepassingen worden geïmplementeerd via een aangepaste installatiekopie. Dit scenario wordt behandeld in de volgende sectie.

Updates van besturingssysteem

Als u Azure-platforminstallatiekopieën gebruikt, kunt u de installatiekopie bijwerken door de imageReference te wijzigen (zie de REST API-documentatie voor meer informatie).

Notitie

Met platforminstallatiekopieën is het gebruikelijk om 'nieuwste' op te geven voor de referentieversie van de installatiekopieën. Wanneer u vm's maakt, uitschaalt en opnieuw maakt, worden vm's gemaakt met de nieuwste beschikbare versie. Het betekent echter niet dat de installatiekopieën van het besturingssysteem na verloop van tijd automatisch worden bijgewerkt wanneer nieuwe installatiekopieën worden uitgebracht. Een afzonderlijke functie biedt automatische upgrades van het besturingssysteem. Zie de documentatie voor automatische besturingssysteemupgrades voor meer informatie.

Als u aangepaste installatiekopieën gebruikt, kunt u de installatiekopie bijwerken door de imageReference-id bij te werken (zie de REST API-documentatie voor meer informatie).

Voorbeelden

De installatiekopieën van het besturingssysteem voor uw schaalset bijwerken

Mogelijk hebt u een schaalset waarop een oude versie van Ubuntu LTS 16.04 wordt uitgevoerd. U wilt bijwerken naar een nieuwere versie van Ubuntu LTS 16.04, zoals versie 16.04.201801090. De eigenschap image reference version maakt geen deel uit van een lijst, zodat u deze eigenschappen rechtstreeks kunt wijzigen met een van de volgende opdrachten:

  • Azure PowerShell met Update-AzVmss als volgt:

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

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

U kunt ook de installatiekopieën wijzigen die door uw schaalset worden gebruikt. U kunt bijvoorbeeld een aangepaste installatiekopieën bijwerken of wijzigen die door uw schaalset worden gebruikt. U kunt de afbeelding wijzigen die door de schaalset wordt gebruikt door de eigenschap afbeeldingsreferentie-id bij te werken. De eigenschap afbeeldingsreferentie-id maakt geen deel uit van een lijst, dus u kunt deze eigenschap rechtstreeks wijzigen met een van de volgende opdrachten:

  • Azure PowerShell met Update-AzVmss als volgt:

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

De load balancer voor uw schaalset bijwerken

Stel dat u een schaalset hebt met een Azure Load Balancer en u de Azure Load Balancer wilt vervangen door een Azure-toepassing Gateway. De eigenschappen van de load balancer en Application Gateway voor een schaalset maken deel uit van een lijst, zodat u de opdrachten kunt gebruiken om lijstelementen te verwijderen of toe te voegen in plaats van de eigenschappen rechtstreeks te wijzigen:

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

Notitie

Bij deze opdrachten wordt ervan uitgegaan dat er slechts één IP-configuratie en load balancer aanwezig is in de schaalset. Als er meerdere zijn, moet u mogelijk een andere lijstindex dan 0 gebruiken.

Volgende stappen

U kunt ook algemene beheertaken uitvoeren op schaalsets met de Azure CLI of Azure PowerShell.