Руководство. Изменение масштабируемого набора виртуальных машин с помощью PowerShell

На протяжении всего жизненного цикла приложений может потребоваться изменить или обновить масштабируемый набор виртуальных машин. Эти обновления могут включать сведения о том, как обновить конфигурацию масштабируемого набора или изменить конфигурацию приложения. В этой статье описывается изменение существующего масштабируемого набора с помощью PowerShell.

Обновление модели масштабируемого набора

Масштабируемый набор имеет "модель масштабируемого набора", которая фиксирует требуемое состояние масштабируемого набора в целом. Чтобы запросить модель для масштабируемого набора, можно использовать Get-AzVmss.

Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet

Точное представление выходных данных зависит от параметров, предоставляемых команде. В следующем примере показаны сжатые выходные данные примера из PowerShell:

Sku                                         : 
  Name                                      : Standard_DS1_v2
  Tier                                      : Standard
  Capacity                                  : 2
ProvisioningState                           : Succeeded
SinglePlacementGroup                        : False
Id                                          : /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet
Name                                        : myScaleSet
Type                                        : Microsoft.Compute/virtualMachineScaleSets
Location                                    : eastus
VirtualMachineProfile                       : 
    ComputerNamePrefix                      : myScaleSe
      ProvisionVMAgent                      : True
      EnableAutomaticUpdates                : True
        PatchMode                           : AutomaticByOS
        AssessmentMode                      : ImageDefault
      EnableVMAgentPlatformUpdates          : False
    AllowExtensionOperations                : True
  StorageProfile                            : 
      Publisher                             : MicrosoftWindowsServer
      Offer                                 : WindowsServer
      Sku                                   : 2016-Datacenter
      Version                               : latest
    OsDisk                                  : 
      Caching                               : None
      CreateOption                          : FromImage
      DiskSizeGB                            : 127
      OsType                                : Windows
        StorageAccountType                  : Premium_LRS
      DeleteOption                          : Delete
  NetworkProfile                            : 
    NetworkInterfaceConfigurations[0]       : 
      Name                                  : myScaleSet
      Primary                               : True
      DisableTcpStateTracking               : False
        Name                                : myScaleSet
        Subnet                              : 
          Id                                : /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myScaleSet/subnets/myScaleSet
        PrivateIPAddressVersion             : IPv4
        LoadBalancerBackendAddressPools[0]  : 
/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/loadBalancers/myScaleSet/backendAddressPools/myScaleSet
      EnableIPForwarding                    : False
      DeleteOption                          : Delete
    NetworkApiVersion                       : 2020-11-01
OrchestrationMode                           : Flexible
TimeCreated                                 : 12/2/2022 5:41:21 PM

Вы также можете использовать Update-AzVmss для обновления различных свойств группы масштабирования. Например, обновление типа лицензии.

$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet -LicenseType Windows_Server

Обновление отдельных экземпляров виртуальных машин в масштабируемом наборе

Аналогично тому, как масштабируемый набор имеет представление модели, каждый экземпляр виртуальной машины в масштабируемом наборе имеет собственное представление модели. Чтобы запросить представление модели для конкретного экземпляра виртуальной машины в масштабируемом наборе, можно использовать Get-AzVM.

Get-AzVM -ResourceGroupName myResourceGroup -name MyScaleSet_Instance1
ResourceGroupName      : myResourceGroup
Id                     : /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myScaleSet_Instance1
Name                   : myScaleSet_Instance1
Type                   : Microsoft.Compute/virtualMachines
Location               : eastus
Extensions             : {MicrosoftMonitoringAgent}
HardwareProfile        : {VmSize}
NetworkProfile         : {NetworkInterfaces}
OSProfile              : {ComputerName, AdminUsername, WindowsConfiguration, Secrets, AllowExtensionOperations, RequireGuestProvisionSignal}
ProvisioningState      : Succeeded
StorageProfile         : {ImageReference, OsDisk, DataDisks}
VirtualMachineScaleSet : {Id}
TimeCreated            : 12/2/2022 5:41:23 PM

Вы также можете добавить -Status флаг, чтобы получить представление экземпляра, которое содержит дополнительные сведения о виртуальной машине.

Get-AzVM -ResourceGroupName myResourceGroup -name MyScaleSet_Instance1 -Status                                    
ResourceGroupName       : myResourceGroup
Name                    : MyScaleSet_Instance1
OsName                  : Windows Server 2016 Datacenter
OsVersion               : 10.0.14393.5501
HyperVGeneration        : V1
Disks[0]                : 
  Name                  : myScaleSet_Instance1_disk1_cab60acccff7414b81d60572eeecb9e3
  Statuses[0]           : 
    Code                : ProvisioningState/succeeded
    Level               : Info
    DisplayStatus       : Provisioning succeeded
    Time                : 12/2/2022 5:41:25 PM
