Modyfikowanie zestawu skalowania maszyn wirtualnych

Uwaga

Wiele kroków wymienionych w tym dokumencie dotyczy zestawów skalowania maszyn wirtualnych przy użyciu trybu jednolitej aranżacji. Zalecamy używanie elastycznej orkiestracji dla nowych obciążeń. Aby uzyskać więcej informacji, zobacz Tryby orchesration dla zestawów skalowania maszyn wirtualnych na platformie Azure.

W całym cyklu życia aplikacji może być konieczne zmodyfikowanie lub zaktualizowanie zestawu skalowania maszyn wirtualnych. Te aktualizacje mogą obejmować sposób aktualizowania konfiguracji zestawu skalowania lub zmiany konfiguracji aplikacji. W tym artykule opisano sposób modyfikowania istniejącego zestawu skalowania przy użyciu interfejsów API REST, programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure.

Podstawowe pojęcia

Model zestawu skalowania

Zestaw skalowania ma "model zestawu skalowania", który przechwytuje żądany stan zestawu skalowania jako całości. Aby wykonać zapytanie dotyczące modelu dla zestawu skalowania, możesz użyć elementu

  • Interfejs API REST z zestawami compute/virtualmachinescalesets/get w następujący sposób:

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

    Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"
    
  • Interfejs wiersza polecenia platformy Azure za pomocą polecenia az vmss show:

    az vmss show --resource-group myResourceGroup --name myScaleSet
    
  • Możesz również użyć resources.azure.com lub zestawów SDK platformy Azure specyficznych dla języka.

Dokładna prezentacja danych wyjściowych zależy od opcji, które podajesz do polecenia. W poniższym przykładzie przedstawiono skrócone przykładowe dane wyjściowe z interfejsu wiersza polecenia platformy Azure:

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

Te właściwości mają zastosowanie do zestawu skalowania jako całości.

Widok wystąpienia zestawu skalowania

Zestaw skalowania ma również "widok wystąpienia zestawu skalowania", który przechwytuje bieżący stan środowiska uruchomieniowego zestawu skalowania jako całości. Aby wykonać zapytanie dotyczące widoku wystąpienia dla zestawu skalowania, możesz użyć następujących funkcji:

  • Interfejs API REST z funkcją compute/virtualmachinescalesets/getinstanceview w następujący sposób:

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

    Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceView
    
  • Interfejs wiersza polecenia platformy Azure za pomocą polecenia az vmss get-instance-view:

    az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet
    
  • Możesz również użyć resources.azure.com lub zestawów SDK platformy Azure specyficznych dla języka

Dokładna prezentacja danych wyjściowych zależy od opcji, które podajesz do polecenia. W poniższym przykładzie przedstawiono skrócone przykładowe dane wyjściowe z interfejsu wiersza polecenia platformy Azure:

$ 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
      }
    ]
  }
}

Te właściwości zawierają podsumowanie bieżącego stanu środowiska uruchomieniowego maszyn wirtualnych w zestawie skalowania, takie jak stan rozszerzeń zastosowanych do zestawu skalowania.

Widok modelu maszyn wirtualnych zestawu skalowania

Podobnie jak w przypadku widoku modelu zestaw skalowania, każde wystąpienie maszyny wirtualnej w zestawie skalowania ma własny widok modelu. Aby wykonać zapytanie dotyczące widoku modelu dla określonego wystąpienia maszyny wirtualnej w zestawie skalowania, możesz użyć następujących funkcji:

  • Interfejs API REST z funkcją compute/virtualmachinescalesetvms/get w następujący sposób:

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

    Get-AzVmssVm -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId instanceId
    
  • Interfejs wiersza polecenia platformy Azure za pomocą polecenia az vmss show:

    az vmss show --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
    
  • Możesz również użyć resources.azure.com lub zestawów SDK platformy Azure.

Dokładna prezentacja danych wyjściowych zależy od opcji, które podajesz do polecenia. W poniższym przykładzie przedstawiono skrócone przykładowe dane wyjściowe z interfejsu wiersza polecenia platformy Azure:

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

