모놀리식 VM 마이그레이션 - 마이그레이션 및 배포

처리 클러스터 설정과 Migrate to Containers가 설치되어 있으면 마이그레이션을 수행할 수 있습니다. 먼저 VM 마이그레이션 계획을 생성할 뿐만 아니라 처리 클러스터에 대해 관련 마이그레이션 소스를 추가해야 합니다. 요구에 따라 계획을 검토하고 맞춤설정한 후 Kubernetes 아티팩트를 생성하고 나머지 애플리케이션이 이미 실행되고 있는 GKE 클러스터에 배포할 수 있습니다.

목표

이 튜토리얼에서는 다음 방법을 배웁니다.

  • 마이그레이션 소스를 추가합니다.
  • VM 워크로드로부터 마이그레이션 계획을 세웁니다.
  • 마이그레이션 계획을 검토하고 맞춤설정합니다.
  • 마이그레이션 아티팩트를 생성하고 GKE 클러스터에 배포합니다.

시작하기 전에

이 튜토리얼은 검색 및 평가의 후속 튜토리얼입니다. 이 튜토리얼을 시작하려면 먼저 해당 페이지의 안내에 따라 모놀리식 VM에서 검색 도구를 실행하고 처리 클러스터를 만듭니다.

모놀리식 VM 중지

마이그레이션을 수행하려면 먼저 마이그레이션 프로세스 중 데이터가 이동될 때 발생할 수 있는 의도치 않은 중단 또는 데이터 손상을 방지하기 위해 모놀리식 VM을 중지해야 합니다.

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

    VM 인스턴스 페이지로 이동

  2. ledgermonolith-service VM에 대해 행 왼쪽 끝에 있는 체크박스를 선택합니다.

  3. 페이지 상단에서 중지 버튼을 클릭하여 VM을 중지합니다.

  4. VM이 완전히 중지될 때까지 기다립니다. 1~2분 정도 걸릴 수 있습니다.

VM을 마이그레이션합니다.

VM을 마이그레이션하려면 소스 플랫폼(Compute Engine 또는 VMWare)을 나타내는 마이그레이션 소스를 만들어야 합니다.

소스 추가

  1. Google Cloud 콘솔에서 Migrate to Containers 페이지를 엽니다.

    Migrate to Containers 페이지로 이동

  2. 소스 및 후보 탭에서 소스 추가를 클릭합니다.

  3. 처리 클러스터 선택 아래의 드롭다운 목록에서 마이그레이션 처리 클러스터를 선택하고 다음을 클릭합니다.

  4. 소스 이름ledgermonolith-source로 지정합니다.

  5. 소스 유형Compute Engine으로 설정하고 다음을 클릭합니다.

  6. 소스 프로젝트로 올바른 프로젝트가 선택되었는지 확인합니다.

  7. 새 서비스 계정 만들기를 선택하여 Compute Engine을 마이그레이션 소스로 사용할 수 있는 서비스 계정을 만드세요.

  8. 계속을 클릭한 후 소스 추가를 클릭합니다.

이전 생성

  1. Google Cloud 콘솔에서 Migrate to Containers 페이지를 엽니다.

    Migrate to Containers 페이지로 이동

  2. 마이그레이션 탭에서 마이그레이션 만들기를 클릭합니다.

  3. 마이그레이션 이름ledgermonolith-migration으로 설정합니다.

  4. 앞 단계에서 만든 마이그레이션 소스(ledgermonolith-source)를 선택합니다.

  5. 워크로드 유형Linux system container로 설정합니다.

  6. 소스 인스턴스 이름ledgermonolith-service로 설정합니다.

  7. 마이그레이션 만들기를 클릭합니다. 1~2분 정도 걸릴 수 있습니다.

    마이그레이션이 완료되면 상태 열에 마이그레이션 계획 생성됨이 표시됩니다.

  8. 표에서 마이그레이션의 이름 ledgermonolith-migration을 클릭하여 세부정보 페이지를 엽니다.

  9. 데이터 구성 탭에서 VM의 PostgreSQL 데이터베이스 /var/lib/postgresql을 마이그레이션할 새 볼륨을 만듭니다. 구성은 다음과 같이 표시됩니다.

    volumes:
     - deploymentPvcName: ledgermonolith-db
       folders:
      # Folders to include in the data volume, e.g. "/var/lib/postgresql"
      # Included folders contain data and state, and therefore are automatically excluded from a generated container image
       - /var/lib/postgresql
       newPvc:
         spec:
           accessModes:
           - ReadWriteOnce
           resources:
             requests:
               storage: 10G
    

    그러면 마이그레이션이 진행되는 동안 데이터베이스가 유지됩니다. 저장을 클릭합니다.

  10. 마이그레이션 계획 탭의 deployment 아래에서 서비스의 이름이 ledgermonolith-service, 포트가 8080, 프로토콜이 TCP인지 확인합니다. 그러면 객체가 다음과 같이 표시됩니다.

    ...
    endpoints:
      - name: ledgermonolith-service
        port: 8080
        protocol: TCP
    ...
    
  11. 아티팩트 저장 및 생성을 클릭하여 마이그레이션 프로세스를 시작합니다. 이 프로세스는 약 7~8분 정도 걸립니다.

    이 VM의 Migrate to Containers에서 생성된 아티팩트는 다음과 같습니다.

    • VM 프로세스의 Docker 이미지
    • 새로 마이그레이션된 프로세스를 실행하기 위한 StatefulSet와 서비스
    • 컨테이너 런타임을 저장하기 위한 네임스페이스와 DaemonSet
    • PostgreSQL 데이터베이스를 저장할 PersistentVolumeClaim과 PersistentVolume