Disks[1]                : 
  Name                  : disk1
  Statuses[0]           : 
    Code                : ProvisioningState/succeeded
    Level               : Info
    DisplayStatus       : Provisioning succeeded
    Time                : 12/2/2022 6:33:36 PM
Extensions[0]           : 
  Name                  : MicrosoftMonitoringAgent
  Type                  : Microsoft.EnterpriseCloud.Monitoring.MicrosoftMonitoringAgent
  TypeHandlerVersion    : 1.0.18067.0
  Statuses[0]           : 
    Code                : ProvisioningState/succeeded
    Level               : Info
    DisplayStatus       : Provisioning succeeded
    Message             : Latest configuration has been applied to the Microsoft Monitoring Agent.
VMAgent                 : 
  VmAgentVersion        : 2.7.41491.1071
  ExtensionHandlers[0]  : 
    Type                : Microsoft.EnterpriseCloud.Monitoring.MicrosoftMonitoringAgent
    TypeHandlerVersion  : 1.0.18067.0
    Status              : 
      Code              : ProvisioningState/succeeded
      Level             : Info
      DisplayStatus     : Ready
      Message           : This virtual machine has successfully connected to Azure Log Analytics.
  Statuses[0]           : 
    Code                : ProvisioningState/succeeded
    Level               : Info
    DisplayStatus       : Ready
    Message             : GuestAgent is running and processing the extensions.
    Time                : 12/2/2022 6:34:55 PM
Statuses[0]             : 
  Code                  : ProvisioningState/succeeded
  Level                 : Info
  DisplayStatus         : Provisioning succeeded
  Time                  : 12/2/2022 6:33:42 PM
Statuses[1]             : 
  Code                  : PowerState/running
  Level                 : Info
  DisplayStatus         : VM running

Эти свойства описывают конфигурацию экземпляра виртуальной машины в масштабируемом наборе, а не конфигурацию масштабируемого набора в целом.

Вы можете обновлять отдельные экземпляры виртуальных машин в масштабируемом наборе так же, как и отдельную виртуальную машину. Например, присоединение нового диска данных к экземпляру 1:

$VirtualMachine = Get-AzVM -ResourceGroupName "myResourceGroup" -Name "myScaleSet_Instance1".
Add-AzVMDataDisk -VM $VirtualMachine -Name "disk1" -LUN 0 -Caching ReadOnly -DiskSizeinGB 128 -CreateOption Empty
Update-AzVM -ResourceGroupName "myResourceGroup" -VM $VirtualMachine

Добавьте экземпляр в группу масштабирования

Иногда может потребоваться добавить новую виртуальную машину в масштабируемый набор, но вам нужны разные параметры конфигурации, отличные от перечисленных в модели масштабируемого набора. Виртуальные машины можно добавлять в масштабируемый набор во время создания с помощью команды Get-AzVmss и указания имени масштабируемого набора, к которому нужно добавить экземпляр.

New-AzVM -Name myNewInstance -ResourceGroupName myResourceGroup -image Ubuntu2204 -VmssId /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet
ResourceGroupName        : myResourceGroup                                                                              
Id                       : /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myNewInstance
Name                     : myNewInstance                                                                                
Type                     : Microsoft.Compute/virtualMachines                                                            
Location                 : eastus                                                                                       
Tags                     : {}                                                                                           
HardwareProfile          : {VmSize}                                                                                     
NetworkProfile           : {NetworkInterfaces}                                                                          
OSProfile                : {ComputerName, AdminUsername, LinuxConfiguration, Secrets, AllowExtensionOperations, RequireGuestProvisionSignal}
ProvisioningState        : Succeeded                                                                                    
StorageProfile           : {ImageReference, OsDisk, DataDisks}                                                          
FullyQualifiedDomainName : mynewinstance-21bc01.eastus.cloudapp.azure.com                                               
VirtualMachineScaleSet   : {Id}                                                                                         
TimeCreated              : 12/2/2022 6:40:20 PM   

Выполнив команду Get-AzVM еще раз, мы видим, что новый экземпляр был создан и добавлен в существующий масштабируемый набор.

Get-AzVm -ResourceGroupName myResourceGroup 
ResourceGroupName   Name                   Location   VmSize            OsType     NIC                  ProvisioningState 
-----------------   ----                   --------   ------            ------     ---                  ----------------- 
myResourceGroup     myNewInstance          eastus     Standard_D2s_v3   Linux      myNewInstance         Succeeded     
myResourceGroup     myScaleSet_Instance1   eastus     Standard_DS1_v2   Windows    myScaleSet-a9f1d54c   Succeeded     
myResourceGroup     myScaleSet_Instance2   eastus     Standard_DS1_v2   Windows    myScaleSet-4dc708e5   Succeeded   

