Ändern einer VM-Skalierungsgruppe

Hinweis

Viele der in diesem Dokument aufgeführten Schritte gelten für Virtual Machine Scale Sets mit dem Orchestrierungsmodus „Einheitlich“. Für neue Workloads empfehlen wir den Modus „Flexible Orchestrierung“. Weitere Informationen finden Sie unter Orchestrierungsmodi für VM-Skalierungsgruppen in Azure.

Während des Lebenszyklus von Anwendungen müssen Sie möglicherweise Ihre VM-Skalierungsgruppe ändern oder aktualisieren. Zu diesen Aktualisierungen können das Aktualisieren der Konfiguration der Skalierungsgruppe oder das Ändern der Anwendungskonfiguration zählen. Dieser Artikel beschreibt die Vorgehensweise zum Ändern einer vorhandenen Skalierungsgruppe mit den REST-APIs, Azure PowerShell oder der Azure CLI.

Grundlegende Konzepte

Skalierungsgruppenmodell

Eine Skalierungsgruppe enthält ein Skalierungsgruppenmodell, das den gewünschten Zustand der gesamten Skalierungsgruppe erfasst. Zum Abfragen des Modells für eine Skalierungsgruppe können Sie Folgendes verwenden:

  • REST-API mit compute/virtualmachinescalesets/get wie folgt:

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

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

    az vmss show --resource-group myResourceGroup --name myScaleSet
    
  • Sie können auch resources.azure.com oder die sprachspezifischen Azure-SDKs verwenden.

Die genaue Darstellung der Ausgabe hängt von den für den Befehl angegebenen Optionen ab. Das folgende Beispiel zeigt eine verkürzte Beispielausgabe von der 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"
  },
}

Diese Eigenschaften gelten für die gesamte Skalierungsgruppe.

Instanzenansicht für die Skalierungsgruppe

Eine Skalierungsgruppe verfügt außerdem über eine Skalierungsgruppen-Instanzenansicht, die den aktuellen Laufzeitstatus der gesamten Skalierungsgruppe erfasst. Zum Abfragen der Instanzenansicht für eine Skalierungsgruppe können Sie Folgendes verwenden:

  • REST-API mit compute/virtualmachinescalesets/getinstanceview wie folgt:

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

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

    az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet
    
  • Sie können auch resources.azure.com oder die sprachspezifischen Azure-SDKs verwenden.

Die genaue Darstellung der Ausgabe hängt von den für den Befehl angegebenen Optionen ab. Das folgende Beispiel zeigt eine verkürzte Beispielausgabe von der 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
      }
    ]
  }
}

Diese Eigenschaften bieten eine Übersicht über den aktuellen Laufzeitstatus der virtuellen Computer in der Skalierungsgruppe, etwa den Status der auf die Skalierungsgruppe angewendeten Erweiterungen.

VM-Modellansicht der Skalierungsgruppe

Nicht nur die Skalierungsgruppe verfügt über eine Modellansicht, sondern auch jede in der Skalierungsgruppe enthaltene VM-Instanz. Zum Abfragen der Modellansicht für eine bestimmte VM-Instanz in einer Skalierungsgruppe können Sie Folgendes verwenden:

  • REST-API mit compute/virtualmachinescalesetvms/get wie folgt:

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

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

    az vmss show --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
    
  • Sie können auch resources.azure.com oder die Azure-SDKs verwenden.

Die genaue Darstellung der Ausgabe hängt von den für den Befehl angegebenen Optionen ab. Das folgende Beispiel zeigt eine verkürzte Beispielausgabe von der Azure CLI:

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

Diese Eigenschaften beschreiben die Konfiguration einer VM-Instanz in einer Skalierungsgruppe, nicht die Konfiguration der Skalierungsgruppe als Ganzes. Beispielsweise weist das Skalierungsgruppenmodell die Eigenschaft overprovision auf, das Modell für eine VM-Instanz in einer Skalierungsgruppe besitzt diese Eigenschaft jedoch nicht. Dieser Unterschied ist darauf zurückzuführen, dass die Überbereitstellung eine Eigenschaft für die Skalierungsgruppe als Ganzes und nicht für einzelne VM-Instanzen in der Skalierungsgruppe ist. (Weitere Informationen zur Überbereitstellung finden Sie unter Überlegungen zum Entwurf von Skalierungsgruppen.)

VM-Instanzenansicht für die Skalierungsgruppe

Nicht nur die Skalierungsgruppe verfügt über eine Instanzenansicht, sondern auch jede in der Skalierungsgruppe enthaltene VM-Instanz. Zum Abfragen der Instanzenansicht für eine bestimmte VM-Instanz in einer Skalierungsgruppe können Sie Folgendes verwenden:

  • REST-API mit compute/virtualmachinescalesetvms/getinstanceview wie folgt:

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

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

    az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
    
  • Sie können auch resources.azure.com oder die Azure-SDKs verwenden.

