자습서: Azure CLI를 사용하여 가상 머신 확장 집합의 크기 자동 조정Tutorial: Automatically scale a virtual machine scale set with the Azure CLI

확장 집합을 만들 때 실행하려는 VM 인스턴스 수를 정의합니다.When you create a scale set, you define the number of VM instances that you wish to run. 애플리케이션 수요가 변경될 때는 VM 인스턴스 수를 자동으로 늘리거나 줄일 수 있습니다.As your application demand changes, you can automatically increase or decrease the number of VM instances. 자동 크기 조정 기능을 사용하면 고객 수요에 따라 조정하거나 앱 수명 주기 동안 애플리케이션 성능 변화에 대응할 수 있습니다.The ability to autoscale lets you keep up with customer demand or respond to application performance changes throughout the lifecycle of your app. 이 자습서에서는 다음 방법에 대해 알아봅니다.In this tutorial you learn how to:

  • 확장 집합에 자동 크기 조정 사용Use autoscale with a scale set
  • 자동 크기 조정 규칙 만들기 및 사용Create and use autoscale rules
  • VM 인스턴스 스트레스 테스트 및 자동 크기 조정 규칙 트리거Stress-test VM instances and trigger autoscale rules
  • 요구량이 줄면 자동으로 다시 크기 조정Autoscale back in as demand is reduced

Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.If you don't have an Azure subscription, create a free account before you begin.

사전 요구 사항Prerequisites

  • Azure Cloud Shell에서 Bash 환경을 사용합니다.Use the Bash environment in Azure Cloud Shell.

    새 창에서 Cloud Shell 시작Launch Cloud Shell in a new window

  • 원하는 경우 Azure CLI를 설치하여 CLI 참조 명령을 실행합니다.If you prefer, install the Azure CLI to run CLI reference commands.

    • 로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다.If you're using a local installation, sign in to the Azure CLI by using the az login command. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다.To finish the authentication process, follow the steps displayed in your terminal. 추가 로그인 옵션은 Azure CLI를 사용하여 로그인을 참조하세요.For additional sign-in options, see Sign in with the Azure CLI.

    • 메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다.When you're prompted, install Azure CLI extensions on first use. 확장에 대한 자세한 내용은 Azure CLI에서 확장 사용을 참조하세요.For more information about extensions, see Use extensions with the Azure CLI.

    • az version을 실행하여 설치된 버전과 종속 라이브러리를 찾습니다.Run az version to find the version and dependent libraries that are installed. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.To upgrade to the latest version, run az upgrade.

  • 이 자습서에는 Azure CLI 버전 2.0.32 이상이 필요합니다.This tutorial requires version 2.0.32 or later of the Azure CLI. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.If using Azure Cloud Shell, the latest version is already installed.

확장 집합 만들기Create a scale set

다음과 같이 az group create를 사용하여 리소스 그룹을 만듭니다.Create a resource group with az group create as follows:

az group create --name myResourceGroup --location eastus

이제 az vmss create를 사용하여 가상 머신 확장 집합을 만듭니다.Now create a virtual machine scale set with az vmss create. 다음 예제에서는 인스턴스 수가 2 인 확장 집합을 만들고, SSH 키가 없는 경우 이 키를 생성합니다.The following example creates a scale set with an instance count of 2, and generates SSH keys if they do not exist:

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --image UbuntuLTS \
  --upgrade-policy-mode automatic \
  --instance-count 2 \
  --admin-username azureuser \
  --generate-ssh-keys

자동 크기 조정 프로필 정의Define an autoscale profile

확장 집합에서 자동 크기 조정을 활성화하려면 먼저 자동 크기 조정 프로필을 정의합니다.To enable autoscale on a scale set, you first define an autoscale profile. 이 프로필은 기본, 최소, 최대 확장 집합 용량을 정의합니다.This profile defines the default, minimum, and maximum scale set capacity. 이러한 제한을 통해 연속적으로 VM 인스턴스를 만들지 않고 비용을 제어하고, 축소 이벤트에 유지되는 최소 인스턴스 수로 허용 가능한 성능의 균형을 유지할 수 있습니다.These limits let you control cost by not continually creating VM instances, and balance acceptable performance with a minimum number of instances that remain in a scale-in event. az monitor autoscale create를 사용하여 자동 크기 조정 프로필을 만듭니다.Create an autoscale profile with az monitor autoscale create. 다음 예제에서는 기본 및 최소 용량으로 VM 인스턴스 2 개를 설정하고 최대 용량으로 10 개를 설정합니다.The following example sets the default, and minimum, capacity of 2 VM instances, and a maximum of 10:

az monitor autoscale create \
  --resource-group myResourceGroup \
  --resource myScaleSet \
  --resource-type Microsoft.Compute/virtualMachineScaleSets \
  --name autoscale \
  --min-count 2 \
  --max-count 10 \
  --count 2

자동 크기 확장 규칙 만들기Create a rule to autoscale out

애플리케이션 수요가 증가하면 확장 집합의 VM 인스턴스 부하가 증가합니다.If your application demand increases, the load on the VM instances in your scale set increases. 증가된 로드가 단순한 요구가 아닌 일관된 요구인 경우 확장 집합의 VM 인스턴스 수를 늘리도록 자동 크기 조정 규칙을 구성할 수 있습니다.If this increased load is consistent, rather than just a brief demand, you can configure autoscale rules to increase the number of VM instances in the scale set. 이러한 VM 인스턴스를 만들고 애플리케이션을 배포하면 확장 집합이 부하 분산 장치를 통해 트래픽을 분산하기 시작합니다.When these VM instances are created and your applications are deployed, the scale set starts to distribute traffic to them through the load balancer. 모니터링할 메트릭(예: CPU 또는 디스크), 애플리케이션 로드가 지정된 임계값을 충족해야 하는 기간, 확장 집합에 추가할 VM 인스턴스 수를 제어합니다.You control what metrics to monitor, such as CPU or disk, how long the application load must meet a given threshold, and how many VM instances to add to the scale set.

평균 CPU 로드가 5분간 70%를 초과할 경우 az monitor autoscale rule create를 사용하여 확장 집합의 VM 인스턴스 수를 늘리는 규칙을 만들어 보겠습니다.Let's create a rule with az monitor autoscale rule create that increases the number of VM instances in a scale set when the average CPU load is greater than 70% over a 5-minute period. 규칙이 트리거되면 VM 인스턴스 수가 3만큼 늘어납니다.When the rule triggers, the number of VM instances is increased by three.

az monitor autoscale rule create \
  --resource-group myResourceGroup \
  --autoscale-name autoscale \
  --condition "Percentage CPU > 70 avg 5m" \
  --scale out 3

자동 크기 축소 규칙 만들기Create a rule to autoscale in

저녁이나 주말에는 애플리케이션 수요가 줄어들 수 있습니다.On an evening or weekend, your application demand may decrease. 이 감소된 로드가 일정 기간 동안 일관성 있게 유지될 경우 확장 집합의 VM 인스턴스 수를 줄이도록 자동 크기 조정 규칙을 구성할 수 있습니다.If this decreased load is consistent over a period of time, you can configure autoscale rules to decrease the number of VM instances in the scale set. 이 규모 감축 작업은 현재 수요를 충족하는 데 필요한 수의 인스턴스만 실행하므로 확장 집합의 실행 비용을 줄입니다.This scale-in action reduces the cost to run your scale set as you only run the number of instances required to meet the current demand.

평균 CPU 로드가 5분 동안 30% 미만일 경우 az monitor autoscale rule create를 사용하여 확장 집합의 VM 인스턴스 수를 줄이는 다른 규칙을 만듭니다.Create another rule with az monitor autoscale rule create that decreases the number of VM instances in a scale set when the average CPU load then drops below 30% over a 5-minute period. 다음 예제에서는 VM 인스턴스 수를 축소하는 규칙을 정의합니다.The following example defines the rule to scale in the number of VM instances by one:

az monitor autoscale rule create \
  --resource-group myResourceGroup \
  --autoscale-name autoscale \
  --condition "Percentage CPU < 30 avg 5m" \
  --scale in 1

확장 집합에 CPU 로드 생성Generate CPU load on scale set

자동 크기 조정 규칙을 테스트하려면 확장 집합의 VM 인스턴스에 약간의 CPU 로드를 생성합니다.To test the autoscale rules, generate some CPU load on the VM instances in the scale set. 시뮬레이션된 CPU 로드로 인해 자동 크기 조정 규칙이 확장되고 VM 인스턴스 수가 늘어납니다.This simulated CPU load causes the autoscales to scale out and increase the number of VM instances. 시뮬레이션된 CPU 로드가 감소하면 자동 크기 조정 규칙이 축소되고 VM 인스턴스 수가 줄어듭니다.As the simulated CPU load is then decreased, the autoscale rules scale in and reduce the number of VM instances.

