확장성이 뛰어난 애플리케이션을 위한 자동 확장 사용


이 튜토리얼에서는 애플리케이션이 변화하는 트래픽의 양에 따라 대응하도록 자동 확장을 사용하여 애플리케이션을 호스팅하는 VM 인스턴스의 수를 자동으로 조정하는 방법을 설명합니다.

자동 확장을 사용하려면 관리형 인스턴스 그룹에 애플리케이션을 호스팅합니다. 관리형 인스턴스 그룹은 모두 같은 애플리케이션을 실행하며 하나의 항목으로 관리할 수 있는 인스턴스 모음입니다. 관리형 인스턴스 그룹에 자동 확장이 사용 설정된 경우 자동 확장 정책으로 지정한 목표 값에 따라 인스턴스 그룹의 VM 수가 자동으로 늘거나(수평 확장) 줄어듭니다(수평 축소).

이 튜토리얼에는 관리형 인스턴스 그룹에서 웹 애플리케이션을 실행하고, 자동 확장을 설정하고, 네트워크 액세스를 구성하며, 부하 급증 및 하락 시뮬레이션을 통해 자동 확장을 관찰하기 위한 세부적인 단계가 포함되어 있습니다. 이러한 기능을 사용해 본 경험의 유무에 따라 다르겠지만 이 튜토리얼을 완료하는 데 약 20분이 소요됩니다.

목표

  • 관리형 인스턴스 그룹에서 데모 웹 애플리케이션을 실행합니다.
  • 트래픽 급증과 하락을 시뮬레이션하여 자동 확장의 효과를 관찰합니다.

비용

이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

  • Compute Engine

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

시작하기 전에

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

애플리케이션 아키텍처

애플리케이션에는 다음과 같은 Compute Engine 구성요소가 포함됩니다.

  • 방화벽 규칙: Google Cloud 방화벽을 사용하면 인스턴스의 트래픽을 허용 또는 거부할 수 있습니다.
  • 인스턴스 템플릿: 관리형 인스턴스 그룹에 각 VM 인스턴스를 만들 때 사용하는 템플릿
  • 리전 관리형 인스턴스 그룹: 여러 영역에 걸쳐 동일한 애플리케이션을 실행하는 VM 인스턴스 그룹

웹 애플리케이션 실행

이 튜토리얼에서는 GitHub에 저장된 웹 애플리케이션을 사용합니다. 애플리케이션이 구현된 방법에 대해 자세히 알아보려면 GitHub에서 GoogleCloudPlatform/python-docs-samples 저장소를 참조하세요.

인스턴스 템플릿에 시작 스크립트를 포함하여 관리형 인스턴스 그룹의 모든 VM에서 웹 애플리케이션을 실행합니다. 웹 애플리케이션으로 가는 HTTP 트래픽을 허용하려면 방화벽 규칙을 만듭니다.

방화벽 규칙 만들기

방화벽 규칙을 만들어 웹 애플리케이션으로 가는 HTTP 트래픽을 허용합니다.

  1. Google Cloud 콘솔에서 방화벽 페이지로 이동합니다.

    방화벽으로 이동

  2. 방화벽 규칙 만들기를 클릭합니다.

  3. 이름default-allow-http를 입력합니다.

  4. 네트워크default로 설정합니다.

  5. Specified target tags를 선택하도록 대상을 설정합니다.

  6. 대상 태그에서 http-server를 입력합니다.

  7. 소스 필터IPv4 ranges로 설정합니다.

  8. 소스 IPv4 범위0.0.0.0/0을 입력합니다.

    모든 IP 주소에 대한 액세스를 허용합니다.

  9. 프로토콜 및 포트에서 지정된 프로토콜 및 포트를 선택합니다. 그런 다음 TCP를 선택하고 80을 입력하여 HTTP 트래픽에 대한 액세스를 허용합니다.

  10. 만들기를 클릭합니다.

인스턴스 템플릿 만들기

시작 시 데모 웹 애플리케이션을 실행하는 인스턴스 템플릿을 만듭니다.

  1. Google Cloud 콘솔에서 인스턴스 템플릿 페이지로 이동합니다.

    인스턴스 템플릿으로 이동

  2. 인스턴스 템플릿 만들기를 클릭합니다.

  3. 이름autoscaling-web-app-template을 입력합니다.

  4. 머신 구성에서 머신 유형e2-standard-2로 설정합니다.

  5. 방화벽에서 HTTP 트래픽 허용 체크박스를 선택합니다. 이렇게 하면 이 템플릿에서 생성되는 각 인스턴스에 http-server 네트워킹 태그가 적용됩니다.

  6. 고급 옵션 섹션을 펼쳐 고급 설정을 확인합니다.

  7. 관리 섹션을 펼칩니다.

  8. 자동화 섹션에서 다음 시작 스크립트를 입력합니다.

    sudo apt update && sudo apt -y install git gunicorn3 python3-pip
    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/compute/managed-instances/demo
    sudo pip3 install -r requirements.txt
    sudo gunicorn3 --bind 0.0.0.0:80 app:app --daemon
    

    이 스크립트는 각 VM이 시작 시 웹 애플리케이션을 실행하도록 합니다.

  9. 만들기를 클릭합니다.

