자습서: Azure CLI를 사용하여 Virtual Machine Scale Set 만들기 및 관리

Virtual Machine Scale Set를 사용하면 가상 머신 세트를 배포하고 관리할 수 있습니다. Virtual Machine Scale Set의 수명 주기 동안 하나 이상의 관리 작업을 실행해야 합니다. 이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • 리소스 그룹 만들기
  • 가상 머신 크기 집합 만들기
  • 확장 및 축소
  • VM 인스턴스 중지, 시작 및 다시 시작

Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.

사전 요구 사항

이 문서에는 Azure CLI 버전 2.0.29 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.

리소스 그룹 만들기

Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다. 가상 머신 확장 집합보다 먼저 리소스 그룹을 만들어야 합니다. az group create 명령을 사용하여 리소스 그룹을 만듭니다. 이 예제에서는 eastus 지역에 myResourceGroup이라는 리소스 그룹을 만듭니다.

az group create --name myResourceGroup --location eastus

리소스 그룹 이름은 이 자습서에서 확장 집합 만들거나 수정할 때 지정됩니다.

확장 집합 만들기

Important

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

az vmss create 명령을 사용하여 Virtual Machine Scale Set를 만듭니다. 다음 예제에서는 myScaleSet이라는 확장 집합을 만들고 SSH 키가 없는 경우 이 키를 생성합니다.

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --orchestration-mode flexible \
  --image <SKU image> \
  --admin-username azureuser \
  --generate-ssh-keys

확장 집합 리소스와 VM 인스턴스를 모두 만들고 구성하는 데 몇 분 정도 걸립니다. 트래픽을 개별 VM 인스턴스로 배포하기 위해 부하 분산 장치도 생성됩니다.

확장 집합의 VM 인스턴스에 대한 정보 보기

확장 집합의 VM 인스턴스 목록을 보려면 다음과 같이 az vm list를 사용합니다.

az vm list --resource-group myResourceGroup --output table

다음 예제 출력에서는 확장 집합의 두 VM 인스턴스를 보여 줍니다.

Name                 ResourceGroup    Location    Zones
-------------------  ---------------  ----------  -------
myScaleSet_instance1  myResourceGroup  eastus
myScaleSet_instance2  myResourceGroup  eastus

특정 VM 인스턴스에 대한 추가 정보를 보려면 az vm show를 사용하고 VM 이름을 지정합니다.

az vm show --resource-group myResourceGroup --name myScaleSet_instance1
{
  "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-0396c71c",
        "primary": true,
        "resourceGroup": "myResourceGroup"
      }
    ]
  },
  "osProfile": {
    "adminUsername": "azureuser",
    "allowExtensionOperations": true,
    "computerName": "myScaleSN30BP1",
    "linuxConfiguration": {
      "disablePasswordAuthentication": true,
      "enableVmAgentPlatformUpdates": false,
      "patchSettings": {
        "assessmentMode": "ImageDefault",
        "patchMode": "ImageDefault"
      },
      "provisionVmAgent": true,
      "ssh": {
        "publicKeys": [
          {
            "keyData": "ssh-rsa",
            "path": "/home/azureuser/.ssh/authorized_keys"
          }
        ]
      }
    },
    "requireGuestProvisionSignal": true,
    "secrets": [],
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "storageProfile": {
    "dataDisks": [],
    "imageReference": {
      "exactVersion": "XXXXX",
      "offer": "myOffer",
      "publisher": "myPublisher",
      "sku": "mySKU",
      "version": "latest"
    },
    "osDisk": {
      "caching": "ReadWrite",
      "createOption": "FromImage",
      "deleteOption": "Delete",
      "diskSizeGb": 30,
      "managedDisk": {
        "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/myScaleSet_instance1_disk1",
        "resourceGroup": "myResourceGroup",
        "storageAccountType": "Premium_LRS"
      },
      "name": "myScaleSet_instance1_disk1",
      "osType": "Linux",
    }
  },
  "tags": {},
  "timeCreated": "2022-11-16T20:32:15.024581+00:00",
  "type": "Microsoft.Compute/virtualMachines",
  "virtualMachineScaleSet": {
    "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet",
    "resourceGroup": "myResourceGroup"
  },
}

특정 VM 인스턴스 크기로 확장 집합 만들기

자습서의 시작 부분에서 확장 집합을 만들 때 VM 인스턴스에 대해 Standard_D1_v2의 기본 VM SKU가 제공되었습니다. az vm list-sizes의 출력에 따라 다른 VM 인스턴스 크기를 지정할 수 있습니다. 다음 예제에서는 Standard_F1의 VM 인스턴스 크기를 지정하는 --vm-sku 매개 변수를 사용하여 확장 집합을 만듭니다. 모든 확장 집합 리소스와 VM 인스턴스를 만들고 구성하는 데 몇 분이 걸리기 때문에 다음 확장 집합을 배포할 필요가 없습니다.

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --orchestration-mode flexible \
  --image <SKU image> \
  --vm-sku Standard_F1 \
  --admin-user azureuser \
  --generate-ssh-keys