Te właściwości opisują konfigurację wystąpienia maszyny wirtualnej w zestawie skalowania, a nie konfigurację zestawu skalowania jako całości. Na przykład model zestawu skalowania ma overprovision jako właściwość, a model dla wystąpienia maszyny wirtualnej w zestawie skalowania nie. Ta różnica polega na tym, że nadmierna aprowizacja jest właściwością zestawu skalowania jako całości, a nie poszczególnych wystąpień maszyn wirtualnych w zestawie skalowania (aby uzyskać więcej informacji na temat nadmiernej aprowizacji, zobacz Zagadnienia dotyczące projektowania zestawów skalowania).

Widok wystąpienia maszyny wirtualnej zestawu skalowania

Podobnie jak w przypadku widoku wystąpienia zestawu skalowania każde wystąpienie maszyny wirtualnej w zestawie skalowania ma własny widok wystąpienia. Aby wykonać zapytanie dotyczące widoku wystąpienia dla określonego wystąpienia maszyny wirtualnej w zestawie skalowania, możesz użyć następujących funkcji:

  • Interfejs API REST z funkcją compute/virtualmachinescalesetvms/getinstanceview w następujący sposób:

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

    Get-AzVmssVm -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId instanceId -InstanceView
    
  • Interfejs wiersza polecenia platformy Azure za pomocą polecenia az vmss get-instance-view

    az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
    
  • Możesz również użyć resources.azure.com lub zestawów SDK platformy Azure

Dokładna prezentacja danych wyjściowych zależy od opcji, które podajesz do polecenia. W poniższym przykładzie przedstawiono skrócone przykładowe dane wyjściowe z interfejsu wiersza polecenia platformy Azure:

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

Te właściwości opisują bieżący stan środowiska uruchomieniowego wystąpienia maszyny wirtualnej w zestawie skalowania, który obejmuje wszystkie rozszerzenia zastosowane do zestawu skalowania.

Jak zaktualizować właściwości globalnego zestawu skalowania

Aby zaktualizować właściwość globalnego zestawu skalowania, należy zaktualizować właściwość w modelu zestawu skalowania. Tę aktualizację można wykonać za pomocą:

  • Interfejs API REST z funkcją compute/virtualmachinescalesets/createorupdate w następujący sposób:

    PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet?api-version={apiVersion}
    
  • Szablon usługi Resource Manager można wdrożyć z właściwościami z interfejsu API REST, aby zaktualizować właściwości zestawu skalowania globalnego.

  • Program Azure PowerShell z poleceniem Update-AzVmss:

    Update-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -VirtualMachineScaleSet {scaleSetConfigPowershellObject}
    
  • Interfejs wiersza polecenia platformy Azure za pomocą polecenia az vmss update:

    • Aby zmodyfikować właściwość:

      az vmss update --set {propertyPath}={value}
      
    • Aby dodać obiekt do właściwości listy w zestawie skalowania:

      az vmss update --add {propertyPath} {JSONObjectToAdd}
      
    • Aby usunąć obiekt z właściwości listy w zestawie skalowania:

      az vmss update --remove {propertyPath} {indexToRemove}
      
    • Jeśli wcześniej wdrożono zestaw skalowania za pomocą az vmss create polecenia , możesz uruchomić az vmss create polecenie ponownie, aby zaktualizować zestaw skalowania. Upewnij się, że wszystkie właściwości w poleceniu az vmss create są takie same jak poprzednio, z wyjątkiem właściwości, które chcesz zmodyfikować.

  • Możesz również użyć resources.azure.com lub zestawów SDK platformy Azure.

