Migratekit 실무 마이그레이션 가이드 - 컨버전 인스턴스 기반
본 가이드는 Migratekit을 활용하여 작성되었습니다.
Migratekit은 VMware에서 OpenStack으로 가상머신을 거의 무중단으로 마이그레이션할 수 있는 오픈소스 CLI 도구입니다.
📋 마이그레이션 사전 준비사항
1. VMware 접근 정보
다음 정보들을 미리 준비해주세요:
--vmware-endpoint YOUR_VMWARE_IP # vCenter 또는 ESXi 호스트 IP/FQDN
--vmware-username username@domain.local # VMware 관리자 계정
--vmware-password 'your_password' # VMware 계정 비밀번호
--vmware-path "/Datacenter01/vm/vm-name" # 마이그레이션할 VM의 전체 경로
2. OpenStack admin-openrc 인증 정보
OpenStack 관리자 계정의 환경 변수 파일을 준비해주세요:
export OS_AUTH_URL=https://YOUR_OPENSTACK_IP:5000
export OS_USERNAME=your_username
export OS_PASSWORD=your_password
export OS_PROJECT_NAME=your_project
export OS_PROJECT_ID=your_project_id
# ... 기타 OpenStack 환경 변수들
3. VMware VDDK (Virtual Disk Development Kit)
중요: Broadcom 공식 홈페이지에서 로그인 후 다운로드 필요
- 권장: VDDK 8.0.2 버전 사용
- 대안: VDDK 9.x 버전 사용 가능하나 심볼릭 링크 추가 작업 필요
- 참고: 테스트 시점에 8버전 다운로드 이슈가 있어 9버전을 사용한 경우가 있음
4. Migratekit 실행 환경
- Docker 컨테이너 기반: 모든 작업이 Docker 컨테이너 내에서 실행되고 완료
- 일회성 작업: 컨테이너 실행 후 자동으로 정리됨
- 의존성 포함: 필요한 모든 도구들이 Docker 이미지에 포함
🏗️ 마이그레이션 아키텍처 개요
핵심 아키텍처 흐름
실제 운영 환경에서는 전용 컨버전 인스턴스를 OpenStack 클러스터에 구축하여 마이그레이션을 수행합니다.
VMware VM ────┐
│ (VDDK를 통한 데이터 복사)
▼
컨버전 인스턴스 ──── OpenStack Cinder 볼륨 생성
│ │
│ (볼륨 연결 및 변환) │
▼ │
libvirt + virt-v2v │
패키지 설치 및 드라이버 변환 │
│ │
▼ │
볼륨 분리 ──────────────────┘
│
▼
새로운 OpenStack 인스턴스 생성 (변환된 볼륨 사용)
상세 변환 프로세스
- 데이터 복사: VMware VM의 디스크를 OpenStack Cinder 볼륨으로 복사
- 볼륨 연결: 생성된 볼륨을 컨버전 인스턴스에 연결
- OS 변환: 컨버전 인스턴스에서 virt-v2v를 사용하여 KVM 환경용 드라이버 설치
- 부팅 설정: OpenStack 환경에서 부팅 가능하도록 설정 변경
- 볼륨 분리: 변환 완료된 볼륨을 컨버전 인스턴스에서 분리
- 인스턴스 생성: 변환된 볼륨을 루트 디스크로 사용하여 새 인스턴스 생성
이는 보안, 성능, 안정성 측면에서 필수적인 아키텍처입니다.
🖥️ 컨버전 인스턴스 구성
1. 컨버전 인스턴스 요구사항
권장 스펙:
- CPU: 8 vCPU 이상
- 메모리: 16GB 이상
- 디스크: 500GB 이상 (마이그레이션할 VM 크기의 2배)
- OS: Ubuntu 22.04 LTS (24.04는 권장하지 않음)
- 네트워크: VMware 환경과 OpenStack 모두 접근 가능
2. 컨버전 인스턴스 생성
# OpenStack에서 컨버전 인스턴스 생성
openstack server create \
--image ubuntu-22.04 \
--flavor large-cpu-mem \
--network management-network \
--security-group migration-sg \
--key-name migration-key \
migratekit-converter
# 플로팅 IP 할당 (필요시)
openstack floating ip create external
openstack server add floating ip migratekit-converter <floating-ip>
3. 컨버전 인스턴스 초기 설정
# 컨버전 인스턴스에 SSH 접속 후 실행
# 시스템 업데이트
sudo apt update && sudo apt upgrade -y
# Docker 설치
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker ubuntu
# 필수 패키지 설치
sudo apt install -y \
qemu-utils \
libguestfs-tools \
python3-openstackclient \
unzip \
wget
# 재부팅 (커널 업데이트 적용)
sudo reboot
📦 VDDK 설치 및 구성
1. VDDK 다운로드 및 설치
# VMware 개발자 사이트에서 다운로드한 VDDK 파일을 컨버전 인스턴스로 전송
scp VMware-vix-disklib-8.0.2-distrib.tar.gz ubuntu@converter-ip:~/
# 컨버전 인스턴스에서 VDDK 설치
cd ~
tar -xzf VMware-vix-disklib-8.0.2-distrib.tar.gz
# VDDK 설치 경로 생성 및 복사
sudo mkdir -p /usr/lib64/vmware-vix-disklib/
sudo cp -r vmware-vix-disklib-distrib/lib64/* /usr/lib64/vmware-vix-disklib/
sudo cp -r vmware-vix-disklib-distrib/include /usr/lib64/vmware-vix-disklib/
# 권한 설정
sudo chmod -R 755 /usr/lib64/vmware-vix-disklib/
2. OpenStack 환경 변수 설정
# OpenStack 인증 정보 설정 (/home/ubuntu/openrc 파일 생성)
cat > /home/ubuntu/openrc << 'EOF'
export OS_AUTH_URL=https://YOUR_OPENSTACK_IP:5000
export OS_USERNAME=your_username
export OS_PASSWORD=your_password
export OS_PROJECT_NAME=your_project
export OS_PROJECT_ID=your_project_id
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_DOMAIN_NAME=Default
export OS_INTERFACE=internal
export OS_REGION_NAME=RegionOne
export OS_IDENTITY_API_VERSION=3
export OS_INSECURE=true
export PYTHONHTTPSVERIFY=0
export CURL_CA_BUNDLE=
EOF
# 환경 변수 로드
source /home/ubuntu/openrc
# OpenStack 연결 테스트
openstack server list
🔍 사전 정보 수집
1. govc 도구 설치 및 설정
# govc 다운로드 및 설치
cd /home/ubuntu
wget https://github.com/vmware/govmomi/releases/download/v0.30.0/govc_Linux_x86_64.tar.gz
tar -xzf govc_Linux_x86_64.tar.gz
sudo mv govc /usr/local/bin/
chmod +x /usr/local/bin/govc
# govc 환경 변수 설정
export GOVC_URL="https://username%40domain.local:password@VMWARE_IP/sdk"
export GOVC_INSECURE=1
2. VMware VM 정보 수집
# VM 목록 확인
govc find . -type m
# 특정 VM 정보 확인
govc vm.info /Datacenter01/vm/win2016-001
# 네트워크 인터페이스 및 MAC 주소 확인 (중요!)
govc device.info -vm /Datacenter01/vm/win2016-001 ethernet-*
# 예시 출력:
# Name: ethernet-0
# MAC Address: 00:50:56:bc:19:7e
# Name: ethernet-1
# MAC Address: 00:0c:29:15:80:8a
3. OpenStack 리소스 정보 수집
# 사용 가능한 Flavor 확인
openstack flavor list
# 네트워크 정보 확인
openstack network list
openstack subnet list
# 보안 그룹 확인
openstack security group list
# 실제 성공한 리소스 ID들:
# Flavor ID: 046df869-4f85-4db6-86b0-7c9c49a7734d (win2016-scsi-uefi)
# Network ID: de21bb4f-51bc-4a50-a1a1-19d1bd546dcd
# Subnet ID: bb2ced08-18be-42dd-9a5f-972d32663deb
# Security Group: 86600d2b-fd52-4e1e-ab88-165d3f971f98
🚀 실제 마이그레이션 실행
Phase 1: Migration (데이터 동기화)
여러 번 실행하여 증분 데이터 동기화:
# 환경 변수 로드
source /home/ubuntu/openrc
# 첫 번째 마이그레이션 (전체 복사)
docker run --rm --privileged --network host \
--cap-add=ALL \
--security-opt apparmor=unconfined \
--security-opt seccomp=unconfined \
-v /dev:/dev \
-v /usr/lib64/vmware-vix-disklib:/usr/lib64/vmware-vix-disklib:ro \
--env OS_AUTH_URL=https://YOUR_OPENSTACK_IP:5000 \
--env OS_USERNAME=your_username \
--env OS_PASSWORD=your_password \
--env OS_PROJECT_NAME=your_project \
--env OS_PROJECT_ID=your_project_id \
--env OS_USER_DOMAIN_NAME=Default \
--env OS_PROJECT_DOMAIN_NAME=Default \
--env OS_DOMAIN_NAME=Default \
--env OS_INTERFACE=internal \
--env OS_REGION_NAME=RegionOne \
--env OS_IDENTITY_API_VERSION=3 \
--env OS_INSECURE=true \
--env PYTHONHTTPSVERIFY=0 \
--env CURL_CA_BUNDLE= \
--env LIBGUESTFS_BACKEND=direct \
--env LIBGUESTFS_NETWORK=0 \
ghcr.io/vexxhost/migratekit:main migrate \
--vmware-endpoint YOUR_VMWARE_IP \
--vmware-username username@domain.local \
--vmware-password 'your_password' \
--vmware-path "/Datacenter01/vm/win2016-001" \
--debug
이후 증분 동기화 (업무시간 중 반복 실행):
# 동일한 명령어로 변경사항만 동기화
# 첫 실행 이후에는 훨씬 빠르게 완료됨
Phase 2: Cutover (최종 전환)
실제 성공한 Cutover 명령어:
Windows 2016 (단일 네트워크)
docker run --rm --privileged --network host \
--cap-add=ALL \
--security-opt apparmor=unconfined \
--security-opt seccomp=unconfined \
-v /dev:/dev \
-v /usr/lib64/vmware-vix-disklib:/usr/lib64/vmware-vix-disklib:ro \
--env OS_AUTH_URL=https://YOUR_OPENSTACK_IP:5000 \
--env OS_USERNAME=your_username \
--env OS_PASSWORD=your_password \
--env OS_PROJECT_NAME=your_project \
--env OS_PROJECT_ID=your_project_id \
--env OS_USER_DOMAIN_NAME=Default \
--env OS_PROJECT_DOMAIN_NAME=Default \
--env OS_DOMAIN_NAME=Default \
--env OS_INTERFACE=internal \
--env OS_REGION_NAME=RegionOne \
--env OS_IDENTITY_API_VERSION=3 \
--env OS_INSECURE=true \
--env PYTHONHTTPSVERIFY=0 \
--env CURL_CA_BUNDLE= \
--env LIBGUESTFS_BACKEND=direct \
--env LIBGUESTFS_NETWORK=0 \
ghcr.io/vexxhost/migratekit:main cutover \
--vmware-endpoint YOUR_VMWARE_IP \
--vmware-username username@domain.local \
--vmware-password 'your_password' \
--vmware-path "/Datacenter01/vm/win2016-001" \
--os-type windows \
--disk-bus-type scsi \
--debug \
--availability-zone nova \
--flavor 046df869-4f85-4db6-86b0-7c9c49a7734d \
--network-mapping mac=00:50:56:bc:19:7e,network-id=de21bb4f-51bc-4a50-a1a1-19d1bd546dcd,subnet-id=bb2ced08-18be-42dd-9a5f-972d32663deb \
--security-groups 86600d2b-fd52-4e1e-ab88-165d3f971f98 \
--run-v2v
Rocky Linux (다중 네트워크)
sudo docker run --rm --privileged --network host \
--cap-add=ALL \
--security-opt apparmor=unconfined \
--security-opt seccomp=unconfined \
-v /dev:/dev \
-v /usr/lib64/vmware-vix-disklib:/usr/lib64/vmware-vix-disklib:ro \
--env OS_AUTH_URL=https://YOUR_OPENSTACK_IP:5000 \
--env OS_USERNAME=your_username \
--env OS_PASSWORD=your_password \
--env OS_PROJECT_NAME=your_project \
--env OS_PROJECT_ID=your_project_id \
--env OS_USER_DOMAIN_NAME=Default \
--env OS_PROJECT_DOMAIN_NAME=Default \
--env OS_DOMAIN_NAME=Default \
--env OS_INTERFACE=internal \
--env OS_REGION_NAME=RegionOne \
--env OS_IDENTITY_API_VERSION=3 \
--env OS_INSECURE=true \
--env PYTHONHTTPSVERIFY=0 \
--env CURL_CA_BUNDLE= \
--env LIBGUESTFS_BACKEND=direct \
--env LIBGUESTFS_NETWORK=0 \
ghcr.io/vexxhost/migratekit:main cutover \
--vmware-endpoint YOUR_VMWARE_IP \
--vmware-username "username@domain.local" \
--vmware-password "your_password" \
--vmware-path "/Datacenter01/vm/rocky" \
--os-type auto \
--disk-bus-type scsi \
--debug \
--availability-zone nova \
--flavor 046df869-4f85-4db6-86b0-7c9c49a7734d \
--network-mapping "mac=00:50:56:bc:18:3f,network-id=de21bb4f-51bc-4a50-a1a1-19d1bd546dcd,subnet-id=bb2ced08-18be-42dd-9a5f-972d32663deb" \
--network-mapping "mac=00:0c:29:15:80:8a,network-id=de21bb4f-51bc-4a50-a1a1-19d1bd546dcd,subnet-id=bb2ced08-18be-42dd-9a5f-972d32663deb" \
--security-groups "86600d2b-fd52-4e1e-ab88-165d3f971f98" \
--run-v2v
🔄 마이그레이션 프로세스 상세
1. Migration Phase 동작 원리
- 스냅샷 생성: VMware에서 자동으로 VM 스냅샷 생성
- 데이터 복사: 증분 복사로 OpenStack Cinder 볼륨에 데이터 전송
- 메타데이터 수집: VM 구성 정보 수집 및 저장
- 진행 상황 추적: 다음 동기화를 위한 체크포인트 생성
2. Cutover Phase 동작 원리
- 최종 동기화: 마지막 변경사항 복사
- VM 종료: VMware에서 Source VM 자동 종료
- Final 복사: 남은 변경사항 최종 동기화
- OS 변환: virt-v2v-in-place로 KVM 환경에 맞게 드라이버 변환
- 네트워크 설정: Neutron 포트 및 IP 할당
- 인스턴스 생성: OpenStack에서 새 인스턴스 부팅
📊 모니터링 및 검증
1. 마이그레이션 진행 상황 모니터링
# Docker 컨테이너 로그 확인
docker ps # 실행 중인 컨테이너 ID 확인
docker logs -f <container-id>
# OpenStack 볼륨 확인 (Migration 중)
openstack volume list | grep <vm-name>
# 컨버전 인스턴스 리소스 사용량 확인
htop
df -h
iostat -x 1
2. 마이그레이션 완료 후 검증
# 새로 생성된 인스턴스 확인
openstack server list | grep <vm-name>
# 인스턴스 상세 정보
openstack server show <instance-name>
# 볼륨 연결 상태 확인
openstack volume list
openstack server show <instance-name> -c volumes_attached
# 네트워크 연결 확인
openstack port list --server <instance-name>
3. VM 부팅 및 기능 테스트
# 콘솔 로그 확인
openstack console log show <instance-name>
# VNC 콘솔 접속 URL 획득
openstack console url show <instance-name>
# 네트워크 연결 테스트 (인스턴스 내부에서)
ping <gateway-ip>
ping <external-ip>
# 서비스 상태 확인 (Linux의 경우)
systemctl status
⚠️ 실무 주의사항 및 팁
1. 성능 최적화
- 컨버전 인스턴스 전용 사용: 다른 워크로드와 격리
- 네트워크 대역폭: VMware와 OpenStack 간 충분한 대역폭 확보
- 디스크 I/O: SSD 기반 스토리지 사용 권장
- 동시 마이그레이션 제한: 컨버전 인스턴스당 2-3개 VM만 동시 처리
2. 보안 고려사항
- 전용 보안 그룹: 마이그레이션용 보안 그룹 생성
- 네트워크 격리: 관리 네트워크를 통한 접근 제한
- 인증 정보 보호: 환경 변수 파일 권한 설정 (600)
- 임시 파일 정리: 마이그레이션 완료 후 임시 데이터 삭제
3. 필수 체크리스트
- [ ] 모든 네트워크 인터페이스 MAC 주소 확인
- [ ] OpenStack 리소스 할당량 확인
- [ ] VMware 계정 권한 검증
- [ ] 백업 및 스냅샷 생성
- [ ] 다운타임 윈도우 협의
- [ ] 롤백 계획 수립
4. 일반적인 문제 해결
- "모든 MAC 주소 매핑 필수": Rocky Linux 예시처럼 모든 인터페이스 포함
- SSL 인증서 오류: OS_INSECURE=true 설정 확인
- 권한 오류: VMware 계정의 모든 필수 권한 재확인
- 디스크 공간 부족: 컨버전 인스턴스 볼륨 확장
- 네트워크 연결 실패: 방화벽 및 라우팅 설정 확인
🎯 성공 요인 요약
- 전용 컨버전 인스턴스 구축 - 충분한 리소스와 격리된 환경
- 완벽한 사전 조사 - govc를 통한 정확한 VM 정보 수집
- 네트워크 매핑 완성도 - 모든 MAC 주소 빠짐없이 매핑
- 단계적 마이그레이션 - Migration → Cutover 순서 준수
- 철저한 검증 - 각 단계별 결과 확인 및 테스트
이 가이드를 통해 실제 운영 환경에서 안정적이고 성공적인 VMware to OpenStack 마이그레이션을 수행할 수 있습니다!
'CLOUD' 카테고리의 다른 글
OpenStack Kolla Redis Sentinel 인증 오류 디버깅 가이드 (2) | 2025.08.13 |
---|---|
Kolla Ansible 이미지 커스터마이징 및 Docker Hub 배포 가이드 (1) | 2025.06.16 |
Ceph 클러스터 성능 모니터링 및 체크 가이드 (0) | 2025.06.16 |
OpenStack Cinder RBD 강제 종료 후 Disk I/O 문제 해결 가이드 (1) | 2025.06.16 |
OpenStack 인스턴스 스냅샷 vs 볼륨 스냅샷 완벽 가이드 (0) | 2025.06.16 |