클라우드 GCP GPU 인스턴스 마이그레이션 - 100-hours-a-week/16-Hot6-wiki GitHub Wiki

GCP GPU 인스턴스 마이그레이션

1. 개요

본 문서는 commanding-fact-457111-s6 프로젝트에서 운영되던 GPU 기반 인스턴스를 gpu3-460507 프로젝트로 이전하기 위한 과정을 정리한 문서입니다.
초기에는 머신 이미지만 존재하였으며, 직접 참조가 불가능하다는 제한으로 인해 복구 가능한 커스텀 이미지를 생성하고, 이를 GCS를 통해 옮긴 후 대상 프로젝트에서 인스턴스를 복원하는 과정을 수행하였습니다.
최종적으로 새로운 프로젝트에서 인스턴스가 성공적으로 재생성되어 네트워크 연결까지 완료되었으며, 이를 기반으로 향후 동일한 작업을 자동화하거나 반복 수행할 수 있는 참고자료로 사용될 수 있습니다.

2. 목표

  • 원본 프로젝트에서 생성된 머신 이미지 기반의 인스턴스를 새 프로젝트로 마이그레이션
  • 퍼블릭 공개 없이도 안전하게 이미지 이전
  • 인스턴스가 재생성된 후 서비스 접근이 가능한 상태까지 구성

3. 계획 (Planning)

3.1 대상 리소스 정의

  • 원본 인스턴스 이름: ott-gpu-server
  • 머신 이미지: onthetop-machineimage-v1-ai
  • 커스텀 이미지로 변환 후 이름: onthetop-image-v1-ai
  • 대상 GCS 버킷: gs://onthetop-image-bucket
  • 대상 프로젝트 ID: gpu3-460507

3.2 주요 제약 조건

  • GPU 리소스 부족으로 인해 동일한 환경에서 VM 재생성 불가능
  • 머신 이미지는 프로젝트 간 공유되지 않음
  • .tar.gz로 export된 이미지 파일은 images import에서 직접 사용 불가
  • gcloud compute images import 명령은 압축 파일 미지원

3.3 해결 전략

  • 머신 이미지로부터 GPU 없는 일반 VM 생성
  • 해당 VM 디스크에서 커스텀 이미지 생성
  • 커스텀 이미지를 .tar.gz로 export 후 GCS에 저장
  • GCS 버킷 객체에 AllUsers:R ACL 부여
  • 대상 프로젝트에서 images create 명령으로 이미지 복원
  • VM 재생성 및 네트워크 구성

4. 실행 (Execution)

4.1 머신 이미지 → GPU 없는 VM 복원

gcloud compute instances create temp-vm \
  --source-machine-image=onthetop-machineimage-v1-ai \
  --machine-type=e2-standard-2 \
  --zone=asia-northeast3-a \
  --project=commanding-fact-457111-s6

4.2 디스크로부터 커스텀 이미지 생성

gcloud compute images create onthetop-image-v1-ai \
  --source-disk=temp-vm \
  --source-disk-zone=asia-northeast3-a \
  --project=commanding-fact-457111-s6

4.3 이미지 → GCS로 Export

gsutil mb -l asia-northeast3 -p commanding-fact-457111-s6 gs://onthetop-image-bucket

gcloud compute images export \
  --image=onthetop-image-v1-ai \
  --destination-uri=gs://onthetop-image-bucket/onthetop-image-v1-ai.tar.gz \
  --project=commanding-fact-457111-s6

4.4 객체에 퍼블릭 읽기 권한 부여

gsutil acl ch -u AllUsers:R gs://onthetop-image-bucket/onthetop-image-v1-ai.tar.gz

이 ACL 설정은 GCP Console에서는 객체 리스트를 보지는 못하지만, URL을 알고 있으면 직접 다운로드할 수 있는 권한을 제공합니다.

4.5 대상 프로젝트에서 이미지 복원

gcloud compute images create imported-onthetop-image \
  --source-uri=gs://onthetop-image-bucket/onthetop-image-v1-ai.tar.gz \
  --project=gpu3-460507

images create 명령은 .tar.gz 압축 파일을 기반으로 새로운 커스텀 이미지를 생성할 수 있습니다.


4.6 인스턴스 생성 및 네트워크 구성

gcloud compute instances create onthetop-prod-vm \
  --image=imported-onthetop-image \
  --image-project=gpu3-460507 \
  --zone=asia-northeast3-a \
  --machine-type=e2-standard-2 \
  --network=default \
  --tags=http-server,https-server

방화벽이 필요하다면 다음 명령을 추가로 실행합니다:

gcloud compute firewall-rules create allow-http-https \
  --allow=tcp:80,tcp:443 \
  --target-tags=http-server,https-server \
  --direction=INGRESS \
  --priority=1000 \
  --network=default

5. 결과 (Outcome)

5.1 최종 확인 사항

  • gpu3-460507 프로젝트 내에 imported-onthetop-image 이미지 생성 완료
  • 해당 이미지를 기반으로 onthetop-prod-vm 생성 성공
  • 포트 80/443에 대한 접근 가능 (방화벽 규칙 적용)
  • GCP 외부 IP를 통해 실제 서비스 확인 가능

6. 회고 체크리스트

성공적으로 수행된 점

  • VM을 정지하지 않고 운영 중인 상태에서 이미지 생성
  • 대용량(110GB) 이미지도 로컬 다운로드 없이 GCS 간 이전 성공
  • UI 및 CLI의 한계를 명확히 인지하고 우회 경로로 해결

체크리스트

  • 운영 중인 인스턴스 디스크에서 커스텀 이미지 생성 완료
  • 커스텀 이미지를 GCS로 무중단 export
  • 이미지 압축 파일에 공개 접근 권한 설정
  • .tar.gz 형식의 이미지에 대해 images create 명령으로 복구
  • 대상 프로젝트에서 커스텀 이미지 생성 성공
  • 해당 이미지를 기반으로 인스턴스 정상 생성
  • 외부 IP 및 포트 80/443 연결 확인
  • 방화벽 규칙 및 태그 설정 완료
  • 서비스 접근을 위한 네트워크 구성 검증 완료

7. 결론

본 이미지 마이그레이션 작업은 GCP의 리소스 공유 제약과 CLI 도구의 세부 제약 조건에도 불구하고,
전반적으로 안정적이며 신속하게 인프라 복원을 수행한 사례입니다.
문서화된 이 과정을 통해 향후 동일한 상황 발생 시 반복 가능한 절차로 재활용할 수 있으며,
권한 문제와 CLI 동작 방식에 대한 실전 이해를 팀 내부에 공유할 수 있는 좋은 기회가 되었습니다.