Po zaktualizowaniu modelu zestawu skalowania nowa konfiguracja ma zastosowanie do wszystkich nowych maszyn wirtualnych utworzonych w zestawie skalowania. Jednak modele istniejących maszyn wirtualnych w zestawie skalowania muszą być nadal aktualne z najnowszym modelem ogólnego zestawu skalowania. W modelu dla każdej maszyny wirtualnej jest właściwość logiczna o nazwie latestModelApplied , która wskazuje, czy maszyna wirtualna jest aktualna z najnowszym modelem ogólnego zestawu skalowania (true oznacza, że maszyna wirtualna jest aktualna w najnowszym modelu).

Właściwości z ograniczeniami modyfikacji

Właściwości czasu tworzenia

Niektóre właściwości można ustawić tylko podczas tworzenia zestawu skalowania. Niektóre przykłady obejmują typ konta magazynu dysku zarządzanego systemu operacyjnego i domeny błędów.

Właściwości, które można zmienić tylko na podstawie bieżącej wartości

Niektóre właściwości mogą zostać zmienione z wyjątkami w zależności od bieżącej wartości. Te właściwości obejmują:

  • singlePlacementGroup
  • podsieć
  • imageReferenceSku
  • imageReferenceOffer
  • Strefy dostępności (wersja zapoznawcza)

Przykład 1

Aby zaktualizować zestaw skalowania tak, aby używał innej wersji systemu operacyjnego, należy ustawić wszystkie zaktualizowane właściwości w jednym wywołaniu. W tym przykładzie zmieniamy się z Unbuntu Server 20.04 na 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

Przykład 2

Aby zaktualizować zestaw skalowania tak, aby używał innej wersji systemu operacyjnego, należy ustawić wszystkie zaktualizowane właściwości w jednym wywołaniu. W tym przykładzie zmieniamy się z systemu Windows Server 2016 na 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

Właściwości, które wymagają zmiany cofania przydziału

Niektóre właściwości można zmienić tylko na niektóre wartości, jeśli maszyny wirtualne w zestawie skalowania zostaną cofnięto przydział. Te właściwości obejmują:

  • Nazwa jednostki SKU — jeśli nowa jednostka SKU maszyny wirtualnej nie jest obecnie obsługiwana na sprzęcie, zestaw skalowania jest obecnie włączony, należy cofnąć przydział maszyn wirtualnych w zestawie skalowania przed zmodyfikowaniem nazwy jednostki SKU. Aby uzyskać więcej informacji, zobacz , jak zmienić rozmiar maszyny wirtualnej platformy Azure.

Aktualizacje specyficzne dla maszyny wirtualnej

Niektóre modyfikacje mogą być stosowane do określonych maszyn wirtualnych zamiast globalnych właściwości zestawu skalowania. Obecnie jedyną obsługiwaną aktualizacją maszyny wirtualnej jest dołączanie/odłączanie dysków danych do/z maszyn wirtualnych w zestawie skalowania. Ta funkcja jest dostępna w wersji zapoznawczej. Aby uzyskać więcej informacji, zobacz dokumentację wersji zapoznawczej.

Scenariusze

Aktualizacje aplikacji

Jeśli aplikacja jest wdrażana w zestawie skalowania za pośrednictwem rozszerzeń, aktualizacja konfiguracji rozszerzenia powoduje, że aplikacja zostanie zaktualizowana zgodnie z zasadami uaktualniania. Jeśli na przykład masz nową wersję skryptu do uruchomienia w rozszerzeniu niestandardowego skryptu, możesz zaktualizować właściwość fileUris , aby wskazać nowy skrypt. W niektórych przypadkach możesz wymusić aktualizację, mimo że konfiguracja rozszerzenia jest niezmieniona (na przykład skrypt został zaktualizowany bez zmiany identyfikatora URI skryptu). W takich przypadkach można zmodyfikować element forceUpdateTag, aby wymusić aktualizację. Platforma Azure nie interpretuje tej właściwości. Jeśli zmienisz wartość, nie ma wpływu na sposób działania rozszerzenia. Zmiana wymusza ponowne uruchomienie rozszerzenia. Aby uzyskać więcej informacji na temat elementu forceUpdateTag, zobacz dokumentację interfejsu API REST dla rozszerzeń. Należy pamiętać, że element forceUpdateTag może być używany ze wszystkimi rozszerzeniami, a nie tylko z niestandardowym rozszerzeniem skryptu.

