다음을 통해 공유


자습서: Azure CLI를 사용하여 Virtual Machine Scale Set 수정

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

확장 집합 모델 업데이트

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

az vmss show --resource-group myResourceGroup --name myScaleSet

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

{
  "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet",
  "location": "eastus",
  "name": "myScaleSet",
  "orchestrationMode": "Flexible",
  "platformFaultDomainCount": 1,
  "resourceGroup": "myResourceGroup",
  "sku": {
    "capacity": 2,
    "name": "Standard_DS1_v2",
    "tier": "Standard"
  },
  "timeCreated": "2022-11-29T22:16:43.250912+00:00",
  "type": "Microsoft.Compute/virtualMachineScaleSets",
    "networkProfile": {
      "networkApiVersion": "2020-11-01",
      "networkInterfaceConfigurations": [
        {
          "deleteOption": "Delete",
          "disableTcpStateTracking": false,
          "dnsSettings": {
            "dnsServers": []
          },
          "enableIpForwarding": false,
          "ipConfigurations": [
            {
              "applicationGatewayBackendAddressPools": [],
              "applicationSecurityGroups": [],
              "loadBalancerBackendAddressPools": [
                {
                  "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/loadBalancers/myScaleSetLB/backendAddressPools/myScaleSetLBBEPool",
                  "resourceGroup": "myResourceGroup"
                }
              ],
              "name": "mysca2215IPConfig",
              "privateIpAddressVersion": "IPv4",
              "subnet": {
                "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myScaleSetVNET/subnets/myScaleSetSubnet",
                "resourceGroup": "myResourceGroup"
              }
            }
          ],
          "name": "mysca2215Nic",
          "networkSecurityGroup": {
            "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myScaleSetNSG",
            "resourceGroup": "myResourceGroup"
          },
          "primary": true
        }
      ]
    },
    "osProfile": {
      "allowExtensionOperations": true,
      "computerNamePrefix": "myScaleS",
      "linuxConfiguration": {
        "disablePasswordAuthentication": true,
        "enableVmAgentPlatformUpdates": false,
        "patchSettings": {
          "assessmentMode": "ImageDefault",
          "patchMode": "ImageDefault"
        },
        "provisionVmAgent": true,
      },
    },
    "storageProfile": {
      "imageReference": {
        "offer": "0001-com-ubuntu-server-jammy",
        "publisher": "Canonical",
        "sku": "22_04-lts",
        "version": "latest"
      },
      "osDisk": {
        "caching": "ReadWrite",
        "createOption": "FromImage",
        "deleteOption": "Delete",
        "diskSizeGb": 30,
        "managedDisk": {
          "storageAccountType": "Premium_LRS"
        },
        "osType": "Linux",
      }
    },
  },
}

az vmss update를 사용하여 확장 집합의 다양한 속성을 업데이트할 수 있습니다. 예를 들어 라이선스 유형 또는 VM 인스턴스 보호 정책을 업데이트합니다.

az vmss update --name MyScaleSet --resource-group MyResourceGroup --license-type windows_server
az vmss update --name MyScaleSet --resource-group MyResourceGroup --instance-id 4 --protect-from-scale-set-actions False --protect-from-scale-in

az vmss create 명령을 사용하여 이전에 확장 집합을 배포한 경우 az vmss create 명령을 다시 실행하여 확장 집합을 업데이트할 수 있습니다. 수정하려는 속성을 제외하고 az vmss create 명령의 모든 속성이 이전과 같은지 확인합니다. 예를 들어 아래에서는 인스턴스 수를 5개로 늘입니다.

Important

2023년 11월부터 PowerShell 및 Azure CLI를 사용하여 만들어진 VM Scale Sets는 오케스트레이션 모드가 지정되지 않은 경우 기본적으로 유연한 오케스트레이션 모드로 설정됩니다. 이 변경 내용과 수행해야 할 작업에 대한 자세한 내용은 Breaking Change for VMSS PowerShell/CLI Customers - Microsoft Community Hub(VMSS PowerShell/CLI 고객을 위한 호환성이 손상되는 변경 - Microsoft 커뮤니티 허브)를 참조하세요.

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --orchestration-mode flexible \
  --image RHELRaw8LVMGen2 \
  --admin-username azureuser \
  --generate-ssh-keys \
  --instance-count 5

확장 집합에서 개별 VM 인스턴스 업데이트

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

az vm show --resource-group myResourceGroup --name myScaleSet_Instanace1

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

