모놀리식 VM 마이그레이션 - 개요 및 설정

이 튜토리얼에서는 아직 완전히 현대화되지 않은 샘플 애플리케이션을 살펴보고 모든 서비스를 GKE로 마이그레이션하기 위해 필요한 단계를 진행합니다. 이 애플리케이션은 일부 서비스를 GKE 클러스터에서 실행하고 나머지 서비스를 VM에서 모놀리식으로 실행합니다.

이 튜토리얼은 여러 섹션으로 구분되어 있습니다.

  1. 개요 및 설정.

    이 섹션에서는 이 튜토리얼 이면의 컨텍스트를 살펴보고 나머지 튜토리얼을 진행하기 위해 필요한 인프라 및 도구를 설정합니다.

  2. 검색 및 평가(0일 차).

    그런 후 검색 도구를 사용하여 VM의 마이그레이션 적합성을 평가하고 마이그레이션 준비로 처리 클러스터를 만듭니다.

  3. 마이그레이션 및 배포(1일 차).

    마지막으로 이제 모놀리식 VM에 대해 마이그레이션 계획을 만들고, 이미지 및 데이터에 대한 전체 마이그레이션을 진행하고, 새로 생성된 아티팩트를 Kubernetes에 배포할 수 있습니다.

컨텍스트

오늘날까지도 대기업에서 사용되는 많은 기존 애플리케이션들이 모놀리식 특성을 가지며, 고유 기술 스택 또는 컴퓨팅 부하가 높은 가상 머신(VM)에서 실행됩니다. 이러한 서비스는 대규모 애플리케이션을 작동하는 데 반드시 필요한 경우가 많지만 운영 및 라이선스 비용과 같은 많은 운영 비용을 유발합니다. 하지만 기본적인 특성으로 인해 GKE 클러스터의 컨테이너와 같은 경량형 솔루션으로 VM을 마이그레이션하기 어려울 수 있습니다.

이 튜토리얼에서는 Migrate for Anthos and GKE를 활용하여 코드 변경 없이 모놀리식 서비스 및 해당 데이터베이스를 VM에서 GKE 환경으로 쉽게 이동함으로써 운영 비용 및 개발상의 어려운 문제를 줄이는 방법을 알아봅니다.

사용된 샘플 애플리케이션은 고유 트랜잭션 처리 네트워크와 데이터베이스가 모두 포함된 소매 금융 서비스를 시뮬레이션하는 Bank of Anthos입니다.

Bank of Anthos의 웹 프런트엔드, 사용자, 연락 서비스, 계정 데이터베이스는 GKE의 컨테이너에서 실행되는 이미 컨테이너화된 마이크로서비스입니다. 하지만 모놀리식 트랜잭션 원장과 트랜잭션 데이터베이스는 아직 단일 가상 머신에서 실행되고 있습니다. 현재 워크플로를 중단하지 않으면서 운영 비용을 낮추기 위해서는 이 VM을 GKE로 쉽게 마이그레이션할 수 있어야 합니다.

Bank of Anthos 아키텍처 다이어그램

비용

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

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

이 가이드를 마치면 만든 리소스를 삭제하여 비용이 계속 청구되지 않게 할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

필수 도구

이 튜토리얼에 사용되는 gcloud, kubectl, git, migctl 명령줄 도구가 사전 설치되어 있는 Cloud Shell을 사용하여 이 튜토리얼을 수행할 수 있습니다. Cloud Shell을 사용하면 이러한 명령줄 도구를 워크스테이션에 설치할 필요가 없습니다.

Cloud Shell을 사용하려면 다음 안내를 따르세요.

  1. Google Cloud Console로 이동합니다.
  2. Cloud Console 창 상단의 Cloud Shell 활성화 셸 활성화 버튼 버튼을 클릭합니다.

    Cloud Console 하단의 새로운 프레임에서 Cloud Shell 세션이 열리고 명령줄 프롬프트가 표시됩니다.

    Cloud Shell 세션

