Virtual Machine Scale Set 수정

참고 항목

이 문서에 나열된 대부분의 단계는 균일한 오케스트레이션 모드를 사용하는 Virtual Machine Scale Sets에 적용됩니다. 새 워크로드에 유연한 오케스트레이션을 사용하는 것이 좋습니다. 자세한 내용은 Azure의 Virtual Machine Scale Set에 대한 오케스트레이션 모드를 참조하세요.

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

기본 개념

확장 집합 모델

확장 집합에는 확장 집합의 desired 상태를 전체적으로 캡처하는 “확장 집합 모델”이 있습니다. 확장 집합의 모델을 쿼리하려는 경우 다음을 사용할 수 있습니다.

  • REST API에서 compute/virtualmachinescalesets/get, 아래 참조:

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet?api-version={apiVersion}
    
  • Azure PowerShell에서 Get-AzVmss:

    Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"
    
  • Azure CLI에서 az vmss show:

    az vmss show --resource-group myResourceGroup --name myScaleSet
    
  • resources.azure.com 또는 언어별 Azure SDK를 사용할 수도 있습니다.

정확한 출력 표시는 명령에 제공하는 옵션에 따라 달라집니다. 다음 예제는 Azure CLI의 압축된 샘플 출력입니다.

az vmss show --resource-group myResourceGroup --name myScaleSet
{
  "location": "westus",
  "overprovision": true,
  "plan": null,
  "singlePlacementGroup": true,
  "sku": {
    "additionalProperties": {},
    "capacity": 1,
    "name": "Standard_D2_v2",
    "tier": "Standard"
  },
}

이러한 속성은 확장 집합에 전체적으로 적용됩니다.

확장 집합 인스턴스 보기

또한 확장 집합에는 확장 집합의 현재 런타임 상태를 캡처하는 “확장 집합 인스턴스 보기”가 있습니다. 확장 집합의 인스턴스 보기를 쿼리하려면 다음을 사용할 수 있습니다.

  • REST API에서 compute/virtualmachinescalesets/getinstanceview, 아래 참조:

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/instanceView?api-version={apiVersion}
    
  • Azure PowerShell에서 Get-AzVmss:

    Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceView
    
  • Azure CLI에서 az vmss get-instance-view:

    az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet
    
  • resources.azure.com 또는 언어별 Azure SDK를 사용할 수도 있습니다.

정확한 출력 표시는 명령에 제공하는 옵션에 따라 달라집니다. 다음 예제는 Azure CLI의 압축된 샘플 출력입니다.

$ az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet
{
  "statuses": [
    {
      "additionalProperties": {},
      "code": "ProvisioningState/succeeded",
      "displayStatus": "Provisioning succeeded",
      "level": "Info",
      "message": null,
      "time": "{time}"
    }
  ],
  "virtualMachine": {
    "additionalProperties": {},
    "statusesSummary": [
      {
        "additionalProperties": {},
        "code": "ProvisioningState/succeeded",
        "count": 1
      }
    ]
  }
}

이러한 속성은 확장 집합에 적용된 확장의 상태를 포함하여 확장 집합에 있는 VM의 현재 런타임 상태 요약을 제공합니다.

확장 집합 VM 모델 보기

확장 집합에는 모델 보기가 있는 것처럼, 확장 집합의 각 VM 인스턴스에도 고유한 모델 보기가 있습니다. 확장 집합의 특정 VM 인스턴스에 대한 모델 보기를 쿼리하려면 다음을 사용할 수 있습니다.

  • REST API에서 compute/virtualmachinescalesetvms/get, 아래 참조:

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/virtualmachines/instanceId?api-version={apiVersion}
    
  • Azure PowerShell에서 Get-AzVmssVm:

    Get-AzVmssVm -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId instanceId
    
  • Azure CLI에서 az vmss show:

    az vmss show --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
    
  • resources.azure.com 또는 Azure SDK를 사용할 수도 있습니다.

정확한 출력 표시는 명령에 제공하는 옵션에 따라 달라집니다. 다음 예제는 Azure CLI의 압축된 샘플 출력입니다.

$ az vmss show --resource-group myResourceGroup --name myScaleSet
{
  "location": "westus",
  "name": "{name}",
  "sku": {
    "name": "Standard_D2_v2",
    "tier": "Standard"
  },
}

