Migrate to Containers CLI를 사용한 Linux VM 마이그레이션

이 빠른 시작에서는 Compute Engine 가상 머신(VM) 인스턴스를 만든 다음 Migrate to Containers CLI를 사용하여 VM을 Google Kubernetes Engine(GKE)으로 마이그레이션합니다.

시작하기 전에

  1. Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 만들거나 선택합니다.

    프로젝트 선택기로 이동

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

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

    Compute Engine API 사용 설정

  4. GKE API 사용 설정 내용을 참조합니다.

    GKE API 사용 설정

소스 VM으로 사용할 웹 서버가 있는 Compute Engine VM 만들기

이 섹션에서는 마이그레이션 완료 후 테스트에 사용할 수 있는 Hello World! 웹 페이지를 제공하는 Compute Engine VM을 생성하는 방법에 대해 설명합니다.

  1. Google Cloud 콘솔에서 셸 활성화 버튼Cloud Shell 활성화를 클릭합니다.

    Google Cloud 콘솔로 이동

  2. VM을 만듭니다.

    gcloud compute instances create quickstart-source-vm \
      --zone=us-central1-a --machine-type=e2-medium  \
      --subnet=default --scopes="cloud-platform" \
      --tags=http-server,https-server --image=ubuntu-2204-jammy-v20240208 \
      --image-project=ubuntu-os-cloud --boot-disk-size=10GB --boot-disk-type=pd-standard \
      --boot-disk-device-name=quickstart-source-vm
    

    VM 만들기가 완료될 때까지 몇 분 정도 기다립니다.

  3. HTTP를 통해 인스턴스에 대한 요청을 허용하는 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create default-allow-http \
      --direction=INGRESS --priority=1000 --network=default --action=ALLOW \
      --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=http-server
    
  4. VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  5. VM quickstart-source-vm에 연결하려면 VM의 행을 찾은 다음 SSH를 클릭합니다.

    연결이 새 탭에서 설정됩니다.

  6. quickstart-source-vm 명령어 탭에서 apache2 패키지를 설치합니다.

    sudo apt-get update && sudo apt-get install apache2 -y
    

    Apache를 설치하면 운영체제가 자동으로 Apache 서버를 시작합니다.

  7. 동일한 탭에서 Apache 웹 서버 기본 웹페이지를 새 페이지로 덮어씁니다.

    echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' | sudo tee /var/www/html/index.html
    
  8. VM 인스턴스 페이지로 돌아가서 quickstart-source-vm에 표시된 외부 IP 주소를 복사합니다.

  9. 브라우저 주소 표시줄에 VM의 IP 주소를 붙여넣습니다. http://를 프리픽스로 사용합니다.

    Hello World! 페이지가 나타납니다.

로컬 머신으로 사용할 Compute Engine VM 만들기

이 섹션에서는 소스 VM 마이그레이션을 위한 다양한 Migrate to Containers 작업을 수행하기 위해 로컬 머신으로 사용할 수 있는 Linux VM을 만듭니다.

  1. Google Cloud 콘솔에서 셸 활성화 버튼Cloud Shell 활성화를 클릭합니다.

    Google Cloud 콘솔로 이동

  2. VM을 만듭니다.

    gcloud compute instances create quickstart-local-vm \
      --zone=us-central1-a --machine-type=e2-medium  \
      --subnet=default --scopes="cloud-platform" \
      --tags=http-server,https-server --image=ubuntu-2204-jammy-v20240208 \
      --image-project=ubuntu-os-cloud --boot-disk-size=50GB --boot-disk-type=pd-standard \
      --boot-disk-device-name=quickstart-local-vm
    

    VM 만들기가 완료될 때까지 몇 분 정도 기다립니다.

GKE 클러스터 만들기

이 섹션에서는 Google Cloud에서 GKE 클러스터를 만들고 이 빠른 시작 뒷부분에서 컨테이너화된 워크로드를 배포합니다.

  • Cloud Shell에서 새 Kubernetes 클러스터를 만듭니다.

    gcloud container clusters create quickstart-cluster \
      --zone=us-central1-a --machine-type=e2-medium \
      --image-type=ubuntu_containerd --num-nodes=1 \
      --logging=SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER
    

    클러스터 만들기가 완료될 때까지 몇 분 정도 기다립니다.