필수 API

Compute Engine 지원 사용 설정

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

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

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

    프로젝트 선택기로 이동

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

  6. Compute Engine API를 사용 설정합니다.

    API 사용 설정

GKE 사용 설정 및 구성

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

다음 방법 중 하나를 사용하여 기본 gcloud 설정을 진행합니다.

  • gcloud init를 사용하여 기본값 설정 과정을 진행합니다.
  • gcloud config를 사용하여 프로젝트 ID, 영역, 리전을 개별적으로 설정합니다.

gcloud init 사용

One of [--zone, --region] must be supplied: Please specify location 오류가 표시되면 이 섹션을 완료합니다.

  1. gcloud init를 실행하고 다음 안내를 따르세요.

    gcloud init

    원격 서버에서 SSH를 사용하는 경우 --console-only 플래그를 사용하여 다음 명령어로 브라우저를 실행하지 못하게 할 수 있습니다.

    gcloud init --console-only
  2. 안내를 따라 gcloud에서 Google Cloud 계정을 사용하도록 승인합니다.
  3. 새 구성을 만들거나 기존 구성을 선택합니다.
  4. Google Cloud 프로젝트를 선택합니다.
  5. 영역 클러스터의 기본 Compute Engine 영역이나 리전 또는 Autopilot 클러스터의 리전을 선택합니다.

gcloud config 사용

  • 기본 프로젝트 ID를 설정합니다.
    gcloud config set project PROJECT_ID
  • 영역 클러스터를 사용하는 경우 기본 컴퓨팅 영역을 설정합니다.
    gcloud config set compute/zone COMPUTE_ZONE
  • Autopilot 또는 리전 클러스터를 사용하는 경우 기본 컴퓨팅 리전을 설정합니다.
    gcloud config set compute/region COMPUTE_REGION
  • gcloud를 최신 버전으로 업데이트합니다.
    gcloud components update

Bank of Anthos 배포

