教學課程:使用 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
更新擴展集中的個別 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 : 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
旗標來取得執行個體檢視,其提供 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 執行個體的設定,而非整個擴展集的設定。
您可以像對獨立虛擬機器一樣,對擴展集中的個別虛擬機器執行個體執行更新。 例如,將新的資料磁碟連結至執行個體 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 命令並指定要新增執行個體的擴展集名稱,將虛擬機器新增至擴展集。
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
使用最新的擴展集模型將 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
或者,您可能想要變更擴展集使用的映像。 例如,您可能要更新或變更擴展集使用的自訂映像。 您可以藉由更新映像參考識別碼屬性,來變更擴展集使用的映像。 映像參考識別碼屬性不是清單的一部分,因此您可以使用 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" 作為映像參考版本。 當您建立、擴增及重新安裝映像時,會使用最新可用版本來建立虛擬機器。 不過,這並不意謂著作業系統映像會隨著時間在新映像版本發行時自動更新。 獨立功能可提供自動作業系統升級。 如需詳細資訊,請參閱 自動作業系統升級文件。
如果您使用自訂映像,您可以更新 imageReference 識別碼 (如需詳細資訊,請參閱 REST API 文件) 來更新映像。
下一步
在本教學課程中,您已了解如何使用 PowerShell 來修改擴展集和個別執行個體的各個層面。
- 更新擴展集模型
- 更新擴展集中的個別 VM 執行個體
- 將執行個體新增至擴展集
- 使用最新的擴展集模型將 VM 更新至最新狀態
- 重新安裝擴展集的映像
- 更新擴展集的 OS 映像