Руководство. Изменение масштабируемого набора виртуальных машин с помощью 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
Актуальность виртуальных машин с помощью последней модели масштабируемого набора
Примечание.
Режимы обновления в настоящее время не поддерживаются в Масштабируемые наборы виртуальных машин с помощью гибкого режима оркестрации.
Масштабируемые наборы имеют политику обновления, которая определяет, как виртуальные машины обновляются в соответствии с последней моделью масштабируемого набора. Доступны три режима политики обновления:
- Автоматический. В этом режиме масштабируемый набор не дает никаких гарантий относительно порядка отключения виртуальных машин. Масштабируемый набор может одновременно завершить работу всех виртуальных машин.
- Последовательный. В этом режиме масштабируемый набор развертывает обновления в виде пакетов с необязательной паузой между обработкой пакетов.
- Вручную . В этом режиме при обновлении модели масштабируемого набора ничего не происходит с существующими виртуальными машинами, пока не будет активировано обновление вручную.
Если масштабируемый набор установлен на ручное обновление, можно активировать обновление вручную с помощью Update-AzVmss.
$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet
Примечание.
В кластерах Service Fabric можно использовать только автоматический режим, но обновление обрабатывается по-разному. Дополнительные сведения см. в разделе Обновление приложения 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
Также может потребоваться изменить образ, используемый масштабируемым набором. Например, может потребоваться обновить или изменить пользовательский образ, используемый масштабируемым набором. Чтобы изменить образ, используемый масштабируемым набором, измените свойство идентификатора эталонного изображения. Свойство идентификатора ссылки на изображение не является частью списка, поэтому вы можете напрямую изменить это свойство с помощью 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).
Примечание.
Для образов платформы обычно указывается последняя версия в качестве эталонной версии образа. Во время создания, горизонтального увеличения масштаба и повторного создания образов виртуальные машины создаются на основе последней доступной версии. Тем не менее это не означает, что образ ОС будет автоматически обновляться по мере выпуска новых версий. За автоматическое обновление ОС отвечает отдельная функция. Дополнительные сведения см. в документации по автоматическому обновлению ОС.
При использовании пользовательских образов их можно обновить, изменив идентификатор imageReference (дополнительные сведения см. в документации по REST API).
Следующие шаги
В этом руководстве вы узнали, как изменить различные аспекты масштабируемого набора и отдельных экземпляров с помощью PowerShell.
- Обновление модели масштабируемого набора
- Обновление отдельного экземпляра виртуальной машины в масштабируемом наборе
- Добавление экземпляра в масштабируемый набор
- Актуальность виртуальных машин с помощью последней модели масштабируемого набора
- Повторное создание масштабируемого набора
- Обновление образа ОС масштабируемого набора