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

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

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

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

목표

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

비용

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

  • Compute Engine

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

시작하기 전에

  1. Google 계정에 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

  2. GCP Console의 프로젝트 선택기 페이지에서 GCP 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기 페이지로 이동

  3. Google Cloud Platform 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

애플리케이션 아키텍처

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

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

웹 애플리케이션 실행

이 가이드에서는 GitHub에 저장된 웹 애플리케이션을 사용합니다. 애플리케이션이 구현된 방법에 대해 자세히 알아보려면 Google Cloud GitHub 저장소를 참조하세요.

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

방화벽 규칙 만들기

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

  1. Cloud Console에서 방화벽 페이지로 이동합니다.
    방화벽 페이지로 이동
  2. 방화벽 규칙 만들기를 클릭합니다.
  3. 이름default-allow-http를 입력합니다.
  4. 네트워크default로 설정합니다.
  5. Specified target tags를 선택하도록 타겟을 설정합니다.
  6. 타겟 태그에서 http-server를 입력합니다.
  7. 소스 필터IP ranges로 설정합니다.
  8. 소스 IP 범위0.0.0.0/0을 입력하여 모든 IP 주소에 대한 액세스를 허용합니다.
  9. 포트 및 프로토콜에서 지정된 프로토콜 및 포트를 선택합니다.
    그런 다음 tcp를 선택하고 80을 입력하여 HTTP 트래픽에 대한 액세스를 허용합니다.
  10. 만들기를 클릭합니다.

인스턴스 템플릿 만들기

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

  1. Cloud Console에서 인스턴스 템플릿 페이지로 이동합니다.
    인스턴스 템플릿 페이지로 이동
  2. 인스턴스 템플릿 만들기를 클릭합니다.
  3. 이름autoscaling-web-app-template을 입력합니다.
  4. 머신 구성에서 머신 유형을 n1-standard-1로 설정합니다.
  5. 부팅 디스크에서 이미지를 Debian GNU/Linux 9 (stretch)로 설정합니다.
  6. 방화벽에서 HTTP 트래픽 허용 체크박스를 선택합니다. 이렇게 하면 이 템플릿에서 생성되는 각 인스턴스에 http-server 네트워킹 태그가 적용됩니다.
  7. 관리, 보안, 디스크, 네트워킹, 단독 테넌시를 클릭하여 고급 설정을 표시합니다. 다수의 탭이 나타납니다.
  8. 관리 탭에서 자동화를 찾고 다음 시작 스크립트를 입력합니다.

    sudo apt-get update && sudo apt-get install git gunicorn3 python3-pip -y
    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
    

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

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

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

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

  1. Cloud Console에서 인스턴스 그룹 페이지로 이동합니다.
    인스턴스 그룹 페이지로 이동
  2. 인스턴스 그룹 만들기를 클릭하여 새 인스턴스 그룹을 만듭니다.
  3. 이름autoscaling-web-app-group을 입력합니다.
  4. 위치에서 멀티 영역을 선택합니다.

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

  6. 영역 구성 드롭다운 메뉴를 클릭하여 영역을 표시합니다. 다음 영역을 선택합니다.

    • us-central1-b
    • us-central1-c
    • us-central1-f
  7. 인스턴스 템플릿에서 autoscaling-web-app-template을 선택합니다.

  8. 인스턴스 그룹의 자동 확장을 구성합니다.

    1. 자동 확장에서 켜기를 선택합니다.
    2. 자동 확장 정책을 CPU 사용량으로 설정합니다. 다른 자동 확장 정책에 대해 자세히 알아보려면 자동 확장 정책 및 목표 사용률을 참조하세요.

    3. 대상 CPU 사용량60%로 설정합니다.

    4. 최소 인스턴스 수3으로 설정합니다.

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

    6. 대기 시간120초로 설정합니다.

  9. 상태 확인에서 상태 확인 없음을 선택합니다.

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

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

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

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

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

자동 확장 관찰

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

자동 확장 모니터링

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

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

  1. autoscaling-web-app-group 인스턴스 그룹의 인스턴스 그룹 페이지에서 모니터링 탭을 클릭합니다.
  2. CPU 사용률 및 자동 확장을 모니터링하려면 왼쪽 드롭다운 메뉴에서 자동 확장된 크기를 선택하고 오른쪽 드롭다운 메뉴에서 cpu를 선택합니다.

    두 개의 그래프가 표시됩니다.

    • 위쪽 그래프에는 인스턴스 그룹의 인스턴스 수인 크기가 표시됩니다.
    • 아래쪽 그래프에는 인스턴스 그룹의 평균 CPU 사용률인 사용률과 인스턴스 그룹의 누적 대상 CPU 사용률인 용량이 표시됩니다.

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

이 창을 열어 둡니다.

수직 확장(수평 확장) 시뮬레이션

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

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

  1. Cloud Console에서 Cloud Shell을 사용하여 터미널을 엽니다.

    Cloud Shell 열기

    Cloud Console 하단에 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. Cloud Console에서 모니터링 탭을 엽니 다.

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

    모니터에서 CPU 사용률이 증가했음을 보여줍니다. 곧 그룹 크기가 인스턴스 3개에서 인스턴스 6개로 늘어납니다.

    또한 구성원 탭에 이제 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. Cloud Console에서 모니터링 탭을 엽니 다.

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

    모니터에서 CPU 사용률이 감소했음을 보여줍니다. 약 10분 후 그룹의 크기가 인스턴스 6개에서 인스턴스 3개로 감소합니다.

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

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

삭제

자동 확장 가이드를 완료한 후에는 할당량을 차지하지 않고 이후에 요금이 청구되지 않도록 GCP에서 만든 리소스를 삭제할 수 있습니다. 다음 섹션에서는 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.

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

프로젝트 삭제

  1. GCP Console에서 리소스 관리 페이지로 이동합니다.

    리소스 관리 페이지로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제 를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

특정 리소스 삭제

인스턴스 그룹 삭제

  1. GCP Console에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹 페이지로 이동

  2. autoscaling-web-app-group 인스턴스 그룹의 체크박스를 클릭합니다.
  3. 삭제()를 클릭하여 인스턴스 그룹을 삭제합니다.

인스턴스 템플릿 삭제

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

    인스턴스 템플릿 페이지로 이동

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

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

방화벽 규칙 삭제

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

    방화벽 규칙 페이지로 이동

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

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

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Compute Engine 문서