모놀리식 VM 마이그레이션 - 마이그레이션 및 배포
처리 클러스터 설정과 Migrate to Containers가 설치되어 있으면 마이그레이션을 수행할 수 있습니다. 먼저 VM 마이그레이션 계획을 생성할 뿐만 아니라 처리 클러스터에 대해 관련 마이그레이션 소스를 추가해야 합니다. 요구에 따라 계획을 검토하고 맞춤설정한 후 Kubernetes 아티팩트를 생성하고 나머지 애플리케이션이 이미 실행되고 있는 GKE 클러스터에 배포할 수 있습니다.
목표
이 튜토리얼에서는 다음 방법을 배웁니다.
- 마이그레이션 소스를 추가합니다.
- VM 워크로드로부터 마이그레이션 계획을 세웁니다.
- 마이그레이션 계획을 검토하고 맞춤설정합니다.
- 마이그레이션 아티팩트를 생성하고 GKE 클러스터에 배포합니다.
시작하기 전에
이 튜토리얼은 검색 및 평가의 후속 튜토리얼입니다. 이 튜토리얼을 시작하려면 먼저 해당 페이지의 안내에 따라 모놀리식 VM에서 검색 도구를 실행하고 처리 클러스터를 만듭니다.
모놀리식 VM 중지
마이그레이션을 수행하려면 먼저 마이그레이션 프로세스 중 데이터가 이동될 때 발생할 수 있는 의도치 않은 중단 또는 데이터 손상을 방지하기 위해 모놀리식 VM을 중지해야 합니다.
Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
ledgermonolith-service
VM에 대해 행 왼쪽 끝에 있는 체크박스를 선택합니다.페이지 상단에서 중지 버튼을 클릭하여 VM을 중지합니다.
VM이 완전히 중지될 때까지 기다립니다. 1~2분 정도 걸릴 수 있습니다.
VM을 마이그레이션합니다.
VM을 마이그레이션하려면 소스 플랫폼(Compute Engine 또는 VMWare)을 나타내는 마이그레이션 소스를 만들어야 합니다.
소스 추가
Google Cloud 콘솔에서 Migrate to Containers 페이지를 엽니다.
소스 및 후보 탭에서 소스 추가를 클릭합니다.
처리 클러스터 선택 아래의 드롭다운 목록에서 마이그레이션 처리 클러스터를 선택하고 다음을 클릭합니다.
소스 이름을
ledgermonolith-source
로 지정합니다.소스 유형을 Compute Engine으로 설정하고 다음을 클릭합니다.
소스 프로젝트로 올바른 프로젝트가 선택되었는지 확인합니다.
새 서비스 계정 만들기를 선택하여 Compute Engine을 마이그레이션 소스로 사용할 수 있는 서비스 계정을 만드세요.
계속을 클릭한 후 소스 추가를 클릭합니다.
이전 생성
Google Cloud 콘솔에서 Migrate to Containers 페이지를 엽니다.
마이그레이션 탭에서 마이그레이션 만들기를 클릭합니다.
마이그레이션 이름을
ledgermonolith-migration
으로 설정합니다.앞 단계에서 만든 마이그레이션 소스(
ledgermonolith-source
)를 선택합니다.워크로드 유형을
Linux system container
로 설정합니다.소스 인스턴스 이름을
ledgermonolith-service
로 설정합니다.마이그레이션 만들기를 클릭합니다. 1~2분 정도 걸릴 수 있습니다.
마이그레이션이 완료되면 상태 열에 마이그레이션 계획 생성됨이 표시됩니다.
표에서 마이그레이션의 이름
ledgermonolith-migration
을 클릭하여 세부정보 페이지를 엽니다.데이터 구성 탭에서 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
그러면 마이그레이션이 진행되는 동안 데이터베이스가 유지됩니다. 저장을 클릭합니다.
마이그레이션 계획 탭의
deployment
아래에서 서비스의 이름이ledgermonolith-service
, 포트가8080
, 프로토콜이TCP
인지 확인합니다. 그러면 객체가 다음과 같이 표시됩니다.... endpoints: - name: ledgermonolith-service port: 8080 protocol: TCP ...
아티팩트 저장 및 생성을 클릭하여 마이그레이션 프로세스를 시작합니다. 이 프로세스는 약 7~8분 정도 걸립니다.
이 VM의 Migrate to Containers에서 생성된 아티팩트는 다음과 같습니다.
- VM 프로세스의 Docker 이미지
- 새로 마이그레이션된 프로세스를 실행하기 위한 StatefulSet와 서비스
- 컨테이너 런타임을 저장하기 위한 네임스페이스와 DaemonSet
- PostgreSQL 데이터베이스를 저장할 PersistentVolumeClaim과 PersistentVolume
마이그레이션된 워크로드 배포
이전 섹션에서는 클러스터에 배포될 수 있는 Kubernetes 리소스 집합으로 모놀리식 VM을 성공적으로 마이그레이션했습니다. 이제 이러한 리소스를 Bank of Anthos 클러스터에 배포하고, 새로 마이그레이션된 원장 서비스에 대해 올바른 엔드포인트와 통신하도록 애플리케이션을 다시 구성하고 모두 작동하는지 확인할 수 있습니다.
이제 마이그레이션 아티팩트가 생성되었으므로 처리 클러스터에 연결하고 아티팩트를 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
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
더 이상 서비스되지 않는 원장 모놀리식 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
새 구성으로 다시 만들기 위해 모든 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
모든 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
브라우저를 열고 위에 있는 외부 IP 주소로 웹페이지를 방문합니다. HTTPS 대신 HTTP를 사용하세요.
http://EXTERNAL_IP
기본 사용자 인증 정보로 로그인하고 트랜잭션을 볼 수 있어야 합니다. 표시되는 트랜잭션은 Kubernetes 컨테이너로 마이그레이션된 원장 모놀리식에서 시작됩니다.
다음 단계
VM 워크로드에서 마이그레이션 계획을 만들어 맞춤설정하는 방법을 살펴보고 VM을 컨테이너화된 아티팩트로 마이그레이션하는 방법을 학습했으므로, 이제 이 튜토리얼의 다음 섹션인 최적화로 이동할 수 있습니다.
이 튜토리얼을 마쳤으면 Google Cloud 프로젝트 및 리소스를 삭제하는 것을 잊지 마세요.
삭제
불필요한 Google Cloud 요금이 부과되지 않도록 하려면 작업이 완료되는 즉시 이 튜토리얼에 사용된 리소스를 삭제해야 합니다. 이러한 리소스는 다음과 같습니다.
boa-cluster
GKE 클러스터migration-processing
GKE 클러스터ledgermonolith-service
Compute Engine VM
이러한 리소스를 수동으로 삭제하거나 아래 단계에 따라 프로젝트를 삭제하여, 모든 리소스를 삭제할 수도 있습니다.
다음 단계
- 최적화(2일 차)를 알아봅니다.