이 섹션에서는 원장 모놀리식 VM을 Compute Engine에 배포하고 Bank of Anthos의 나머지 서비스가 수행될 GKE 클러스터를 만듭니다.

  1. Bank of Anthos 모놀리식 배포에 필요한 환경 변수를 설정합니다.

    export PROJECT_ID=PROJECT_ID
    export ZONE=COMPUTE_ZONE
    
  2. Bank of Anthos 저장소를 홈 디렉터리에 클론합니다.

    git clone https://github.com/GoogleCloudPlatform/bank-of-anthos ${HOME}/bank-of-anthos
    
  3. Bank of Anthos 원장 모놀리식을 Compute Engine에 배포합니다.

    cd ${HOME}/bank-of-anthos
    make monolith-deploy
    

    이 명령어는 이름 충돌 VM이 없는지 확인하고 Bank of Anthos ledgermonolith 이미지를 사용하여 Compute Engine에 VM을 만듭니다.

  4. 포트 8080으로 VM 인스턴스에 대한 요청을 허용하는 방화벽 규칙을 만듭니다. 이 포트는 프런트엔드 서비스가 원장 모놀리식과 통신하는 데 사용됩니다.

    gcloud compute --project=PROJECT_ID firewall-rules create default-allow-http \
      --direction=INGRESS --priority=1000 --network=default --action=ALLOW \
      --rules=tcp:8080 --source-ranges=0.0.0.0/0 --target-tags=monolith
    
  5. 나머지 Bank of Anthos 서비스를 호스팅하는 GKE 클러스터를 만듭니다.

    gcloud container clusters create boa-cluster \
      --project=PROJECT_ID --zone=COMPUTE_ZONE \
      --machine-type=e2-standard-4 --num-nodes=4 \
      --enable-stackdriver-kubernetes --subnetwork=default
    
  6. 클러스터가 생성되었으면 사용자 인증 정보를 가져오고 이를 가리키도록 Kubernetes 컨텍스트를 설정합니다.

    gcloud container clusters get-credentials boa-cluster --zone COMPUTE_ZONE
    
  7. GKE가 원장 모놀리식 VM과 통신하는 방법을 기술하기 위해 사용된 ConfigMap에 프로젝트 ID를 대체합니다.

    sed -i 's/\[PROJECT_ID\]/'PROJECT_ID'/g' ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml
    

    이 파일을 보고 변경사항이 성공적으로 적용되었는지 확인합니다.

    cat ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml | grep ADDR
    

    프로젝트 ID가 원장 서비스 호스트에 보간된 것으로 확인되어야 합니다.

    TRANSACTIONS_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    BALANCES_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    HISTORY_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    CONTACTS_API_ADDR: "contacts:8080"
    USERSERVICE_API_ADDR: "userservice:8080
    
  8. 클러스터에 여러 Bank of Anthos 서비스를 적용합니다.

    cd ${HOME}/bank-of-anthos/
    kubectl apply -f src/ledgermonolith/config.yaml
    kubectl apply -f extras/jwt/jwt-secret.yaml
    kubectl apply -f kubernetes-manifests/accounts-db.yaml
    kubectl apply -f kubernetes-manifests/userservice.yaml
    kubectl apply -f kubernetes-manifests/contacts.yaml
    kubectl apply -f kubernetes-manifests/frontend.yaml
    kubectl apply -f kubernetes-manifests/loadgenerator.yaml
    

    다음 명령어를 사용하여 Pod 상태를 확인할 수 있습니다.

    kubectl get pods
    

    모든 Pod가 작동되고 실행되는 데 몇 분 정도 걸릴 수 있습니다.

    NAME                           READY   STATUS    RESTARTS   AGE
    accounts-db-0                  1/1     Running   0          51s
    contacts-d5dcdc87c-5l9xf       1/1     Running   0          50s
    frontend-5768bd978-s6vkq       1/1     Running   0          50s
    loadgenerator-8485dfd-wjvst    1/1     Running   0          50s
    userservice-8477dfcb46-htw96   1/1     Running   0          51s
    
  9. 모든 Pod가 Running으로 설정되면 frontend LoadBalancer 서비스의 외부 IP 주소를 찾을 수 있습니다.

    kubectl get service frontend
    
    NAME       TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
    frontend   LoadBalancer   10.79.248.161   ##.##.##.##.    80:31304/TCP   4m
    
  10. 마지막으로 브라우저를 열고 위에 있는 외부 IP 주소로 웹페이지를 방문합니다. HTTPS 대신 HTTP를 사용하세요.

    http://EXTERNAL_IP
    

    기본 사용자 인증 정보로 로그인하고 대시보드에서 트랜잭션을 볼 수 있어야 합니다. 나열된 트랜잭션은 현재 VM에 호스팅된 원장 모놀리식에서 시작됩니다.

    Bank of Anthos 스크린샷

다음 단계

필요한 API를 사용 설정하고 Bank of Anthos 설정을 배포했으므로, 이 튜토리얼의 다음 섹션인 검색 및 평가로 이동할 수 있습니다. 여기에서는 마이그레이션 검색 도구를 사용하여 VM이 Migrate for Anthos and GKE 도구를 사용한 마이그레이션에 적합한지 여부를 평가하는 방법을 알아봅니다.

이 튜토리얼을 마쳤으면 Google Cloud 프로젝트 및 리소스를 삭제하는 것을 잊지 마세요.

삭제

불필요한 Google Cloud 요금이 부과되지 않도록 하려면 작업이 완료되는 즉시 이 튜토리얼에 사용된 리소스를 삭제해야 합니다. 이러한 리소스는 다음과 같습니다.

  • boa-cluster GKE 클러스터
  • ledgermonolith-service Compute Engine VM

이러한 리소스를 수동으로 삭제하거나 아래 단계에 따라 프로젝트를 삭제하여, 모든 리소스를 삭제할 수도 있습니다.

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

    리소스 관리로 이동

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