教程:使用 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 : chinanorth2
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
更新规模集中的单个 VM 实例
规模集中的每个 VM 实例都有自己的模型视图,这类似于每个规模集都有模型视图的情况。 若要查询规模集中特定 VM 实例的模型视图,可使用 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 : chinanorth2
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
标志以获取实例视图,该视图提供有关 VM 的更多详细信息。
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
这些属性描述的是规模集中某个 VM 实例的配置,而不是规模集作为一个整体的配置。
可以像对独立 VM 一样,对规模集中的单个 VM 实例执行更新。 例如,将新的数据磁盘附加到实例 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
将实例添加到规模集
有时,你可能想要将新的 VM 添加到规模集,但希望配置选项不同于规模集模型中列出的选项。 使用 Get-AzVmss 命令并指定要向其添加实例的规模集名称,可以在创建期间将 VM 添加到规模集。
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 : chinanorth2
Tags : {}
HardwareProfile : {VmSize}
NetworkProfile : {NetworkInterfaces}
OSProfile : {ComputerName, AdminUsername, LinuxConfiguration, Secrets, AllowExtensionOperations, RequireGuestProvisionSignal}
ProvisioningState : Succeeded
StorageProfile : {ImageReference, OsDisk, DataDisks}
FullyQualifiedDomainName : mynewinstance-21bc01.chinanorth2.chinacloudapp.cn
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 chinanorth2 Standard_D2s_v3 Linux myNewInstance Succeeded
myResourceGroup myScaleSet_Instance1 chinanorth2 Standard_DS1_v2 Windows myScaleSet-a9f1d54c Succeeded
myResourceGroup myScaleSet_Instance2 chinanorth2 Standard_DS1_v2 Windows myScaleSet-4dc708e5 Succeeded
使用最新的规模集模型对 VM 进行更新
注意
使用灵活业务流程模式的虚拟机规模集当前不支持升级模式。
规模集有一项“升级策略”,该策略决定了如何使用最新的规模集模型对 VM 进行更新。 升级策略的三种模式是:
- 自动 - 在此模式下,规模集无法保证 VM 的关闭顺序。 规模集可能同时关闭所有 VM。
- 滚动 - 在此模式下,规模集以批次的方式推出更新,批次之间的暂停时间为可选。
- 手动 - 在此模式下,更新规模集模型时,在触发手动更新之前,不会对现有的 VM 执行任何操作。
如果规模集设置为手动升级,则可以使用 Update-AzVmss 触发手动升级。
$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet
注意
Service Fabric 群集只能使用“自动”模式,但采用不同方式来处理更新。 有关详细信息,请参阅 Service Fabric 应用程序升级。
重置规模集的映像
虚拟机规模集将为规模集中的每个 VM 生成独一无二的名称。 命名约定因业务流程模式而异:
- 灵活业务流程模式:
{scale-set-name}_{8-char-guid}
- 统一业务流程模式:
{scale-set-name}_{instance-id}
如果需要重置特定实例的映像,请使用 Set-AzVmss 并指定实例名称。
Set-AzVmssVM -ResourceGroupName myResourceGroup -VMScaleSetName myScaleSet -InstanceId myScaleSet_Instance1 -Reimage
若要重置规模集中所有实例的映像,只需指定规模集名称并省略任何 instanceID 即可。
Set-AzVmssVM -Reimage -ResourceGroupName myResourceGroup -VMScaleSetName myScaleSet
更新规模集的 OS 映像
你可能具有运行旧版 Ubuntu LTS 18.04 的规模集。 你希望将其更新到新版 Ubuntu LTS 16.04,例如版本 18.04.202210180。 映像引用版本属性不是列表的一部分,因此可以使用 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”属性来更改规模集使用的映像。 映像引用 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 文档)。
注意
使用平台映像时,通常指定 "latest" 作为映像引用版本。 在你执行创建、横向扩展和重置映像操作时,将使用最新发布的脚本创建 VM。 但是,这并不意味着 OS 映像会随新映像版本的发布自动进行更新。 一个独立功能提供了自动 OS 升级功能。 有关详细信息,请参阅自动 OS 升级文档。
如果使用自定义映像,可以通过更新 imageReference ID 来更新映像(有关详细信息,请参阅 REST API 文档)。
后续步骤
本教程介绍了如何使用 PowerShell 修改规模集的各个方面以及单个实例。
- 更新规模集模型
- 更新规模集中的单个 VM 实例
- 将实例添加到规模集
- 使用最新的规模集模型对 VM 进行更新
- 重置规模集的映像
- 更新规模集的 OS 映像