이러한 속성은 확장 집합의 전체 구성이 아니라 확장 집합 내의 VM 인스턴스 구성을 설명합니다. 예를 들어, 확장 집합 모델에는 overprovision 속성이 있지만 확장 집합 내의 VM 인스턴스에 대한 모델에는 포함되지 않습니다. 이러한 차이는 과도 프로비전이 확장 집합의 개별 VM 인스턴스가 아닌 확장 집합 전체의 속성이기 때문에 나타납니다(과도 프로비전에 대한 자세한 내용은 확장 집합 디자인 고려 사항 참조).

확장 집합 VM 인스턴스 보기

확장 집합에는 인스턴스 보기가 있는 것처럼, 확장 집합의 각 VM 인스턴스에도 고유한 인스턴스 보기가 있습니다. 확장 집합 내의 특정 VM 인스턴스에 대한 인스턴스 보기를 쿼리하려면 다음을 사용할 수 있습니다.

  • REST API에서 compute/virtualmachinescalesetvms/getinstanceview, 아래 참조:

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/virtualmachines/instanceId/instanceView?api-version={apiVersion}
    
  • Azure PowerShell에서 Get-AzVmssVm:

    Get-AzVmssVm -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId instanceId -InstanceView
    
  • Azure CLI에서 az vmss get-instance-view

    az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
    
  • resources.azure.com 또는 Azure SDK를 사용할 수도 있습니다.

정확한 출력 표시는 명령에 제공하는 옵션에 따라 달라집니다. 다음 예제는 Azure CLI의 압축된 샘플 출력입니다.

$ az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
{
  "additionalProperties": {
    "osName": "ubuntu",
    "osVersion": "16.04"
  },
  "disks": [
    {
      "name": "{name}",
      "statuses": [
        {
          "additionalProperties": {},
          "code": "ProvisioningState/succeeded",
          "displayStatus": "Provisioning succeeded",
          "time": "{time}"
        }
      ]
    }
  ],
  "statuses": [
    {
      "additionalProperties": {},
      "code": "ProvisioningState/succeeded",
      "displayStatus": "Provisioning succeeded",
      "time": "{time}"
    },
    {
      "additionalProperties": {},
      "code": "PowerState/running",
      "displayStatus": "VM running"
    }
  ],
  "vmAgent": {
    "statuses": [
      {
        "additionalProperties": {},
        "code": "ProvisioningState/succeeded",
        "displayStatus": "Ready",
        "level": "Info",
        "message": "Guest Agent is running",
        "time": "{time}"
      }
    ],
    "vmAgentVersion": "{version}"
  },
}

이러한 속성은 확장 집합에 적용되는 모든 확장을 포함하여 확장 집합 내에 있는 VM 인스턴스의 현재 런타임 상태를 설명합니다.

전역 확장 집합 속성을 업데이트하는 방법

전역 확장 집합 속성을 업데이트하려면 확장 집합 모델의 속성을 업데이트해야 합니다. 이러한 업데이트는 다음을 통해 수행할 수 있습니다.

  • REST API에서 compute/virtualmachinescalesets/createorupdate, 아래 참조:

    PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet?api-version={apiVersion}
    
  • REST API의 속성으로 Resource Manager 템플릿을 배포하여 전역 확장 집합 속성을 업데이트할 수 있습니다.

  • Azure PowerShell에서 Update-AzVmss:

    Update-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -VirtualMachineScaleSet {scaleSetConfigPowershellObject}
    
  • Azure CLI에서 az vmss update:

    • 속성을 수정하려면:

      az vmss update --set {propertyPath}={value}
      
    • 확장 집합의 목록 속성에 개체를 추가하려면:

      az vmss update --add {propertyPath} {JSONObjectToAdd}
      
    • 확장 집합의 목록 속성에서 개체를 제거하려면:

      az vmss update --remove {propertyPath} {indexToRemove}
      
    • az vmss create 명령을 사용하여 이전에 확장 집합을 배포한 경우 az vmss create 명령을 다시 실행하여 확장 집합을 업데이트할 수 있습니다. 수정하려는 속성을 제외하고 az vmss create 명령의 모든 속성이 이전과 같은지 확인합니다.

  • resources.azure.com 또는 Azure SDK를 사용할 수도 있습니다.

확장 집합 모델이 업데이트되면 새 구성이 확장 집합에서 만들어진 모든 새 VM에 적용됩니다. 그러나 확장 집합의 기존 VM에 대한 모델은 최신 전체 확장 집합을 사용해서 여전히 최신 상태로 유지해야 합니다. 각 VM에 대한 모델에는 VM이 최신 전체 확장 집합 모델로 최신 상태를 유지하는지 여부를 나타내는 latestModelApplied라는 부울 속성이 있습니다(true는 VM이 최신 모델로 최신 상태를 유지하고 있음을 의미함).