Обновите виртуальные машины в соответствии с последней моделью набора масштабирования

Note

Режимы обновления в настоящее время не поддерживаются в Масштабируемые наборы виртуальных машин с помощью гибкого режима оркестрации.

Масштабируемые наборы имеют «политику обновления», которая определяет, как виртуальные машины обновляются в соответствии с последней моделью масштабируемого набора. Три режима политики обновления:

  • Автоматически — в этом режиме для масштабируемого набора не гарантируется какой-либо порядок выключения виртуальных машин. Масштабируемый набор может одновременно отключить все виртуальные машины.
  • Скользящее — в этом режиме набор масштабирования развертывает обновление пакетами с необязательной паузой между пакетами.
  • Вручную — в этом режиме при обновлении модели группы масштабирования существующие виртуальные машины не затрагиваются, пока не будет вручную запущено обновление.

Если масштабируемый набор установлен на ручное обновление, можно активировать обновление вручную с помощью Update-AzVmss.

$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet

Note

Кластеры службы Fabric могут использовать только режим Automatic, но обновление обрабатывается по-другому. Дополнительные сведения см. в разделе Обновление приложения Service Fabric.

Повторное создание образа группы масштабирования

Масштабируемые наборы виртуальных машин создаст уникальное имя для каждой виртуальной машины в масштабируемом наборе. Соглашение об именовании зависит от режима оркестрации:

  • Режим гибкой оркестрации: {scale-set-name}_{8-char-guid}
  • Единый режим оркестрации: {scale-set-name}_{instance-id}

В тех случаях, когда необходимо повторно создать образ для конкретного экземпляра, используйте Set-AzVmss и укажите имя экземпляра.

Set-AzVmssVM -ResourceGroupName myResourceGroup -VMScaleSetName myScaleSet -InstanceId myScaleSet_Instance1 -Reimage

Чтобы повторно использовать все экземпляры в масштабируемом наборе, укажите имя масштабируемого набора и опустите все идентификаторы экземпляров.

Set-AzVmssVM -Reimage -ResourceGroupName myResourceGroup -VMScaleSetName myScaleSet

Обновление образа ОС для масштабируемого набора

У вас может быть группа масштабирования, использующая старую версию Ubuntu LTS 18.04. Вы хотите обновить до более новой версии Ubuntu LTS 16.04, например версии 18.04.20210180. Свойство эталонной версии образа не является частью списка, поэтому вы можете напрямую изменить эти свойства с помощью Update-AzVmss.

$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet      
  
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet -ImageReferenceVersion virtualMachineProfile.storageProfile.imageReference.version=18.04.202210180

В качестве альтернативы можно изменить образ, используемый набором масштабирования. Например, может потребоваться обновить или изменить пользовательский образ, используемый в масштабируемом наборе. Вы можете изменить образ, используемый группой масштабирования, обновив свойство ID ссылки на образ. Свойство идентификатора ссылки на изображение не является частью списка, поэтому вы можете напрямую изменить это свойство с помощью Update-AzVmss.

$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet     
   
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet -ImageReferenceVersion virtualMachineProfile.storageProfile.imageReference.id=/subscriptions/{subscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/myNewImage

Если вы используете образы платформы Azure, вы можете обновить их, изменив imageReference (дополнительные сведения см. в документации по REST API).

Note

Для образов платформы обычно указывают "latest" в качестве версии ссылки на образ. При создании, горизонтальном масштабировании и переустановке образа виртуальные машины создаются с использованием последней доступной версии. Однако это не означает, что образ ОС автоматически обновляется с течением времени по мере выпуска новых версий образа. Отдельная функция обеспечивает автоматическое обновление ОС. Дополнительные сведения см. в документации по автоматическому обновлению ОС.

При использовании пользовательских образов можно обновить изображение, обновив идентификатор imageReference (дополнительные сведения см. в документации по REST API).

Дальнейшие действия

В этом руководстве вы узнали, как изменять различные параметры группы масштабирования и отдельных экземпляров с помощью PowerShell.

  • Обновление модели масштабируемого набора
  • Обновление отдельного экземпляра виртуальной машины в масштабируемом наборе
  • Добавление экземпляра в масштабируемый набор
  • Обновите виртуальные машины в соответствии с последней моделью набора масштабирования
  • Повторное создание образа группы масштабирования
  • Обновление образа ОС для масштабируемого набора