Die genaue Darstellung der Ausgabe hängt von den für den Befehl angegebenen Optionen ab. Das folgende Beispiel zeigt eine verkürzte Beispielausgabe von der 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}"
  },
}

Diese Eigenschaften beschreiben den aktuellen Laufzeitstatus einer VM-Instanz in einer Skalierungsgruppe, einschließlich aller auf die Skalierungsgruppe angewandten Erweiterungen.

Aktualisieren von globalen Skalierungsgruppeneigenschaften

Wenn Sie eine globale Skalierungsgruppeneigenschaft aktualisieren möchten, müssen Sie die Eigenschaft im Skalierungsgruppenmodell aktualisieren. Für die Aktualisierung können Sie Folgendes verwenden:

  • REST-API mit compute/virtualmachinescalesets/createorupdate wie folgt:

    PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet?api-version={apiVersion}
    
  • Sie können mit den Eigenschaften aus der REST-API eine Azure Resource Manager-Vorlage bereitstellen, um globale Skalierungsgruppeneigenschaften zu aktualisieren.

  • Azure PowerShell mit Update-AzVmss:

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

    • So ändern Sie eine Eigenschaft

      az vmss update --set {propertyPath}={value}
      
    • So fügen Sie einer Listeneigenschaft in einer Skalierungsgruppe ein Objekt hinzu

      az vmss update --add {propertyPath} {JSONObjectToAdd}
      
    • So entfernen Sie ein Objekt aus einer Listeneigenschaft in einer Skalierungsgruppe

      az vmss update --remove {propertyPath} {indexToRemove}
      
    • Falls Sie die Skalierungsgruppe zuvor mit dem Befehl az vmss create bereitgestellt haben, können Sie den Befehl az vmss create erneut ausführen, um die Skalierungsgruppe zu aktualisieren. Stellen Sie sicher, dass alle Eigenschaften im Befehl az vmss create mit Ausnahme der zu ändernden den vorherigen Eigenschaften entsprechen.

  • Sie können auch resources.azure.com oder die Azure-SDKs verwenden.

Nach der Aktualisierung des Skalierungsgruppenmodells gilt die neue Konfiguration für alle in der Skalierungsgruppe erstellten neuen virtuellen Computer. Die Modelle für die vorhandenen virtuellen Computer in der Skalierungsgruppe müssen aber dennoch auf das aktuelle Skalierungsgruppenmodell aktualisiert werden. Die Modelle der einzelnen virtuellen Computer enthalten eine boolesche Eigenschaften namens latestModelApplied, die angibt, ob ein virtueller Computer auf das aktuelle Skalierungsgruppenmodell aktualisiert wurde. (true bedeutet, dass der virtuelle Computer auf das aktuelle Modell aktualisiert wurde.)

Eigenschaften mit Einschränkungen bei der Änderung

Eigenschaften zur Erstellungszeit

Einige Eigenschaften können nur beim Erstellen der Skalierungsgruppe festgelegt werden. Einige Beispiele sind der Speicherkontotyp Managed OS Disk und die Fehlerdomänen.

Eigenschaften, die nur auf Grundlage des aktuellen Werts geändert werden können

Einige Eigenschaften können mit Ausnahmen je nach aktuellem Wert geändert werden. Zu diesen Eigenschaften zählen folgende:

  • singlePlacementGroup
  • subnet
  • imageReferenceSku
  • imageReferenceOffer
  • Verfügbarkeitszonen (Preview)

Beispiel 1

Wenn Sie Ihre Skalierungsgruppe auf eine andere Betriebssystemversion aktualisieren möchten, müssen Sie alle aktualisierten Eigenschaften in einem einzigen Aufruf festlegen. In diesem Beispiel wechseln wir von Unbuntu Server 20.04 auf 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

Beispiel 2

Wenn Sie Ihre Skalierungsgruppe auf eine andere Betriebssystemversion aktualisieren möchten, müssen Sie alle aktualisierten Eigenschaften in einem einzigen Aufruf festlegen. In diesem Beispiel wechseln wir von Windows Server 2016 zu 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

Eigenschaften, für die zur Änderung die Aufhebung der Zuordnung erforderlich ist

Einige Eigenschaften können nur in bestimmte Werte geändert werden, wenn die Zuordnung der virtuellen Computer in der Skalierungsgruppe aufgehoben wird. Zu diesen Eigenschaften zählen folgende:

  • SKU-Name: Wird die neue VM-SKU auf der Hardware, auf der sich die Skalierungsgruppe derzeit befindet, nicht unterstützt, müssen Sie die Zuordnung der virtuellen Computer in der Skalierungsgruppe aufheben, bevor Sie den SKU-Namen ändern. Weitere Informationen finden Sie unter Ändern der Größe einer Azure-VM.

VM-spezifische Updates

Bestimmte Änderungen können statt auf die globalen Skalierungsgruppeneigenschaften auf spezifische virtuelle Computer angewendet werden. Derzeit wird als VM-spezifische Aktualisierung nur das Anfügen von Datenträgern an virtuelle Computer in der Skalierungsgruppe bzw. das Trennen dieser Datenträger unterstützt. Dieses Feature befindet sich in der Vorschauphase. Weitere Informationen finden Sie in der Vorschaudokumentation.