마이그레이션된 워크로드 배포

이전 섹션에서는 클러스터에 배포될 수 있는 Kubernetes 리소스 집합으로 모놀리식 VM을 성공적으로 마이그레이션했습니다. 이제 이러한 리소스를 Bank of Anthos 클러스터에 배포하고, 새로 마이그레이션된 원장 서비스에 대해 올바른 엔드포인트와 통신하도록 애플리케이션을 다시 구성하고 모두 작동하는지 확인할 수 있습니다.

  1. 이제 마이그레이션 아티팩트가 생성되었으므로 처리 클러스터에 연결하고 아티팩트를 Cloud Shell 환경에 다운로드할 수 있습니다.

    gcloud container clusters get-credentials migration-processing --zone COMPUTE_ZONE --project PROJECT_ID
    cd ${HOME}/bank-of-anthos/src/ledgermonolith/
    migctl migration get-artifacts ledgermonolith-migration
    
  2. Bank of Anthos 클러스터에 연결하고 생성된 Kubernetes 리소스를 배포합니다. 또한 새로 마이그레이션된 Pod를 실행할 수 있도록 클러스터에 migctl을 사용하여 컨테이너 런타임을 설치합니다.

    gcloud container clusters get-credentials boa-cluster --zone COMPUTE_ZONE --project=PROJECT_ID
    migctl setup install --runtime
    kubectl apply -f ${HOME}/bank-of-anthos/src/ledgermonolith/deployment_spec.yaml
    
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for boa-cluster.
    
    applying resources to the cluster
    namespace/v2k-system created
    daemonset.apps/runtime-deploy-node created
    
    statefulset.apps/ledgermonolith-service created
    service/ledgermonolith-service-java created
    persistentvolumeclaim/data-pvc-0-4e1b2e0e-021f-422a-8319-6da201a960e5 created
    persistentvolume/pvc-4d41e0f2-569e-415d-87d9-019490f18b1c created
    
  3. 더 이상 서비스되지 않는 원장 모놀리식 VM 대신 새로운 Kubernetes Pod를 가리키도록 원장 호스트가 포함된 ConfigMap을 수정합니다.

    sed -i 's/'.c.PROJECT_ID.internal'//g' ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml
    kubectl apply -f ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml
    
  4. 새 구성으로 다시 만들기 위해 모든 Pod를 삭제합니다.

    kubectl delete pods --all
    

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

    kubectl get pods
    

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

    NAME                           READY   STATUS    RESTARTS   AGE
    accounts-db-0                  1/1     Running   0          5m43s
    contacts-d5dcdc87c-jbrhf       1/1     Running   0          5m44s
    frontend-5768bd978-xdvpl       1/1     Running   0          5m44s
    ledgermonolith-service-0       1/1     Running   0          5m44s
    loadgenerator-8485dfd-582xv    1/1     Running   0          5m44s
    userservice-8477dfcb46-rzw7z   1/1     Running   0          5m43s
    
  5. 모든 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   46m
    
  6. 브라우저를 열고 위에 있는 외부 IP 주소로 웹페이지를 방문합니다. HTTPS 대신 HTTP를 사용하세요.

    http://EXTERNAL_IP
    

    기본 사용자 인증 정보로 로그인하고 트랜잭션을 볼 수 있어야 합니다. 표시되는 트랜잭션은 Kubernetes 컨테이너로 마이그레이션된 원장 모놀리식에서 시작됩니다.

    Bank of Anthos 스크린샷

다음 단계

VM 워크로드에서 마이그레이션 계획을 만들어 맞춤설정하는 방법을 살펴보고 VM을 컨테이너화된 아티팩트로 마이그레이션하는 방법을 학습했으므로, 이제 이 튜토리얼의 다음 섹션인 최적화로 이동할 수 있습니다.

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

삭제

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

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

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

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

    리소스 관리로 이동

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