먼저 az vmss list-instance-connection-info를 사용하여 확장 집합의 VM 인스턴스에 연결할 주소와 포트를 나열합니다.First, list the address and ports to connect to VM instances in a scale set with az vmss list-instance-connection-info:

az vmss list-instance-connection-info \
  --resource-group myResourceGroup \
  --name myScaleSet

다음 예제 출력에서는 NAT(Network Address Translation) 규칙에서 트래픽을 전달하는 인스턴스 이름, 부하 분산 장치의 공용 IP 주소 및 포트 번호를 보여 줍니다.The following example output shows the instance name, public IP address of the load balancer, and port number that the Network Address Translation (NAT) rules forward traffic to:

{
  "instance 1": "13.92.224.66:50001",
  "instance 3": "13.92.224.66:50003"
}

SSH를 첫 번째 VM 인스턴스에 연결합니다.SSH to your first VM instance. 앞의 명령과 같이 -p 매개 변수를 사용하여 사용자 고유의 공용 IP 주소와 포트 번호를 지정합니다.Specify your own public IP address and port number with the -p parameter, as shown from the preceding command:

ssh azureuser@13.92.224.66 -p 50001

로그인한 후 stress 유틸리티를 설치합니다.Once logged in, install the stress utility. CPU 로드를 생성하는 10stress 작업자를 시작합니다.Start 10 stress workers that generate CPU load. 이러한 작업자는 420 초 동안 실행되어 자동 크기 조정 규칙에서 원하는 작업을 구현하는 데 충분합니다.These workers run for 420 seconds, which is enough to cause the autoscale rules to implement the desired action.

sudo apt-get update
sudo apt-get -y install stress
sudo stress --cpu 10 --timeout 420 &

stress 에서 stress: info: [2688] dispatching hogs: 10 cpu, 0 io, 0 vm, 0 hdd 와 비슷한 출력이 표시되면 Enter 키를 눌러 프롬프트로 돌아갑니다.When stress shows output similar to stress: info: [2688] dispatching hogs: 10 cpu, 0 io, 0 vm, 0 hdd, press the Enter key to return to the prompt.

stress 에서 CPU 로드를 생성하는지 확인하려면 top 유틸리티를 사용하여 활성 시스템 로드를 검사합니다.To confirm that stress generates CPU load, examine the active system load with the top utility:

top

top 을 종료한 다음, VM 인스턴스에 대한 연결을 닫습니다.Exit top, then close your connection to the VM instance. stress 가 VM 인스턴스에서 계속 실행됩니다.stress continues to run on the VM instance.

Ctrl-c
exit

이전 az vmss list-instance-connection-info에서 나열된 포트 번호를 사용하여 두 번째 VM 인스턴스에 연결합니다.Connect to second VM instance with the port number listed from the previous az vmss list-instance-connection-info:

ssh azureuser@13.92.224.66 -p 50003

stress 를 설치하고 실행한 다음, 이 두 번째 VM 인스턴스에서 10개의 작업자를 시작합니다.Install and run stress, then start ten workers on this second VM instance.

sudo apt-get -y install stress
sudo stress --cpu 10 --timeout 420 &

다시 stress 에서 stress: info: [2713] dispatching hogs: 10 cpu, 0 io, 0 vm, 0 hdd 와 비슷한 출력이 표시되면 Enter 키를 눌러 프롬프트로 돌아갑니다.Again, when stress shows output similar to stress: info: [2713] dispatching hogs: 10 cpu, 0 io, 0 vm, 0 hdd, press the Enter key to return to the prompt.

두 번째 VM 인스턴스에 대한 연결을 닫습니다.Close your connection to the second VM instance. stress 가 VM 인스턴스에서 계속 실행됩니다.stress continues to run on the VM instance.

exit

활성 자동 크기 조정 규칙 모니터링Monitor the active autoscale rules

확장 집합의 VM 인스턴스 수를 모니터링하려면 watch 를 사용합니다.To monitor the number of VM instances in your scale set, use watch. 각 VM 인스턴스의 stress 에서 생성된 CPU 로드에 응답하여 자동 크기 조정 규칙에서 규모 확장 프로세스를 시작하는 데 5분이 걸립니다.It takes 5 minutes for the autoscale rules to begin the scale-out process in response to the CPU load generated by stress on each of the VM instances:

watch az vmss list-instances \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --output table

CPU 임계값이 충족되면 자동 크기 조정 규칙에서 확장 집합의 VM 인스턴스 수를 늘립니다.Once the CPU threshold has been met, the autoscale rules increase the number of VM instances in the scale set. 다음 출력에서는 확장 집합의 크기가 자동으로 확장함에 따라 생성된 세 개의 VM을 보여 줍니다.The following output shows three VMs created as the scale set autoscales out:

Every 2.0s: az vmss list-instances --resource-group myResourceGroup --name myScaleSet --output table

  InstanceId  LatestModelApplied    Location    Name          ProvisioningState    ResourceGroup    VmId
------------  --------------------  ----------  ------------  -------------------  ---------------  ------------------------------------
           1  True                  eastus      myScaleSet_1  Succeeded            myResourceGroup  4f92f350-2b68-464f-8a01-e5e590557955
           2  True                  eastus      myScaleSet_2  Succeeded            myResourceGroup  d734cd3d-fb38-4302-817c-cfe35655d48e
           4  True                  eastus      myScaleSet_4  Creating             myResourceGroup  061b4c90-0d73-49fc-a066-19eab0b3d95c
           5  True                  eastus      myScaleSet_5  Creating             myResourceGroup  4beff8b9-4e65-40cb-9652-43899309da27
           6  True                  eastus      myScaleSet_6  Creating             myResourceGroup  9e4133dd-2c57-490e-ae45-90513ce3b336

stress 가 초기 VM 인스턴스에서 중지되면 평균 CPU 로드가 정상으로 돌아갑니다.Once stress stops on the initial VM instances, the average CPU load returns to normal. 또 다른 5분이 지나면 자동 크기 조정 규칙에서 VM 인스턴스 수를 축소합니다.After another 5 minutes, the autoscale rules then scale in the number of VM instances. 규모 감축 작업에서 가장 높은 ID가 있는 VM 인스턴스를 먼저 제거합니다.Scale in actions remove VM instances with the highest IDs first. 확장 집합에서 가용성 집합 또는 가용성 영역을 사용하는 경우 규모 감축 작업은 해당 VM 인스턴스 간에 균등하게 분산됩니다.When a scale set uses Availability Sets or Availability Zones, scale in actions are evenly distributed across those VM instances. 다음 예제 출력에서는 확장 집합의 자동 크기를 확장하면서 삭제된 하나의 VM 인스턴스를 보여 줍니다.The following example output shows one VM instance deleted as the scale set autoscales in:

           6  True                  eastus      myScaleSet_6  Deleting             myResourceGroup  9e4133dd-2c57-490e-ae45-90513ce3b336

Ctrl-c을 사용하여 watch 를 종료합니다.Exit watch with Ctrl-c. 확장 집합은 5분마다 계속 축소되며, 최소 인스턴스 수인 2에 도달할 때까지 하나의 VM 인스턴스를 제거합니다.The scale set continues to scale in every 5 minutes and remove one VM instance until the minimum instance count of two is reached.

리소스 정리Clean up resources

확장 집합 및 추가 리소스를 제거하려면 az group delete를 사용하여 리소스 그룹 및 모든 해당 리소스를 삭제합니다.To remove your scale set and additional resources, delete the resource group and all its resources with az group delete. --no-wait 매개 변수는 작업이 완료될 때까지 대기하지 않고 프롬프트로 제어를 반환합니다.The --no-wait parameter returns control to the prompt without waiting for the operation to complete. --yes 매개 변수는 작업을 수행하는 추가 프롬프트 없이 리소스를 삭제할 것인지 확인합니다.The --yes parameter confirms that you wish to delete the resources without an additional prompt to do so.

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

다음 단계Next steps

이 자습서에서는 Azure CLI를 사용하여 다음과 같이 확장 집합을 자동으로 확장하거나 축소하는 방법을 알아보았습니다.In this tutorial, you learned how to automatically scale in or out a scale set with the Azure CLI:

  • 확장 집합에 자동 크기 조정 사용Use autoscale with a scale set
  • 자동 크기 조정 규칙 만들기 및 사용Create and use autoscale rules
  • VM 인스턴스 스트레스 테스트 및 자동 크기 조정 규칙 트리거Stress-test VM instances and trigger autoscale rules
  • 요구량이 줄면 자동으로 다시 크기 조정Autoscale back in as demand is reduced