Szenarien

Anwendungsupdates

Wenn eine Anwendung über Erweiterungen in einer Skalierungsgruppe bereitgestellt wird, löst eine Aktualisierung der Erweiterungskonfiguration eine Aktualisierung der Anwendung gemäß der Upgraderichtlinie aus. Wenn Sie beispielsweise über eine neue Version eines Skripts für die Ausführung in einer benutzerdefinierten Skripterweiterung verfügen, können Sie die fileUris-Eigenschaft aktualisieren, sodass sie auf das neue Skript verweist. In einigen Fällen möchten Sie jedoch eine Aktualisierung erzwingen, auch wenn die Erweiterungskonfiguration unverändert bleibt, z.B. wenn Sie das Skript aktualisiert haben, ohne den URI des Skripts zu ändern. In diesen Fällen können Sie forceUpdateTag ändern, um eine Aktualisierung zu erzwingen. Diese Eigenschaft wird von der Azure-Plattform nicht interpretiert. Eine Änderung des Werts hat keine Auswirkung auf die Ausführung der Erweiterung. Durch eine Änderung wird lediglich eine erneute Ausführung der Erweiterung erzwungen. Weitere Informationen zu forceUpdateTag finden Sie in der REST-API-Dokumentation für Erweiterungen. Beachten Sie, dass forceUpdateTag mit allen Erweiterungen verwendet werden kann, nicht nur mit der benutzerdefinierten Skripterweiterung.

Anwendungen werden häufig auch über ein benutzerdefiniertes Image bereitgestellt. Dieses Szenario wird im folgenden Abschnitt behandelt.

Betriebssystemupdates

Bei Verwendung von Azure-Plattformimages können Sie das Image durch Ändern von imageReference aktualisieren. (Weitere Informationen finden Sie in der REST-API-Dokumentation.)

Hinweis

Bei Plattformimages wird als Imagereferenzversion häufig „aktuelle Version“ angegeben. Beim Erstellen, horizontalen Hochskalieren und Durchführen eines Reimagings werden die virtuellen Computer mit der neuesten verfügbaren Version erstellt. Das bedeutet jedoch nicht, dass das Betriebssystemimage im Lauf der Zeit automatisch aktualisiert wird, wenn neue Imageversionen veröffentlicht werden. Ein separates Feature bietet automatische Betriebssystemupgrades. Weitere Informationen finden Sie in der Dokumentation zu automatischen Betriebssystemupgrades.

Bei Verwendung von benutzerdefinierten Images können Sie das Image durch Aktualisieren der imageReference-ID aktualisieren. (Weitere Informationen finden Sie in der REST-API-Dokumentation.)

Beispiele

Aktualisieren des Betriebssystemimages für Ihre Skalierungsgruppe

Möglicherweise verfügen Sie über eine Skalierungsgruppe mit einer alten Version von Ubuntu LTS 16.04. Sie möchten auf eine neuere Version von Ubuntu LTS 16.04 aktualisieren, z.B. Version 16.04.201801090. Die Eigenschaft für die Imagereferenzversion ist nicht Teil einer Liste, daher können Sie diese Eigenschaften direkt mit einem der folgenden Befehle ändern:

  • Azure PowerShell mit Update-AzVmss wie folgt:

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

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

Alternativ können Sie auch das Image ändern, das Ihre Skalierungsgruppe verwendet. So lässt sich beispielsweise ein benutzerdefiniertes Image aktualisieren oder ändern, das Ihre Skalierungsgruppe verwendet. Aktualisieren Sie dafür die Eigenschaft der Imagereferenz-ID. Die Eigenschaft der Imagereferenz-ID gehört zu keiner Liste, sodass Sie sie direkt mit einem der folgenden Befehle ändern können:

  • Azure PowerShell mit Update-AzVmss wie folgt:

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

Aktualisieren des Lastenausgleichs für Ihre Skalierungsgruppe

Angenommen, Sie besitzen eine Skalierungsgruppe mit Azure Load Balancer und möchten Azure Load Balancer durch Azure Application Gateway ersetzen. Die Eigenschaften des Lastenausgleichsmoduls und von Application Gateway für eine Skalierungsgruppe sind Teil einer Liste, daher können Sie die Befehle zum Entfernen und Hinzufügen von Listenelementen verwenden, statt die Eigenschaften direkt zu ändern:

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

Hinweis

Bei diesen Befehlen wird davon ausgegangen, dass für die Skalierungsgruppe nur eine IP-Konfiguration und ein Lastenausgleichsmodul festgelegt sind. Sind mehrere vorhanden, müssen Sie möglicherweise einen anderen Listenindex als 0 verwenden.

Nächste Schritte

Sie können mit der Azure CLI oder Azure PowerShell auch allgemeine Verwaltungsaufgaben für Skalierungsgruppen ausführen.