수정이 제한되는 속성

만들기 시간 속성

일부 속성은 확장 집합을 만들 때만 설정할 수 있습니다. 몇 가지 예로는 관리되는 OS 디스크 스토리지 계정 유형 및 장애 도메인이 있습니다.

현재 값에 따라서만 변경할 수 있는 속성

현재 값을 따른다는 점을 제외하고, 일부 속성을 변경할 수 있습니다. 이러한 속성은 다음과 같습니다.

  • singlePlacementGroup
  • subnet
  • imageReferenceSku
  • imageReferenceOffer
  • 가용성 영역(미리 보기)

예 1

다른 OS 버전을 사용하도록 확장 집합을 업데이트하려면 단일 호출에서 업데이트된 모든 속성을 설정해야 합니다. 이 예제에서는 Unbuntu Server 20.04에서 22.04로 변경합니다.

az vmss update \
--resource-group myResourceGroup \
--name myScaleSet \
--set virtualMachineProfile.storageProfile.imageReference.offer=0001-com-ubuntu-server-jammy \
--set virtualMachineProfile.storageProfile.imageReference.publisher=Canonical \
--set virtualMachineProfile.storageProfile.imageReference.sku=22_04-lts-gen2 \
--set virtualMachineProfile.storageProfile.imageReference.version=latest

예제 2

다른 OS 버전을 사용하도록 확장 집합을 업데이트하려면 단일 호출에서 업데이트된 모든 속성을 설정해야 합니다. 이 예제에서는 Windows Server 2016에서 Windows Server 2019로 변경합니다.

$VMSS = Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"