Często aplikacje są również wdrażane za pośrednictwem obrazu niestandardowego. Ten scenariusz został omówiony w poniższej sekcji.

Aktualizacje systemu operacyjnego

Jeśli używasz obrazów platformy Azure, możesz zaktualizować obraz, modyfikując obrazReference (więcej informacji można znaleźć w dokumentacji interfejsu API REST).

Uwaga

W przypadku obrazów platformy często określa się "najnowszą" wersję referencyjną obrazu. Podczas tworzenia, skalowania w poziomie i ponownego obrazu maszyny wirtualne są tworzone przy użyciu najnowszej dostępnej wersji. Nie oznacza to jednak, że obraz systemu operacyjnego jest automatycznie aktualizowany wraz z upływem czasu w miarę wydawania nowych wersji obrazów. Osobna funkcja zapewnia automatyczne uaktualnienia systemu operacyjnego. Aby uzyskać więcej informacji, zobacz dokumentację dotyczącą automatycznych uaktualnień systemu operacyjnego.

Jeśli używasz obrazów niestandardowych, możesz zaktualizować obraz, aktualizując identyfikator imageReference (więcej informacji można znaleźć w dokumentacji interfejsu API REST).

Przykłady

Aktualizowanie obrazu systemu operacyjnego dla zestawu skalowania

Być może masz zestaw skalowania z starą wersją systemu Ubuntu LTS 16.04. Chcesz zaktualizować do nowszej wersji systemu Ubuntu LTS 16.04, takiej jak wersja 16.04.201801090. Właściwość wersji odwołania do obrazu nie jest częścią listy, więc można bezpośrednio zmodyfikować te właściwości za pomocą jednego z następujących poleceń:

  • Program Azure PowerShell z programem Update-AzVmss w następujący sposób:

    Update-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -ImageReferenceVersion 16.04.201801090
    
  • Interfejs wiersza polecenia platformy Azure za pomocą polecenia az vmss update:

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

Alternatywnie możesz zmienić obraz używany przez zestaw skalowania. Na przykład możesz zaktualizować lub zmienić obraz niestandardowy używany przez zestaw skalowania. Obraz używany przez zestaw skalowania można zmienić, aktualizując właściwość identyfikatora odwołania do obrazu. Właściwość identyfikatora odwołania do obrazu nie jest częścią listy, więc możesz bezpośrednio zmodyfikować tę właściwość za pomocą jednego z następujących poleceń:

  • Program Azure PowerShell z programem Update-AzVmss w następujący sposób:

    Update-AzVmss `
        -ResourceGroupName "myResourceGroup" `
        -VMScaleSetName "myScaleSet" `
        -ImageReferenceId /subscriptions/{subscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/myNewImage
    
  • Interfejs wiersza polecenia platformy Azure za pomocą polecenia 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
    

Aktualizowanie modułu równoważenia obciążenia dla zestawu skalowania

Załóżmy, że masz zestaw skalowania z usługą Azure Load Balancer i chcesz zamienić usługę Azure Load Balancer na bramę aplikacja systemu Azure. Właściwości modułu równoważenia obciążenia i usługi Application Gateway dla zestawu skalowania są częścią listy, więc możesz użyć poleceń, aby usunąć lub dodać elementy listy zamiast bezpośrednio modyfikować właściwości:

  • 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
    
  • Interfejs wiersza polecenia platformy Azure:

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

Uwaga

Te polecenia zakładają, że w zestawie skalowania istnieje tylko jedna konfiguracja adresu IP i moduł równoważenia obciążenia. Jeśli istnieje wiele, może być konieczne użycie indeksu listy innego niż 0.

Następne kroki

Typowe zadania zarządzania można również wykonywać w zestawach skalowania za pomocą interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell.