Share via


자습서: PowerShell을 사용하여 Virtual Machine Scale Set 수정

애플리케이션의 수명 주기 전반에 걸쳐 Virtual Machine Scale Set을 수정하거나 업데이트해야 할 수도 있습니다. 이러한 업데이트에는 확장 집합의 구성을 업데이트하거나 애플리케이션 구성을 변경하는 방법이 포함될 수 있습니다. 이 문서에서는 PowerShell을 사용하여 기존 확장 집합을 수정하는 방법을 설명합니다.

확장 집합 모델 업데이트

확장 집합에는 확장 집합의 desired 상태를 전체적으로 캡처하는 “확장 집합 모델”이 있습니다. 확장 집합의 모델을 쿼리하려면 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 인스턴스 구성을 설명합니다.

독립 실행형 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                 : 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을 최신 상태로 유지

참고 항목

현재 유연한 오케스트레이션 모드를 사용하는 Virtual Machine Scale Sets에서는 업그레이드 모드가 지원되지 않습니다.

확장 집합에는 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 애플리케이션 업그레이드를 참조하세요.

확장 집합 이미지로 다시 설치

Virtual Machine Scale Sets는 확장 집합의 각 VM에 대해 고유한 이름을 생성합니다. 명명 규칙은 오케스트레이션 모드에 따라 다릅니다.

  • 유연한 오케스트레이션 모드: {scale-set-name}_{8-char-guid}
  • 균일 오케스트레이션 모드: {scale-set-name}_{instance-id}

특정 인스턴스를 이미지로 다시 설치해야 하는 경우 Set-AzVmss를 사용하고 인스턴스 이름을 지정합니다.

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

확장 집합의 모든 인스턴스를 이미지로 다시 설치하려면 확장 집합 이름을 지정하고 인스턴스 ID를 생략하기만 하면 됩니다.

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 설명서 참조).

참고 항목

플랫폼 이미지를 사용하는 경우 이미지 참조 버전으로 "최신"을 지정하는 것이 일반적입니다. VM을 만들고 규모를 확장하고 이미지로 다시 설치하는 동안 VM은 사용 가능한 최신 버전으로 만들어집니다. 하지만 시간이 지나면서 새 이미지 버전이 릴리스되면 OS 이미지가 자동으로 업데이트된다는 의미는 아닙니다. 별도의 기능을 통해서는 자동 OS 업그레이드를 제공합니다. 자세한 내용은 자동 OS 업그레이드 설명서를 참조하세요.

사용자 지정 이미지를 사용하는 경우 imageReference ID를 업데이트하여 이미지를 업데이트할 수 있습니다(자세한 내용은 REST API 설명서 참조).

다음 단계

이 자습서에서는 PowerShell을 사용하여 확장 집합과 개별 인스턴스의 다양한 측면을 수정하는 방법을 알아보았습니다.

  • 확장 집합 모델 업데이트
  • 확장 집합에서 개별 VM 인스턴스 업데이트
  • 확장 집합에 인스턴스 추가
  • 최신 확장 집합 모델로 VM을 최신 상태로 유지
  • 확장 집합 이미지로 다시 설치
  • 확장 집합에 대한 OS 이미지 업데이트