확장 집합의 용량 변경

자습서의 시작 부분에서 확장 집합을 만들 때 두 개의 VM 인스턴스가 기본적으로 배포되었습니다. az vmss create--instance-count 매개 변수를 지정하여 확장 집합으로 만든 인스턴스의 수를 변경할 수 있습니다. 기존 확장 집합의 VM 인스턴스 수를 늘리거나 줄이려면 용량을 수동으로 변경할 수 있습니다. 확장 집합은 필요한 수의 VM 인스턴스를 만들거나 제거한 다음, 부하 분산 장치에서 트래픽을 분산하도록 구성합니다.

확장 집합의 VM 인스턴스 수를 수동으로 늘리거나 줄이려면 az vmss scale을 사용합니다. 다음 예제에서는 확장 집합의 VM 인스턴스 수를 3으로 설정합니다.

az vmss scale \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --new-capacity 3

확장 집합의 용량을 업데이트하는 데 몇 분 정도가 걸립니다. 현재 확장 집합의 인스턴스 수를 보려면 az vm list를 사용하고 연결된 리소스 그룹에 대해 쿼리합니다.

az vm list --resource-group myResourceGroup --output table
Name                 ResourceGroup    Location    Zones
-------------------  ---------------  ----------  -------
myScaleSet_instance1  myResourceGroup  eastus
myScaleSet_instance2  myResourceGroup  eastus
myScaleSet_instance3  myResourceGroup  eastus

확장 집합에서 VM 인스턴스 중지 및 할당 취소

확장 집합에서 모든 VM 인스턴스를 중지하려면 az vmss stop을 사용합니다.

az vmss stop \
  --resource-group myResourceGroup \
  --name myScaleSet

확장 집합에서 개별 VM 인스턴스를 중지하려면 az vm stop을 사용하고 인스턴스 이름을 지정합니다.

az vm stop \
  --resource-group myResourceGroup \
  --name myScaleSet_instance1

중지된 VM 인스턴스는 할당된 상태로 유지되며 컴퓨팅 요금이 계속 발생합니다. 대신 VM 인스턴스의 할당을 취소하고 스토리지 요금만 발생하도록 하려면 az vm deallocate를 사용하고 할당 취소하려는 인스턴스 이름을 지정합니다.

az vm deallocate \
  --resource-group myResourceGroup \
  --name myScaleSet_instance1

확장 집합에서 VM 인스턴스 시작

확장 집합에서 모든 VM 인스턴스를 시작하려면 az vmss start를 사용합니다.

az vmss start \
  --resource-group myResourceGroup \
  --name myScaleSet

확장 집합에서 개별 VM 인스턴스를 시작하려면 az vm start를 사용하고 인스턴스 이름을 지정합니다.

az vm start \
  --resource-group myResourceGroup \
  --name myScaleSet_instance1

확장 집합에서 VM 인스턴스 다시 시작

확장 집합에서 모든 VM 인스턴스를 다시 시작하려면 az vmss restart를 사용합니다.

az vmss restart \
  --resource-group myResourceGroup \
  --name myScaleSet

확장 집합에서 개별 VM 인스턴스를 다시 시작하려면 az vm restart를 사용하고 인스턴스 이름을 지정합니다.

az vm restart \
  --resource-group myResourceGroup \
  --name myScaleSet_instance1

리소스 정리

리소스 그룹을 삭제하면 VM 인스턴스, 가상 네트워크 및 디스크와 같이 포함된 리소스도 모두 삭제됩니다. --no-wait 매개 변수는 작업이 완료될 때까지 대기하지 않고 프롬프트로 제어를 반환합니다. --yes 매개 변수는 작업을 수행하는 추가 프롬프트 없이 리소스를 삭제할 것인지 확인합니다.

az group delete --name myResourceGroup --no-wait --yes

다음 단계

이 자습서에서는 Azure CLI를 사용하여 몇 가지 기본적인 확장 집합 만들기 및 관리 작업을 수행하는 방법을 알아보았습니다.

  • 리소스 그룹 만들기
  • 확장 집합 만들기
  • 특정 VM 크기 보기 및 사용
  • 수동으로 확장 집합 크기 조정
  • 확장 집합 중지, 시작 및 다시 시작과 같은 일반적인 확장 집합 관리 작업 수행

다음 자습서로 이동하여 확장 집합 인스턴스에 연결하는 방법을 알아봅니다.