관리형 인스턴스 그룹 만들기

리전 인스턴스 그룹을 만들어 웹 애플리케이션 실행을 시작합니다.

  1. Google Cloud 콘솔에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹으로 이동

  2. 인스턴스 그룹 만들기를 클릭하여 새 인스턴스 그룹을 만듭니다.

  3. 새 관리형 인스턴스 그룹(스테이트리스(Stateless))을 선택합니다.

  4. 이름autoscaling-web-app-group를 입력합니다.

  5. 인스턴스 템플릿에서 autoscaling-web-app-template을 선택합니다.

  6. 위치에서 다중 영역을 선택합니다.

  7. 리전에서 us-central1을 선택합니다.

  8. 영역에 대해 드롭다운 목록에서 다음 영역을 선택합니다.

    • us-central1-b
    • us-central1-c
    • us-central1-f
  9. 인스턴스 그룹의 자동 확장을 구성합니다.

    1. 자동 확장 모드에서 사용: 그룹에 인스턴스 추가 및 삭제를 선택합니다.
    2. 최소 인스턴스 수3으로 설정합니다.

    3. 최대 인스턴스 수6으로 설정합니다.

    4. 초기화 기간120초로 설정합니다.

    5. 자동 확장 측정항목에서 측정항목 유형으로 CPU 사용률을 선택합니다. 자동 확장 측정항목에 대한 자세한 내용은 자동 확장 정책을 참조하세요.

    6. 대상 CPU 사용률60로 설정합니다.

    7. 완료를 클릭합니다.

  10. 자동 복구 아래의 상태 점검 드롭다운 목록에서 상태 점검 없음을 선택합니다.

  11. 만들기를 클릭합니다. 인스턴스 그룹 페이지로 리디렉션됩니다.

  12. 인스턴스가 실행 중인지 확인하려면 다음 안내를 따르세요.

    1. Google Cloud 콘솔의 인스턴스 그룹 페이지에서 autoscaling-web-app-group을 클릭하여 해당 그룹의 인스턴스를 확인합니다.
    2. 외부 IP에서 해당 인스턴스를 연결할 IP 주소를 클릭합니다. 새 브라우저 탭이 열리고 데모 웹 애플리케이션이 표시됩니다.

      인스턴스에 대한 정보를 나열하고 작업 버튼이 있는 데모 웹 애플리케이션.

      작업을 마치면 데모 웹 애플리케이션의 브라우저 탭을 닫습니다.

자동 확장 관찰

자동 확장 동작에 대한 자세한 내용은 자동 확장 의사 결정 이해를 참조하세요.

자동 확장 모니터링

생성한 인스턴스 그룹은 CPU 사용량을 기반으로 하는 자동 확장 정책을 사용합니다. 즉, 자동 확장 처리 기능은 60%의 대상 CPU 사용률을 유지하기 위해 필요에 따라 그룹을 늘리거나 줄입니다.

인스턴스 그룹의 크기와 CPU 사용률을 모니터링하려면 Google Cloud 콘솔의 자동 확장 차트를 사용하세요.

  1. autoscaling-web-app-group 인스턴스 그룹의 인스턴스 그룹 페이지에서 모니터링 탭을 클릭합니다.
  2. 그룹 크기 차트에서 자동 확장을 모니터링할 수 있습니다. 그래프에는 시간에 따른 그룹 내 VM 인스턴스 수를 나타내는 인스턴스가 표시됩니다.
  3. 선택사항: 자동 확장된 용량과 사용률을 비교하여 모니터링하려면 자동 확장 처리 사용률(CPU) 차트를 참조하세요. 그래프에는 그룹 내 VM 인스턴스의 총 CPU 사용률인 사용률과 그룹의 누적 대상 CPU 사용률(대상 CPU 사용률과 VM 인스턴스 수를 곱한 값)인 용량이 표시됩니다.

    자동 확장은 용량사용률과 일치시키기 위해 가능한 경우 인스턴스 수를 변경합니다.

이 창을 열어 둡니다.

수평 확장 시뮬레이션

수평 확장은 인스턴스 그룹의 평균 CPU 사용률이 대상 값보다 현저히 높을 때 발생합니다. 수평 확장 중에 자동 확장 처리는 CPU 사용률이 대상 CPU 사용률 값까지 낮아지거나 인스턴스 그룹 크기가 6으로 설정된 최대 인스턴스 수와 같아질 때까지 점진적으로 인스턴스 그룹의 크기를 늘립니다.