마이그레이션을 수행할 로컬 VM 준비

  1. VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. VM quickstart-local-vm에 연결하려면 VM의 행을 찾은 다음 SSH를 클릭합니다.

    연결이 새 탭에서 설정됩니다.

  3. quickstart-local-vm 명령어 탭에서 Google Cloud CLI를 설치합니다.

    # Import the Google Cloud public key.
    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg
    
    # Add the gcloud CLI distribution URI as a package source
    echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
    
    # Update and install gcloud
    sudo apt-get update && sudo apt-get install google-cloud-cli
    
    # Get started
    gcloud init
    

    gcloud CLI 설정을 완료하려면 quickstart-local-vm 명령어 탭에 표시된 안내를 따릅니다.

    1. 여러 작업을 수행하는 데 사용할 계정을 선택하려면 1을 입력합니다.
    2. VM을 만든 프로젝트를 선택하려면 1을 입력합니다.
    3. 기본 리전 및 영역 구성을 건너뛰려면 n을 입력합니다.
  4. Docker를 설치하고 루트가 아닌 사용자가 컨테이너를 실행하도록 허용합니다.

    # Download the convenience script
    curl -fsSL https://get.docker.com -o install-docker.sh
    
    # Install Docker
    sudo sh install-docker.sh
    
    # Allow the non-root user to access Docker
    sudo usermod -aG docker $USER
    
    # Activate the group changes
    newgrp docker
    
  5. Skaffold를 설치합니다.

    curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 && \
    sudo install skaffold /usr/local/bin/
    
  6. Migrate to Containers CLI를 다운로드합니다.

    curl -O "https://m2c-cli-release.storage.googleapis.com/$(curl -s https://m2c-cli-release.storage.googleapis.com/latest)/linux/amd64/m2c"
    chmod +x ./m2c
    

소스 VM 마이그레이션

마이그레이션에는 일반적으로 소스 VM 파일 시스템 복사, 파일 시스템을 분석하여 마이그레이션 계획 만들기, 마이그레이션 아티팩트 생성의 세 단계가 포함됩니다.

다음 섹션에서는 Migrate to Containers CLI를 사용해서 로컬 Linux VM으로 소스 VM을 마이그레이션하는 방법을 설명합니다.

소스 VM 파일 시스템 복사

소스 VM 파일 시스템을 복사할 때 Migrate to Containers CLI는 기본 필터를 사용해서 복사된 파일 시스템 크기를 줄입니다. 하지만 Apache 서버를 시작할 수 있도록 하려면 서버에 /var/log 디렉터리가 필요하며 이 디렉터리는 기본 필터에서 삭제됩니다.