{
  "hardwareProfile": {
    "vmSize": "Standard_DS1_v2",
  },
  "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myScaleSet_Instance1",
  "location": "eastus",
  "name": "myScaleSet_Instance1",
  "networkProfile": {
    "networkInterfaces": [
      {
        "deleteOption": "Delete",
        "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/mysca2215Nic-5cf164f7",
        "primary": true,
        "resourceGroup": "myResourceGroup"
      }
    ]
  },
  "osProfile": {
    "allowExtensionOperations": true,
    "computerName": "myScaleset_Computer1",
    "linuxConfiguration": {
      "disablePasswordAuthentication": true,
      "enableVmAgentPlatformUpdates": false,
      "patchSettings": {
        "assessmentMode": "ImageDefault",
        "patchMode": "ImageDefault"
      },
      "provisionVmAgent": true,
    },
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "storageProfile": {
    "dataDisks": [],
    "imageReference": {
      "exactVersion": "22.04.202204200",
      "offer": "0001-com-ubuntu-server-jammy",
      "publisher": "Canonical",
      "sku": "22_04-lts",
      "version": "latest"
    },
    "osDisk": {
      "caching": "ReadWrite",
      "createOption": "FromImage",
      "deleteOption": "Delete",
      "diskSizeGb": 30,
      "managedDisk": {
        "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/myScaleSet_Instance1_disk1_e1a6c46a6b5f44d695fc9e38727267c2",
        "resourceGroup": "myResourceGroup",
        "storageAccountType": "Premium_LRS"
      },
      "name": "myScaleSet_Instance1_disk1_e1a6c46a6b5f44d695fc9e38727267c2",
      "osType": "Linux",
    }
  },
  "timeCreated": "2022-11-29T22:16:44.500895+00:00",
  "type": "Microsoft.Compute/virtualMachines",
  "virtualMachineScaleSet": {
    "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet",
    "resourceGroup": "myResourceGroup"
  },
}

이러한 속성은 확장 집합의 전체 구성이 아니라 확장 집합 내의 VM 인스턴스 구성을 설명합니다.

독립 실행형 VM과 마찬가지로 확장 집합에서 개별 VM 인스턴스에 대한 업데이트를 수행할 수 있습니다. 예를 들어 새 데이터 디스크를 인스턴스 1에 연결합니다.

az vm disk attach --resource-group myResourceGroup --vm-name myScaleSet_Instance1 --name disk_name1 --new

az vm show를 다시 실행하면 이제 VM 인스턴스에 새 디스크가 연결된 것을 볼 수 있습니다.

  "storageProfile": {
    "dataDisks": [
      {
        "caching": "None",
        "createOption": "Empty",
        "deleteOption": "Detach",
        "diskSizeGb": 1023,
        "lun": 0,
        "managedDisk": {
          "id": "/subscriptions/49d84582-7207-4a4f-824e-044e83c71887/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/disk_name1",
          "resourceGroup": "myResourceGroup",
          "storageAccountType": "Premium_LRS"
        },
        "name": "disk_name1",
        "toBeDetached": false,
      }
    ],

확장 집합에 인스턴스 추가

확장 집합에 새 VM을 추가하려고 하지만 확장 집합 모델에 나열된 것과 다른 구성 옵션을 원하는 경우가 있습니다. az vm create 명령을 사용하고 인스턴스를 추가할 확장 집합 이름을 지정하여 VM을 만드는 동안 확장 집합에 추가할 수 있습니다.

az vm create --name myNewInstance --resource-group myResourceGroup --vmss myScaleSet --image RHELRaw8LVMGen2
{
  "fqdns": "",
  "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myNewInstance",
  "location": "eastus",
  "macAddress": "60-45-BD-D7-13-DD",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.6",
  "publicIpAddress": "20.172.144.96",
  "resourceGroup": "myResourceGroup",
  "zones": ""

그런 다음, 확장 집합을 검사하면 새 인스턴스가 추가됩니다.

az vm list --resource-group myResourceGroup --output table
Name                 ResourceGroup    Location
-------------------  ---------------  ----------
myNewInstance         myResourceGroup  eastus
myScaleSet_Instance1  myResourceGroup  eastus
myScaleSet_Instance1  myResourceGroup  eastus

최신 확장 집합 모델로 VM을 최신 상태로 유지하는 방법

참고 항목

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

확장 집합에는 VM이 최신 확장 집합 모델로 최신 상태를 유지하는 방법을 결정하는 “업그레이드 정책”이 있습니다. 업그레이드 정책에 대한 세 가지 모드는 다음과 같습니다.

  • 자동 - 이 모드에서 확장 집합은 가져오는 VM의 순서를 보장하지 않습니다. 확장 집합은 모든 VM을 동시에 제거할 수 있습니다.
  • 롤링 - 이 모드에서 확장 집합은 일괄 처리 사이에 선택적 일시 중지 시간을 유지하면서 업데이트를 일괄적으로 롤아웃합니다.
  • 수동 - 이 모드에서 확장 집합 모델을 업데이트하면 수동 업데이트가 트리거될 때까지 기존 VM에 아무런 변화도 발생하지 않습니다.

확장 집합이 수동 업그레이드로 설정된 경우 az vmss update를 사용하여 수동 업그레이드를 트리거할 수 있습니다.

az vmss update --resource-group myResourceGroup --name myScaleSet

참고 항목

Service Fabric 클러스터는 자동 모드만 사용할 수 있지만 업데이트는 다르게 처리됩니다. 자세한 내용은 Service Fabric 애플리케이션 업그레이드를 참조하세요.

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

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

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

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

az vmss reimage --resource-group myResourceGroup --name myScaleSet --instance-id myScaleSet_Instance1

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

이전 버전의 Ubuntu를 실행하는 확장 집합이 있을 수도 있습니다. Ubuntu의 최신 버전(예: 버전 22.04.202204200)으로 업데이트하려고 합니다. 이미지 참조 버전 속성은 목록에 포함되어 있지 않으므로 az vmss update를 사용하여 이러한 속성을 직접 수정할 수 있습니다.

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

또는 확장 집합에서 사용하는 이미지를 변경할 수 있습니다. 예를 들어 확장 집합에서 사용하는 사용자 지정 이미지를 업데이트하거나 변경할 수 있습니다. 이미지 참조 ID 속성을 업데이트하여 확장 집합에서 사용하는 이미지를 변경할 수 있습니다. 이미지 참조 ID 속성은 목록의 일부가 아니므로 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 플랫폼 이미지를 사용하는 경우 imageReference를 수정하여 이미지를 업데이트할 수 있습니다(자세한 내용은 REST API 설명서 참조).

참고 항목

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

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

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

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

# 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이 아닌 목록 인덱스를 사용해야 할 수 있습니다.

다음 단계

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

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