Set-AzVmssStorageProfile $vmss `
    -OsDiskCreateOption "FromImage" `
    -ImageReferencePublisher "MicrosoftWindowsServer" `
    -ImageReferenceOffer "WindowsServer" `
    -ImageReferenceSku "2019-datacenter" `
    -ImageReferenceVersion "latest"

Update-AzVmss -ResourceGroupName "myResourceGroup" -Name "myScaleSet" -VirtualMachineScaleSet $VMSS

변경하기 위해 할당을 취소해야 하는 속성

일부 속성은 확장 집합의 VM을 할당 취소해야만 특정 값으로 변경할 수 있습니다. 이러한 속성은 다음과 같습니다.

  • SKU 이름 - 새 VM SKU가 현재 확장 집합이 있는 하드웨어에서 지원되지 않을 경우, SKU 이름을 수정하기 전에 확장 집합에서 VM 할당을 취소해야 합니다. 자세한 내용은 Azure VM의 크기를 조정하는 방법을 참조하세요.

VM 관련 업데이트

특정 수정 내용은 전역 확장 집합 속성 대신 특정 VM에 적용될 수 있습니다. 현재 지원되는 유일한 VM 관련 업데이트는 확장 집합의 VM에서 데이터 디스크 연결/분리 작업입니다. 이 기능은 미리 보기로 제공됩니다. 자세한 내용은 미리 보기 설명서를 참조하세요.

시나리오

애플리케이션 업데이트

애플리케이션이 확장을 통해 확장 집합에 배포되는 경우, 확장 구성을 업데이트하면 업그레이드 정책에 따라 애플리케이션이 업데이트됩니다. 예를 들어, 새 버전의 스크립트를 사용자 지정 스크립트 확장에서 실행되도록 하려면 새 스크립트를 가리키도록 fileUris 속성을 업데이트할 수 있습니다. 경우에 따라, 확장 구성이 변경되지 않더라도 강제로 업데이트하려고 할 수 있습니다(예: 스크립트의 URI를 변경하지 않고 스크립트 업데이트). 이러한 경우 업데이트를 강제로 수행하도록 forceUpdateTag를 수정할 수 있습니다. Azure 플랫폼에서는 이 속성을 해석하지 않습니다. 값을 변경해도 확장이 실행되는 방식에 영향을 미치지 않습니다. 변경하면 확장이 강제로 다시 실행되기만 합니다. forceUpdateTag에 대한 자세한 내용은 확장에 대한 REST API 설명서를 참조하세요. forceUpdateTag는 사용자 지정 스크립트 확장뿐만 아니라 모든 확장에서 사용할 수 있습니다.

애플리케이션을 사용자 지정 이미지를 통해 배포하는 것도 일반적입니다. 이 시나리오는 다음 섹션에서 설명됩니다.

OS 업데이트

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

참고 항목

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

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

예제

확장 집합에 대한 OS 이미지 업데이트

이전 버전의 Ubuntu LTS 16.04를 실행하는 확장 집합이 있을 수도 있습니다. Ubuntu LTS 16.04의 최신 버전(예: 버전 16.04.201801090)으로 업데이트하려고 합니다. 이미지 참조 버전 속성은 목록에 포함되어 있지 않으므로 다음 중 한 가지 명령으로 이러한 속성을 직접 수정할 수 있습니다.

  • Azure PowerShell에서 Update-AzVmss, 아래 참조:

    Update-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -ImageReferenceVersion 16.04.201801090
    
  • Azure CLI에서 az vmss update:

    az vmss update --resource-group myResourceGroup --name myScaleSet --set virtualMachineProfile.storageProfile.imageReference.version=16.04.201801090
    

또는 확장 집합에서 사용하는 이미지를 변경할 수 있습니다. 예를 들어 확장 집합에서 사용하는 사용자 지정 이미지를 업데이트하거나 변경할 수 있습니다. 이미지 참조 ID 속성을 업데이트하여 확장 집합에서 사용하는 이미지를 변경할 수 있습니다. 이미지 참조 ID 속성은 목록에 포함되어 있지 않으므로 다음 중 한 가지 명령으로 이 속성을 직접 수정할 수 있습니다.

  • Azure PowerShell에서 Update-AzVmss, 아래 참조:

    Update-AzVmss `
        -ResourceGroupName "myResourceGroup" `
        -VMScaleSetName "myScaleSet" `
        -ImageReferenceId /subscriptions/{subscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/myNewImage
    
  • Azure CLI에서 az vmss update:

    az vmss update \
        --resource-group myResourceGroup \
        --name myScaleSet \
        --set virtualMachineProfile.storageProfile.imageReference.id=/subscriptions/{subscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/myNewImage
    

확장 집합에 대한 부하 분산 장치 업데이트

Azure Load Balancer가 있는 확장 집합이 있으며 Azure Load Balancer를 Azure Application Gateway로 바꾸려고 한다고 가정해보겠습니다. 확장 집합에 대한 부하 분산 장치 및 Application Gateway 속성은 목록에 포함되어 있으므로 속성을 직접 수정하는 대신 명령을 사용하여 목록 요소를 제거하거나 추가할 수 있습니다.

  • Azure PowerShell:

    # Get the current model of the scale set and store it in a local PowerShell object named $vmss
    $vmss=Get-AzVmss -ResourceGroupName "myResourceGroup" -Name "myScaleSet"
    
    # Create a local PowerShell object for the new desired IP configuration, which includes the reference to the application gateway
    $ipconf = New-AzVmssIPConfig -ApplicationGatewayBackendAddressPoolsId /subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/{applicationGatewayBackendAddressPoolName} -SubnetId $vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations[0].IpConfigurations[0].Subnet.Id -Name $vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations[0].IpConfigurations[0].Name
    
    # Replace the existing IP configuration in the local PowerShell object (which contains the references to the current Azure Load Balancer) with the new IP configuration
    $vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations[0].IpConfigurations[0] = $ipconf
    
    # Update the model of the scale set with the new configuration in the local PowerShell object
    Update-AzVmss -ResourceGroupName "myResourceGroup" -Name "myScaleSet" -virtualMachineScaleSet $vmss
    
  • Azure CLI:

    # Remove the load balancer backend pool from the scale set model
    az vmss update --resource-group myResourceGroup --name myScaleSet --remove virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].loadBalancerBackendAddressPools 0
    
    # Remove the load balancer backend pool from the scale set model; only necessary if you have NAT pools configured on the scale set
    az vmss update --resource-group myResourceGroup --name myScaleSet --remove virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].loadBalancerInboundNatPools 0
    
    # Add the application gateway backend pool to the scale set model
    az vmss update --resource-group myResourceGroup --name myScaleSet --add virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].ApplicationGatewayBackendAddressPools '{"id": "/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/{applicationGatewayBackendPoolName}"}'
    

참고 항목

이러한 명령은 확장 집합에 IP 구성 및 Load Balancer가 하나만 있다고 가정합니다. 여러 개 있는 경우, 0이 아닌 목록 인덱스를 사용해야 할 수 있습니다.

다음 단계

Azure CLI 또는 Azure PowerShell을 사용하여 확장 집합에서 일반 관리 작업을 수행할 수도 있습니다.