수평 확장을 트리거하려면 인스턴스의 CPU 사용률을 늘립니다.

  1. Google Cloud 콘솔에서 Cloud Shell을 엽니다.

    Cloud Shell 열기

    Google Cloud 콘솔 하단에 Cloud Shell이 열립니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  2. 프로젝트 ID의 로컬 bash 변수를 만듭니다.

    export PROJECT_ID=[PROJECT_ID]
    

    여기서 PROJECT_ID는 Cloud Shell의 각 새 줄에 표시되는 현재 프로젝트의 프로젝트 ID입니다.

    user@cloudshell:~ ([PROJECT_ID])$
    
  3. 다음 bash 스크립트를 실행합니다. 이 스크립트는 데모 웹 애플리케이션 인스턴스의 부하를 늘리고, 이로 인해 CPU 사용률이 높아집니다. 몇 분 후 CPU 사용률이 대상 값을 초과하면 자동 확장 기능이 인스턴스 그룹 크기를 늘립니다.

    export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "autoscaling-web-app-group")
    for i in $MACHINES;
    do
      NAME=$(echo "$i" | cut -f1 -d,)
      IP=$(echo "$i" | cut -f2 -d,)
      echo "Simulating high load for instance $NAME"
      curl -q -s "http://$IP/startLoad" >/dev/null --retry 2
    done
    
  4. Google Cloud 콘솔에서 모니터링 탭을 엽니다.

    몇 분 후 모니터링 탭에 CPU 사용률 증가가 표시되며 그에 따라 자동 확장 기능은 인스턴스의 수를 늘려 용량을 늘립니다.

    또한 개요 탭에 이제 6개의 인스턴스가 나열되는 것을 볼 수 있습니다.

두 개의 창을 모두 열어 둡니다.

축소 시뮬레이션

축소는 인스턴스 그룹의 평균 CPU 사용률이 대상 값보다 현저히 낮을 때 발생합니다. 축소 중에 자동 확장 처리는 CPU 사용률이 대상 CPU 사용률 값까지 높아지거나 인스턴스 그룹 크기가 3으로 설정된 최소 인스턴스 수와 같아질 때까지 점진적으로 인스턴스 그룹의 크기를 줄입니다.

축소를 트리거하려면 인스턴스의 CPU 사용률을 낮춥니다.

  1. 다음 bash 스크립트를 실행합니다. 이 스크립트는 데모 웹 애플리케이션 인스턴스의 부하를 줄이고, 이로 인해 CPU 사용률이 낮아집니다. 몇 분 후 CPU 사용률이 대상 값 미만으로 떨어지면 자동 확장 처리 기능이 인스턴스 그룹 크기를 줄입니다.

    export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "autoscaling-web-app-group")
    for i in $MACHINES;
    do
      NAME=$(echo "$i" | cut -f1 -d,)
      IP=$(echo "$i" | cut -f2 -d,)
      echo "Simulating low load for instance $NAME"
      curl -q -s "http://$IP/stopLoad" >/dev/null --retry 2
    done
    
  2. Google Cloud 콘솔에서 모니터링 탭을 엽니다.

    몇 분 후 모니터링 탭에 CPU 사용률이 낮아졌음이 표시됩니다. 부하가 일관적으로 낮음을 확인하는 안정화 시간이 지난 후 자동 확장 기능은 인스턴스 수를 줄여 용량을 낮춥니다.

    또한 개요 탭에 3개의 인스턴스만 나열되는 것을 볼 수 있습니다.

마치면 두 개의 창을 모두 닫습니다.

삭제

튜토리얼을 완료한 후에는 만든 리소스를 삭제하여 할당량 사용을 중지하고 요금이 청구되지 않도록 할 수 있습니다. 다음 섹션은 이러한 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.

이 튜토리얼용으로 별도의 프로젝트를 만든 경우 전체 프로젝트를 삭제합니다. 그렇지 않고 프로젝트에 유지하려는 리소스가 있는 경우 이 튜토리얼에서 만든 리소스만 삭제합니다.

프로젝트 삭제

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

특정 리소스 삭제

인스턴스 그룹 삭제

  1. In the Google Cloud console, go to the Instance groups page.

    Go to Instance groups

  2. Select the checkbox for your autoscaling-web-app-group instance group.
  3. To delete the instance group, click Delete.

인스턴스 템플릿 삭제

  1. Google Cloud 콘솔에서 인스턴스 템플릿 페이지로 이동합니다.

    인스턴스 템플릿으로 이동

  2. autoscaling-web-app-template 옆의 체크박스를 클릭합니다.

  3. 페이지 상단에 있는 삭제를 클릭합니다. 새 창에서 삭제를 클릭하여 삭제를 확인합니다.

방화벽 규칙 삭제

  1. Google Cloud 콘솔에서 방화벽 규칙 페이지로 이동합니다.

    방화벽 규칙으로 이동

  2. default-allow-http 방화벽 규칙 옆의 체크박스를 클릭합니다.

  3. 삭제를 클릭합니다. 새 창에서 삭제를 클릭하여 삭제를 확인합니다.

다음 단계