이 섹션에서는 /var/log/*가 소스 VM 파일 시스템과 함께 복사되도록 기본 필터를 수정하는 방법을 설명합니다.

  1. quickstart-local-vm 명령어 탭에서 filters.txt 파일의 기본 Migrate to Containers 필터 목록을 가져옵니다.

    ./m2c copy default-filters > filters.txt
    
  2. 기본 필터를 수정하려면 다음 안내를 따르세요.

    1. 텍스트 편집기에서 filters.txt 파일을 엽니다.

      vi filters.txt
      
    2. 파일을 변경하려면 i를 누릅니다.

    3. 다음 문을 삭제합니다.

      - /var/log/*
      
    4. 파일을 저장하고 텍스트 편집기를 종료하려면 Esc를 누른 후 :wq를 입력합니다.

  3. 소스 머신의 파일 시스템을 복사합니다.

    ./m2c copy gcloud \
      --project PROJECT_ID --zone us-central1-a \
      --vm-name quickstart-source-vm --output quickstart-vm-filesystem \
      --filters filters.txt
    

    PROJECT_ID를 프로젝트의 ID로 바꿉니다.

    소스 머신의 파일 시스템 사본은 quickstart-vm-filesystem 디렉터리에서 제공됩니다.

마이그레이션 계획 만들기

  • quickstart-local-vm 명령어 탭에서 마이그레이션 계획을 만듭니다.

    ./m2c analyze \
      --source quickstart-vm-filesystem --plugin linux-vm-container \
      --output analysis-output
    

    분석이 완료되면 마이그레이션 계획인 config.yaml이 포함된 analysis-output이라는 새 디렉터리가 생성됩니다.

마이그레이션 아티팩트 생성

  • quickstart-local-vm 명령어 탭에서 마이그레이션 아티팩트를 생성합니다.

    ./m2c generate --input analysis-output --output migration-artifacts
    

    생성된 마이그레이션 아티팩트가 migration-artifacts 디렉터리에 추가됩니다.

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

이 섹션에서는 마이그레이션된 워크로드를 로컬 VM quickstart-local-vm에서 Google Cloud에서 실행되는 GKE 클러스터로 배포합니다.

  1. quickstart-local-vm 명령어 탭에서 gke-gcloud-auth-plugin 플러그인을 설치합니다.

    sudo apt-get install google-cloud-sdk-gke-gcloud-auth-plugin
    
  2. kubectl을 설치합니다.

    sudo apt-get install kubectl
    
  3. quickstart-cluster 클러스터에 연결합니다.

    gcloud container clusters get-credentials quickstart-cluster
      --zone us-central1-a --project PROJECT_ID
    
  4. migration-artifacts 폴더를 엽니다.

    cd migration-artifacts
    
  5. 워크로드를 인터넷에 노출하려면 deployment_spec.yaml 파일에 새 LoadBalancer 서비스를 추가합니다. deployment_spec.yaml 파일을 수정하려면 다음을 수행합니다.

    1. 텍스트 편집기에서 deployment_spec.yaml 파일을 엽니다.

      vi deployment_spec.yaml
      
    2. 파일을 변경하려면 i를 누릅니다.

    3. 이름이 linux-systemService 객체를 찾습니다. 다음과 비슷하게 표시됩니다.

      ---
      apiVersion: v1
      kind: Service
      metadata:
      creationTimestamp: null
      labels:
         anthos-migrate.cloud.google.com/type: linux-container
         migrate-for-anthos-optimization: "true"
         migrate-for-anthos-version: m2c-cli-1.2.2
      name: linux-system
      spec:
      clusterIP: None
      selector:
         app: linux-system
      type: ClusterIP
      
      ---
      
    4. linux-system 바로 뒤에 hello-service라는 다른 Service 객체를 추가합니다.

      ---
      apiVersion: v1
      kind: Service
      metadata:
      creationTimestamp: null
      labels:
         anthos-migrate.cloud.google.com/type: linux-container
         migrate-for-anthos-optimization: "true"
         migrate-for-anthos-version: m2c-cli-1.2.2
      name: linux-system
      spec:
      clusterIP: None
      selector:
         app: linux-system
      type: ClusterIP
      
      ---
      # Add the hello-service object
      apiVersion: v1
      kind: Service
      metadata:
      name: hello-service
      spec:
      selector:
         app: linux-system
      ports:
         - protocol: TCP
           port: 80
           targetPort: 80
      type: LoadBalancer
      
      ---
      
    5. 파일을 저장하고 텍스트 편집기를 종료하려면 Esc를 누른 후 :wq를 입력합니다.

  6. 마이그레이션된 VM을 배포합니다.

    skaffold run -d eu.gcr.io/PROJECT_ID
    
  7. 마이그레이션된 VM의 외부 IP 주소를 가져옵니다.

    kubectl get service hello-service
    
  8. 웹 서버가 준비되면 추가한 hello-service의 외부 IP 주소가 표시됩니다.

    NAME            TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)        AGE
    hello-service   LoadBalancer   10.23.241.124   EXTERNAL_IP   80:32611/TCP   5m4s
    
  9. 마이그레이션이 성공했는지 확인하려면 새 브라우저 탭을 열고 외부 IP 주소의 웹페이지를 방문합니다.

    http://EXTERNAL_IP
    

    HTTPS가 아닌 HTTP를 사용해야 합니다.

  10. 화면에 Hello World! 텍스트가 표시되면 VM 마이그레이션이 성공한 것입니다.

    마이그레이션된 워크로드에 액세스할 수 없는 경우 알려진 문제 해결 방법을 참조하세요.

삭제

이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.

GKE 클러스터 삭제

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

    GKE로 이동

  2. quickstart-cluster를 선택한 후 삭제를 클릭합니다.
  3. 확인 메시지가 표시되면 삭제를 다시 클릭합니다.

VM 삭제

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

    VM 인스턴스로 이동

  2. quickstart-source-vm 이름을 클릭합니다.
  3. 인스턴스 세부정보 페이지 상단에서 삭제를 클릭합니다.
  4. quickstart-local-vm이라는 이름을 클릭합니다.
  5. 인스턴스 세부정보 페이지 상단에서 삭제를 클릭합니다.

다음 단계