13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

[태그:] KVM

  • KVM·QEMU·libvirt — Proxmox 가상화의 실체 이해하기

    Proxmox에서 VM을 만들면 그 아래에서 실제로는 무엇이 도는지 아시나요? KVM, QEMU, libvirt — 가상화의 3대 축입니다. 이 구조를 이해하면 Proxmox 설정 하나하나가 왜 그런지 보이기 시작합니다. 가상화의 실체를 정리합니다.

    1. 하이퍼바이저 타입 — Type 1 vs Type 2

    Type 1 (베어메탈) Type 2 (호스트형)
    구조 하드웨어 위에 직접 일반 OS 위에 앱처럼
    성능 높음 상대적으로 낮음
    예시 KVM, ESXi, Proxmox VirtualBox, VMware Workstation

    Proxmox는 Type 1입니다. 정확히는 리눅스 커널 자체가 하이퍼바이저가 되는 KVM 방식이죠.

    2. 3대 축 — KVM · QEMU · libvirt

    • KVM (Kernel-based VM): 리눅스 커널 모듈. CPU의 하드웨어 가상화 기능(Intel VT-x/AMD-V)을 써서 VM을 네이티브에 가깝게 돌립니다. “가상화의 엔진”.
    • QEMU: 에뮬레이터·디바이스 모델. 가상 디스크·네트워크카드·칩셋 등 “가상 하드웨어”를 제공합니다. KVM과 결합해 qemu-kvm으로 동작.
    • libvirt: 이들을 다루는 관리 API/데몬. Proxmox·virsh 같은 도구가 libvirt를 통해 VM을 제어합니다.
    관리도구(Proxmox) → libvirt/QEMU → KVM(커널) → CPU 가상화(VT-x/AMD-V)

    즉 KVM은 엔진, QEMU는 차체, libvirt는 운전대라고 보면 됩니다.

    3. 전가상화 vs 반가상화(virtio)

    가상 하드웨어를 “진짜 하드웨어처럼 완벽히 흉내”내면(전가상화) 호환성은 좋지만 느립니다. 그래서 나온 게 virtio(반가상화)입니다.

    • virtio: “이건 가상 환경이야”를 게스트가 알고, 전용 드라이버로 훨씬 빠르게 디스크·네트워크를 처리.
    • Proxmox에서 디스크를 VirtIO SCSI, 네트워크를 virtio로 두는 이유가 성능입니다.
    # Proxmox에서 VM 디스크/네트워크를 virtio로 (성능 최적)
    qm set 100 --scsihw virtio-scsi-single
    qm set 100 --net0 virtio,bridge=vmbr0

    단, 윈도우 게스트는 virtio 드라이버를 따로 설치해줘야 인식합니다(리눅스는 대부분 기본 내장).

    4. CPU 타입과 중첩 가상화

    Proxmox의 VM CPU 타입도 이 맥락입니다.

    • kvm64(기본): 호환성 위주, CPU 기능 일부 감춤
    • host: 물리 CPU 기능을 그대로 노출 → 성능↑, 중첩 가상화 가능

    그래서 OpenStack 컴퓨트 노드처럼 “VM 안에서 또 VM”을 돌려야 하면 반드시 --cpu host를 줍니다. 이제 왜 그런지 이해되시죠?

    5. 정리

    Proxmox의 VM은 KVM(커널 엔진) + QEMU(가상 하드웨어) + libvirt/관리도구의 합작입니다. 성능의 핵심은 virtio, 중첩 가상화의 핵심은 CPU host. 이 구조를 알고 나면 Proxmox의 디스크·네트워크·CPU 옵션이 더 이상 주술이 아니라 논리로 보입니다.

  • [OpenStack] OpenStack 플레이버 설계: 워크로드별 VM 구성 기준

    [OpenStack] OpenStack 플레이버 설계: 워크로드별 VM 구성 기준

    OpenStack 플레이버 설계: 워크로드별 VM 구성 기준

    OpenStack 플레이버 설계가 중요한 이유

    OpenStack 플레이버 설계는 단순히 vCPU 몇 개, RAM 몇 GB를 고르는 일이 아닙니다. 실제 운영 환경에서는 이 선택 하나 때문에 웹 서버는 멀쩡한데 DB만 느려지거나, 작은 배치 작업 하나가 Compute Node(컴퓨트 노드, 가상 머신을 실제로 실행하는 호스트)의 리소스를 오래 붙잡는 상황이 생기거든요.

    저도 처음 홈랩에서 OpenStack을 만졌을 때는 “그냥 small, medium, large 만들면 되겠지”라고 생각했습니다. 그런데 실제로 써보니 꽤 다르더라고요. 같은 4 vCPU VM(Virtual Machine, 가상 머신)이라도 웹 워크로드와 데이터베이스 워크로드가 원하는 리소스 성격은 완전히 달랐습니다. CPU가 순간적으로 치솟는 서비스도 있고, 메모리를 꾸준히 쓰는 서비스도 있고, 디스크 I/O(Input/Output, 입출력) 때문에 전체가 버벅이는 경우도 있었습니다.

    VM 사양은 넉넉해 보이는데 애플리케이션은 느리고, 반대로 어떤 VM은 리소스를 거의 안 쓰는데 너무 큰 플레이버를 물고 있는 상황을 본 적 있으신가요? 이 글에서는 Nova 플레이버를 워크로드 기준으로 어떻게 나누고, 어떤 명령어로 만들고, 운영 중 어떤 지표를 보고 조정할지 실무 관점으로 정리해보겠습니다.

    OpenStack에서 플레이버가 VM 크기뿐 아니라 워크로드 배치 전략의 출발점이 된다는 흐름을 보여주는 개요 이미지입니다.

    Nova 플레이버 개념: VM의 표준 사이즈표

    OpenStack에서 Flavor(플레이버)는 VM을 만들 때 선택하는 리소스 묶음입니다. vCPU, Memory(메모리), Disk(디스크) 같은 기본값을 정의하고, 필요하면 Extra Specs(추가 속성)를 붙여 스케줄링, CPU 정책, 메모리 페이지 정책까지 조정합니다.

    쉽게 말해 옷 사이즈표와 비슷합니다. small, medium, large라는 이름만 있다고 좋은 게 아니라, 우리 서비스에 맞는 치수표를 만들어야 합니다. 운영자가 미리 합리적인 사이즈를 만들어두면 사용자는 매번 VM 사양을 고민하지 않아도 되고, 인프라 입장에서는 리소스 낭비를 줄일 수 있습니다.

    • vCPU: 가상 CPU 개수입니다. CPU 연산이 많은 워크로드에서 중요합니다.
    • RAM: VM에 할당되는 메모리입니다. 캐시, DB, JVM 기반 서비스에서 특히 민감합니다.
    • Root Disk: 기본 부팅 디스크 크기입니다. 이미지 기반 배포에서는 너무 크게 잡지 않는 편이 관리가 쉽습니다.
    • Ephemeral Disk: VM 삭제 시 함께 사라지는 임시 디스크입니다.
    • Extra Specs: CPU 고정, Huge Pages(휴즈 페이지, 큰 메모리 페이지), NUMA(Non-Uniform Memory Access, 비균일 메모리 접근) 같은 고급 옵션을 지정할 때 씁니다.

    중요한 포인트는 하나입니다. 플레이버는 “많이 주면 좋다”가 아닙니다. 워크로드 분석을 먼저 하고, 그 다음에 VM 모양을 맞춰야 합니다. 이 순서가 바뀌면 나중에 튜닝이 꽤 피곤해집니다.

    워크로드 분석 기준: CPU, 메모리, 디스크, 네트워크

    실제 운영에서는 워크로드를 크게 네 부류로 나눠 보는 게 편했습니다. 웹/API 서버, 데이터베이스, 배치/분석 작업, 네트워크 장비형 VM입니다. 이름은 단순하지만 확인해야 할 지표는 서로 다릅니다.

    워크로드 유형 주요 병목 플레이버 설계 방향 확인할 지표
    웹/API 서버 순간 CPU, 네트워크 중간 vCPU, 적당한 RAM, 수평 확장 고려 CPU 사용률, Load Average, 요청 지연
    DB 서버 메모리, 디스크 I/O RAM 여유, 빠른 볼륨, 필요 시 전용 CPU iowait, 디스크 await, 캐시 히트율
    배치/분석 CPU 지속 사용, 메모리 피크 작업 시간대와 동시 실행 수 기준으로 분리 pidstat, sar, 메모리 스왑 여부
    네트워크 장비형 VM 패킷 처리, 인터럽트 CPU 정책과 네트워크 드라이버 확인 pps, 인터페이스 오류, softirq

    실무에서는 평균값보다 피크 패턴을 더 자주 봅니다. CPU 평균이 낮아도 특정 시간대에 요청이 몰리면 체감 성능은 나빠집니다. 반대로 하루에 한 번만 도는 배치 작업에 항상 큰 플레이버를 붙여두면 리소스가 아깝습니다. VM 수가 늘어나면 이 차이가 진짜 크게 느껴지더라고요.

    OpenStack 플레이버 설계 실전: CLI로 생성하기

    이제 실제 명령어로 가보겠습니다. 아래 예시는 OpenStackClient 기준입니다. 환경마다 인증 방식은 다르지만, 보통은 OpenRC 파일을 source 한 뒤 실행합니다.

    source ~/admin-openrc.sh
    
    openstack flavor create m1.web.small \
      --vcpus 2 \
      --ram 4096 \
      --disk 20
    
    openstack flavor create m1.api.medium \
      --vcpus 4 \
      --ram 8192 \
      --disk 30
    
    openstack flavor create m1.db.memory \
      --vcpus 4 \
      --ram 16384 \
      --disk 40
    
    openstack flavor list

    여기서 RAM 단위는 MB입니다. 4096은 4GB, 8192는 8GB로 보면 됩니다. 처음엔 저도 이 단위를 대충 보고 넘겼다가 “왜 생각보다 작게 잡혔지?” 하고 한참 봤던 기억이 있습니다. 은근히 자주 하는 실수입니다.

    DB나 지연 시간에 민감한 워크로드는 Extra Specs(추가 속성)를 고민할 수 있습니다. 예를 들어 CPU를 공유 정책으로 둘지, dedicated(전용 할당) 정책을 쓸지 판단해야 합니다. 다만 hw:cpu_policy=dedicated 같은 설정은 Compute Node의 전용 CPU 집합, Placement 리소스, Nova 설정이 맞아야 의미가 있습니다. 명령어만 넣는다고 마법처럼 빨라지지는 않더라고요.

    Nova 플레이버 생성과 Extra Specs 설정 흐름도

    OpenStack CLI로 기본 플레이버를 만들고 Extra Specs를 붙여 워크로드별로 구분하는 과정을 나타낸 구성 이미지입니다.

    openstack flavor create m1.db.dedicated \
      --vcpus 4 \
      --ram 16384 \
      --disk 40
    
    openstack flavor set m1.db.dedicated \
      --property hw:cpu_policy=dedicated \
      --property hw:mem_page_size=large
    
    openstack flavor show m1.db.dedicated

    hw:cpu_policy=dedicated는 전용 pCPU(Physical CPU, 물리 CPU)에 vCPU를 고정하는 정책이고, hw:mem_page_size=large는 큰 메모리 페이지 사용을 요청합니다. 단, Huge Pages는 호스트 커널과 libvirt/KVM 쪽 준비가 필요합니다. 지원되지 않는 환경에서 무작정 넣으면 VM 생성이 실패할 수 있습니다.

    가상 머신 최적화: 작은 VM 여러 대 vs 큰 VM 한 대

    가상 머신 최적화에서 자주 나오는 고민이 있습니다. “2 vCPU VM 여러 대가 나을까, 8 vCPU VM 한 대가 나을까?” 정답은 워크로드에 따라 다릅니다. 웹/API 서버처럼 stateless(상태를 서버에 많이 저장하지 않는 구조)에 가까우면 작은 VM을 여러 대 두고 로드밸런서로 나누는 편이 운영상 편했습니다. 장애 격리도 좋고, 배포 롤백도 덜 무섭습니다.

    반대로 DB처럼 상태가 크고 디스크 I/O가 중요한 서비스는 무작정 쪼개기 어렵습니다. 이 경우에는 메모리와 디스크 경로를 먼저 보고, 필요하면 전용 CPU 정책이나 빠른 Cinder Volume(신더 볼륨, OpenStack 블록 스토리지)을 붙이는 식으로 접근합니다.

    1. 먼저 애플리케이션의 병목 후보를 정합니다. CPU인지, 메모리인지, 디스크인지 구분합니다.
    2. 작은 기본 플레이버로 시작하되, 모니터링 지표를 붙입니다.
    3. 피크 시간대에 CPU iowait, 메모리 swap, 디스크 await 같은 값을 확인합니다.
    4. 증설이 필요하면 같은 계열의 다음 플레이버로 올립니다.
    5. 계속 같은 병목이 반복되면 플레이버 문제가 아니라 애플리케이션 구조나 스토리지 설계를 다시 봅니다.

    추천하는 방식은 “처음부터 대형 플레이버”가 아니라 계열을 나눠 점진적으로 올리는 방식입니다. 예를 들어 web.small → web.medium → web.large처럼 같은 성격 안에서만 키우면 운영자가 판단하기 쉽습니다. 이거 진짜 편하더라고요.

    점검 명령어: VM 내부와 OpenStack 외부를 같이 보기

    플레이버가 적절한지 보려면 VM 내부 지표와 OpenStack 외부 상태를 같이 봐야 합니다. VM 안에서는 리눅스 성능 도구를 씁니다. 아래 명령어는 대부분의 리눅스 서버에서 sysstat 패키지를 설치하면 사용할 수 있습니다.

    # CPU 사용률과 iowait 확인
    sar -u 1 5
    
    # 디스크 서비스 시간, 대기열, 사용률 확인
    iostat -x 1 5
    
    # 프로세스별 CPU/메모리/디스크 사용 확인
    pidstat -urd 1 5
    
    # 메모리와 swap 확인
    free -h

    해석은 이렇게 합니다. sar에서 %iowait가 계속 눈에 띄게 높다면 CPU가 부족하다기보다 디스크 응답을 기다리는 쪽을 의심합니다. iostat -x에서는 await, %util, r/s, w/s를 함께 봅니다. %util이 계속 높은데 await도 같이 늘면 스토리지 병목 가능성이 커집니다. free -h에서 swap 사용량이 증가하고 줄지 않는다면 메모리 플레이버를 올리거나 애플리케이션 메모리 설정을 줄여야 합니다.

    OpenStack 쪽에서는 현재 하이퍼바이저 자원 상태와 VM 배치를 확인합니다. 일부 명령은 관리자 권한이 필요할 수 있습니다.

    openstack hypervisor list
    openstack hypervisor stats show
    openstack server list --all-projects --long
    openstack server show <SERVER_ID>

    여기서 보는 핵심은 “한 Compute Node에 특정 유형 VM이 몰렸는가”입니다. CPU 집약형 VM이 한 노드에 너무 몰리면 개별 VM 스펙은 정상이어도 전체 성능이 흔들릴 수 있습니다. 이때는 Availability Zone(가용 영역), Host Aggregate(호스트 집합), Flavor Extra Specs를 조합해서 배치 정책을 나누는 쪽을 검토합니다.

    주의사항과 트러블슈팅: 자주 헷갈리는 부분

    OpenStack 플레이버 설계에서 가장 많이 하는 실수는 “플레이버 이름만 그럴듯하게 만든 것”입니다. m1.large라는 이름은 익숙하지만, 정작 어떤 워크로드용인지 아무도 모르면 시간이 지나면서 엉망이 됩니다. 그래서 이름에 목적을 넣는 편이 좋습니다. 예를 들면 m1.web.small, m1.db.memory, m1.batch.cpu처럼요.

    • VM 생성 실패: Extra Specs가 호스트 기능과 맞지 않을 때 발생합니다. flavor show와 nova-compute 로그를 같이 봅니다.
    • 디스크가 느림: vCPU 증설로 해결되지 않습니다. Cinder 백엔드, 볼륨 타입, 게스트 파일시스템, iostat 지표를 확인합니다.
    • 메모리가 부족함: swap이 늘면 체감 성능이 급격히 나빠집니다. RAM 증설 또는 애플리케이션 heap 설정을 조정합니다.
    • CPU를 많이 줬는데도 느림: CPU steal, iowait, 스레드 병렬성, 애플리케이션 락을 같이 봐야 합니다.

    재현 가능한 시나리오 하나를 들어보겠습니다. 웹 서버 VM에 2 vCPU, 4GB RAM을 주고 운영했는데 피크 시간에 응답이 느려졌습니다. 처음에는 CPU가 부족한 줄 알고 4 vCPU로 올렸습니다. 그런데 개선이 애매했습니다. 다시 보니 sar에서 iowait가 계속 보였고, iostat에서는 디스크 대기가 늘어났습니다. 원인은 로그가 같은 루트 디스크에 과하게 쌓이는 구조였고, 별도 볼륨으로 로그 경로를 분리하니 훨씬 안정됐습니다.

    검증과 결과: 플레이버 변경 후 확인할 것

    플레이버를 바꿨다면 “VM이 켜졌다”에서 끝내면 안 됩니다. 저는 최소한 아래 순서로 확인합니다. 특히 resize 이후에는 환경에 따라 confirm 단계가 필요할 수 있으니 운영 정책도 같이 확인하세요.

    1. VM 생성 또는 resize(크기 변경)가 정상 완료됐는지 확인합니다.
    2. 게스트 OS에서 CPU, 메모리, 디스크가 기대한 값으로 보이는지 확인합니다.
    3. 애플리케이션 로그에 오류나 타임아웃이 늘지 않았는지 봅니다.
    4. 피크 시간대 지표를 이전과 비교합니다.
    5. 동일 계열 VM 여러 대의 편차가 크지 않은지 확인합니다.
    openstack server resize --flavor m1.api.medium <SERVER_ID>
    openstack server resize --confirm <SERVER_ID>
    
    # VM 내부에서 확인
    nproc
    free -h
    lsblk

    결과 해석 기준은 간단하게 잡아두면 좋습니다. CPU 사용률이 피크 시간에만 높고 요청 지연이 없다면 굳이 올리지 않아도 됩니다. 메모리는 swap이 생기는지, 디스크는 iowait와 await가 함께 나빠지는지 봅니다. 네트워크는 대역폭뿐 아니라 인터페이스 오류, retransmission(재전송)도 같이 봐야 합니다.

    OpenStack 플레이버 변경 전후 가상 머신 최적화 지표 대시보드

    CPU, 메모리, 디스크 I/O 지표를 기준으로 플레이버 변경 전후를 비교하는 검증용 대시보드 예시입니다.

    자주 묻는 질문: OpenStack 플레이버 설계 FAQ

    Q1. 플레이버는 몇 종류로 시작하는 게 좋나요?

    처음부터 너무 많이 만들지 않는 걸 추천합니다. 웹/API용 2~3개, 메모리 중심 1~2개, CPU 중심 1~2개 정도로 시작하고 실제 사용 패턴을 보면서 늘리는 편이 관리하기 쉽습니다.

    Q2. dedicated CPU는 무조건 좋은 선택인가요?

    아닙니다. 지연 시간에 민감하거나 성능 격리가 중요한 VM에는 도움이 될 수 있지만, 전체 클러스터 효율은 떨어질 수 있습니다. 호스트의 전용 CPU 구성과 운영 정책이 준비된 경우에만 쓰는 게 좋습니다.

    Q3. 디스크 크기를 크게 잡으면 성능도 좋아지나요?

    대부분의 경우 단순 디스크 용량과 성능은 별개로 봐야 합니다. 성능은 스토리지 백엔드, 볼륨 타입, 캐시 정책, I/O 패턴 영향을 더 많이 받습니다.

    마무리: 워크로드별 추천 기준

    OpenStack에서 VM 구성을 잘 잡고 싶다면 플레이버를 “사이즈”가 아니라 “운영 정책”으로 봐야 합니다. 이 관점이 잡히면 OpenStack 플레이버 설계가 훨씬 쉬워집니다.

    • 웹/API 서버라면 작은 VM 여러 대와 수평 확장을 우선 추천합니다.
    • DB 서버라면 메모리, 디스크 I/O, 볼륨 타입을 먼저 보고 필요할 때 전용 CPU를 검토하세요.
    • 배치 작업이라면 실행 시간대와 동시성 기준으로 CPU형 플레이버를 따로 두는 게 좋습니다.
    • 네트워크 장비형 VM이라면 CPU 정책, 인터럽트, 드라이버, 패킷 처리량을 함께 봐야 합니다.

    제 기준에서는 기본 플레이버를 작고 명확하게 시작한 뒤, 관측 지표를 보고 계열을 늘리는 방식이 가장 덜 아팠습니다. 한 번에 완벽한 표준안을 만들려고 하면 오히려 오래 걸리더라고요. 다음 글에서는 Host Aggregate와 Availability Zone을 이용해서 특정 플레이버를 특정 Compute Node 그룹에 배치하는 방법을 다룰 예정입니다. 이전 글에서 다룬 OpenStack 네트워크 기본 구조도 함께 참고하면 흐름이 더 잘 이어질 겁니다.

    워크로드별 OpenStack 플레이버 설계 선택 기준 요약

    웹, DB, 배치, 네트워크형 VM을 어떤 기준으로 나눌지 한눈에 정리한 요약 이미지입니다.

  • [홈랩] Proxmox ARM64 홈랩 1년 회고: 라즈베리 파이 5 기반 운영 경험과 교훈

    [홈랩] Proxmox ARM64 홈랩 1년 회고: 라즈베리 파이 5 기반 운영 경험과 교훈

    [홈랩] Proxmox ARM64 홈랩 1년 회고: 라즈베리 파이 5 기반 운영 경험과 교훈

    Proxmox ARM64 조합이 궁금한 분들이 꽤 많으시더라고요. 특히 라즈베리 파이 5로 홈랩 구축을 시작하려는 분들은 “전력도 적게 먹고 조용한데, 이걸 ARM 서버처럼 굴릴 수 없을까?” 하는 생각 한 번쯤 해보셨을 겁니다. 저도 딱 그랬습니다. x86 미니 PC는 성능이 좋지만, 늘 켜두는 장비에서는 발열, 소음, 소비전력이 계속 신경 쓰이거든요. 그래서 한동안은 라즈베리 파이 5를 중심으로 ARM 서버 성격의 홈랩을 꾸려보면서, 어디까지 실전에 쓸 수 있는지 꽤 집요하게 확인해봤습니다.

    다만 여기서 먼저 짚고 가야 할 게 있습니다. Proxmox VE는 전통적으로 x86_64 중심으로 많이 쓰여 왔고, ARM64 환경은 공식 배포판보다는 커뮤니티 포팅(community port, 비공식 이식판)이나 실험적 구성에 가깝습니다. 이 포인트를 빼고 이야기하면 괜히 기대만 높아지거든요. 저도 처음엔 “가볍게 되겠지” 했다가 삽질 좀 했습니다 ㅎㅎ 그래도 결론부터 말하면, 목적만 분명하면 꽤 재미있고 배울 점도 많았습니다.

    이번 글은 “무조건 추천”보다도, 1년 가까이 ARM 기반 홈랩을 굴리며 느낀 현실적인 장단점에 더 가깝습니다. 혹시 지금 Proxmox ARM64, 라즈베리 파이 5, 홈랩 구축 사이에서 고민 중이시라면, 시행착오 줄이는 데 도움이 될 겁니다.

    Proxmox ARM64와 라즈베리 파이 5 기반 홈랩 구축 전체 아키텍처 이미지

    라즈베리 파이 5, 스토리지, 네트워크, 컨테이너와 VM 흐름을 한눈에 보여주는 전체 아키텍처 이미지입니다.

    Proxmox ARM64를 어떻게 이해하면 좋을까

    쉽게 말해 Proxmox VE는 KVM(커널 기반 가상머신)과 LXC(리눅스 컨테이너)를 웹 UI로 관리하기 편하게 묶어둔 가상화 플랫폼입니다. x86 서버에서는 워낙 익숙한 선택지죠. 문제는 ARM으로 오면 이야기가 조금 달라집니다.

    왜냐하면 ARM64 환경에서는 CPU 아키텍처 자체가 다르기 때문에, x86에서 별생각 없이 쓰던 이미지나 패키지가 그대로 안 돌아가는 경우가 꽤 있더라고요. 예를 들어 Docker 이미지도 amd64만 제공하는 경우가 있고, VM 이미지도 cloud image(클라우드 이미지) 지원이 제각각이거든요. 즉, Proxmox ARM64 홈랩은 '설치가 끝'이 아니라 워크로드 호환성까지 같이 봐야 하는 구조입니다.

    제가 직접 써보니 운영 감각은 이렇습니다.

    • LXC(Container, 컨테이너) 위주의 경량 워크로드는 꽤 잘 맞습니다.
    • KVM VM은 가능하더라도 이미지 호환성과 리소스 여유를 더 따져야 합니다.
    • 스토리지와 전원 안정성이 생각보다 중요합니다. 여기서 삐끗하면 OS보다 먼저 데이터가 흔들립니다.
    • 홈랩 구축 관점에서는 학습 가치가 매우 큽니다. 다만 프로덕션 흉내를 내기보다, 제약을 이해하는 실험실에 더 가깝습니다.

    라즈베리 파이 5가 홈랩에 매력적인 이유

    라즈베리 파이 5는 이전 세대보다 체감 성능이 꽤 좋아졌고, 네트워크/스토리지 주변 구성을 신경 쓰면 단순 장난감 수준은 확실히 넘습니다. 물론 기업용 서버 대체는 아니지만, 저전력 ARM 서버 실험 용도로는 진입 장벽이 낮더라고요. 실제로 써보니까 책상 한쪽에서 조용히 계속 돌아가는 점이 진짜 편했습니다.

    항목 라즈베리 파이 5 기반 ARM 홈랩 x86 미니 PC 홈랩
    전력/소음 유리한 편 상대적으로 높을 수 있음
    호환성 ARM64 제약 있음 대체로 넓음
    학습 재미 매우 높음 실용성 중심
    가상화 유연성 워크로드별 편차 큼 전반적으로 안정적
    권장 용도 실험, 경량 서비스, 학습 범용 홈서버, VM 다수 운영

    제가 잡았던 운영 목표: “적게, 가볍게, 오래”

    처음엔 이것저것 다 올리고 싶었습니다. 근데 라즈베리 파이 5 기반 Proxmox ARM64 환경에서 욕심내면 금방 한계가 보이더라고요. 그래서 운영 원칙을 아주 단순하게 잡았습니다.

    1. 컨테이너 우선: 가능하면 LXC로 먼저 배치합니다.
    2. 서비스 분리: DNS, 리버스 프록시(reverse proxy, 역방향 프록시), 모니터링, 파일 동기화처럼 역할을 분리합니다.
    3. 스토리지 외장 분리: microSD 한 장에 모든 걸 맡기지 않습니다.
    4. 백업 자동화: 실험 환경일수록 백업이 더 중요합니다.

    여기서 중요한 포인트! ARM 서버 홈랩은 “최대한 많은 걸 띄우는 경쟁”보다 “어디까지 안정적으로 굴러가는지 이해하는 과정”이 훨씬 값집니다.

    Proxmox ARM64 실전 구현: 설치 전 준비

    비공식 ARM64 포팅 환경은 세부 절차가 배포 방식마다 조금씩 다를 수 있습니다. 그래서 저는 설치 문서의 명령을 그대로 외우기보다, 어떤 구성 원칙이 필요한지를 기준으로 접근하는 편을 추천드립니다. 아래 예시는 Debian/ARM64 기반에 가상화 관련 패키지와 브리지 네트워크(bridge network, 가상 스위치 역할)를 준비하는 흐름입니다.

    1. 라즈베리 파이 5에 안정적인 전원을 준비합니다.
    2. 운영체제는 microSD보다 SSD/NVMe 성격의 외장 스토리지를 우선 검토합니다.
    3. 고정 IP를 잡고, 관리용 네트워크 대역을 분리합니다.
    4. 업데이트 후 재부팅해서 기본 상태를 먼저 안정화합니다.
    sudo apt update
    sudo apt full-upgrade -y
    sudo reboot

    재부팅 이후에는 기본 정보부터 확인합니다. 이 과정을 은근히 많이 건너뛰시는데, 나중에 문제 생겼을 때 제일 먼저 다시 보게 되는 값들입니다.

    uname -a
    arch
    ip addr
    lsblk
    free -h

    실제로 써보니까 여기서 디스크 인식 상태와 네트워크 인터페이스 이름을 미리 확인해두는 게 중요했습니다. 예전 습관대로 `eth0`만 보고 설정했다가 이름이 달라서 한참 헤맨 적이 있거든요.

    브리지 네트워크 구성 예시

    Proxmox 계열 환경을 쓰면 결국 브리지 네트워크를 많이 만지게 됩니다. 브리지(bridge)는 쉽게 말해 호스트와 VM/LXC가 같은 스위치에 물린 것처럼 보이게 해주는 방식입니다.

    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet manual
    
    auto vmbr0
    iface vmbr0 inet static
        address 192.168.10.20/24
        gateway 192.168.10.1
        bridge-ports eth0
        bridge-stp off
        bridge-fd 0

    이런 식의 구성은 개념 이해용으로 좋습니다. 다만 실제 파일 위치나 관리 방식은 사용 중인 배포 환경에 따라 달라질 수 있으니, 현재 배포판의 네트워크 관리 체계를 먼저 확인하고 적용하시는 게 안전합니다.

    Proxmox ARM64 홈랩의 브리지 네트워크와 LXC VM 연결 구조 이미지

    브리지 네트워크, 호스트, 컨테이너, VM이 어떻게 연결되는지 이해하기 쉽게 보여주는 구성도입니다.

    실전 운영: 어떤 워크로드가 잘 맞았나

    제가 1년 가까이 굴리면서 느낀 건 명확했습니다. Proxmox ARM64에서는 '가볍고 분리하기 쉬운 서비스'가 잘 맞습니다. 예를 들면 이런 부류입니다.

    • Pi-hole 같은 DNS 기반 서비스
    • Nginx Proxy Manager나 Caddy 같은 리버스 프록시
    • Prometheus, Grafana 계열의 경량 모니터링
    • 테스트용 Git 러너나 작은 자동화 작업
    • 내부 문서, 파일 동기화, 간단한 API 실험

    반대로 무거운 데이터베이스를 여러 개 올리거나, x86 전용 이미지 의존성이 큰 서비스는 금방 피곤해집니다. 처음엔 “이 정도면 되겠지” 했었는데, 막상 이미지 아키텍처가 안 맞거나 메모리 여유가 줄어들면 체감이 확 오더라고요.

    LXC 우선 운영 예시

    저는 가능한 서비스는 컨테이너 중심으로 나눠서 운영했습니다. 서비스가 꼬여도 한 덩어리 전체가 죽지 않게 하려는 의도였죠.

    pct list
    pct start 101
    pct enter 101
    apt update && apt install -y curl vim

    여기서 `pct`는 Proxmox 환경에서 LXC를 다룰 때 자주 보는 명령입니다. 컨테이너 안으로 들어가서 패키지를 설치하고, 로그를 분리해서 보는 흐름이 익숙해지면 운영이 꽤 편해집니다.

    백업과 스냅샷 관점에서 배운 점

    홈랩은 어차피 실험용이라고 생각하면 백업을 소홀히 하게 되는데, 이상하게 꼭 주말 밤에 터집니다. 저도 그랬습니다. 그래서 나중엔 백업 정책을 단순하게 잡았습니다.

    1. 설정 파일은 Git 또는 별도 백업 저장소로 이중화
    2. 컨테이너 단위 백업 정기 실행
    3. OS 디스크와 데이터 디스크를 논리적으로 분리
    4. 업데이트 전 스냅샷 또는 설정 백업 선행
    vzdump 101 --mode snapshot --compress zstd --storage local
    vzdump 102 --mode stop --compress zstd --storage local

    모든 환경에서 똑같이 동작하는 건 아니지만, 이런 식의 백업 흐름 자체는 꼭 익혀두시는 걸 추천드립니다. 실패를 빨리 복구하는 능력이 홈랩 만족도를 많이 좌우하거든요.

    ⚠️ 실제로 많이 부딪힌 문제들

    이 섹션은 좀 현실적으로 적어보겠습니다. “잘 된다”보다 중요한 게, 어디서 잘 안 되는지 아는 거니까요.

    1. ARM64 이미지 호환성 문제

    가장 자주 맞닥뜨린 문제입니다. Docker든 VM 이미지든 amd64만 준비된 경우가 생각보다 많습니다. 이럴 땐 에뮬레이션(emulation, 다른 아키텍처 흉내)로 우회하고 싶어지는데, 홈랩에서는 성능과 복잡도가 동시에 올라갑니다.

    해결 팁은 단순합니다.

    • 먼저 공식적으로 arm64 이미지를 제공하는지 확인합니다.
    • 같은 역할의 대체 소프트웨어를 찾습니다.
    • x86 전용 워크로드는 과감히 다른 노드로 분리합니다.

    2. 스토리지 병목과 안정성

    처음엔 microSD로도 되겠지 싶었는데, 로그와 업데이트, 컨테이너 쓰기 작업이 쌓이니까 금방 신경 쓰이더라고요. 드디어 됐다 싶다가도 I/O가 흔들리면 체감이 확 옵니다. 라즈베리 파이 5 홈랩 구축에서는 저장장치 품질이 성능만큼 중요합니다.

    그래서 저는 운영 기준을 이렇게 바꿨습니다.

    • 부팅 매체와 데이터 매체를 가능하면 분리
    • 쓰기 많은 서비스는 별도 스토리지 고려
    • SMART 확인 가능한 장치를 선호

    3. 발열과 장시간 부하

    라즈베리 파이 5는 성능이 올라간 만큼 발열 관리도 같이 봐야 합니다. 짧게 테스트할 때는 괜찮아도, 백업이나 업데이트처럼 부하가 길게 가면 차이가 납니다. 팬, 케이스, 통풍 구조를 너무 가볍게 보면 나중에 후회하더라고요.

    4. 커뮤니티 포팅 특유의 변수

    이건 정말 중요합니다. Proxmox ARM64는 공식 지원 범위보다 커뮤니티 정보 의존도가 큰 편이라서, 검색했을 때 나오는 글이 작성 시점마다 다릅니다. 어떤 글은 잘 되는데, 내 환경에서는 안 되기도 합니다. 저도 처음엔 이게 뭔가 싶었는데, 결국 핵심은 버전보다도 현재 커널, 패키지 상태, 네트워크/스토리지 구성을 같이 보는 거였습니다.

    dmesg | tail -n 50
    journalctl -xe
    systemctl --failed
    df -h

    문제 생기면 꼭 위 네 가지는 같이 보세요. 특히 `journalctl`과 `dmesg`를 같이 보면 실마리가 빨리 잡힙니다.

    Proxmox ARM64 트러블슈팅과 로그 분석 중인 라즈베리 파이 5 홈랩 이미지

    로그 확인, 서비스 실패, 스토리지 상태 점검 등 실제 트러블슈팅 흐름을 보여주는 이미지입니다.

    검증: 1년 운영 후 무엇이 남았나

    성능 수치를 화려하게 적고 싶지만, 홈랩은 벤치마크 숫자보다 운영 감각이 더 중요하더라고요. 제가 얻은 결론은 이렇습니다.

    • 경량 서비스 위주의 분산 운영에는 충분히 재미있고 실용적입니다.
    • ARM 서버 특성상 호환성 점검이 습관이 됩니다.
    • 장애 대응, 백업, 네트워크 분리 같은 기본기가 훨씬 단단해집니다.
    • 무거운 VM 중심 환경을 기대하면 아쉬울 수 있습니다.

    특히 좋았던 건 서비스를 작게 쪼개는 습관이 생겼다는 점입니다. 예전엔 한 VM 안에 이것저것 몰아넣곤 했는데, ARM 홈랩에서는 그렇게 하면 금방 관리가 복잡해집니다. 그래서 역할별 분리, 로그 분리, 백업 분리를 자연스럽게 하게 되더라고요. 이건 x86 환경으로 돌아가도 그대로 도움이 됐습니다.

    그리고 Proxmox ARM64를 만져보면, “가상화 플랫폼은 단순히 설치해서 쓰는 게 아니라 하드웨어 제약과 운영 철학까지 같이 보는 거구나” 하는 감각이 생깁니다. 이건 숫자로 표현하기 어렵지만 정말 큰 수확이었습니다.

    평가 항목 1년 운영 후 느낌
    학습 가치 매우 높음
    안정성 구성을 보수적으로 잡으면 괜찮음
    확장성 무거운 워크로드에는 한계가 분명함
    운영 편의성 익숙해지면 좋지만 초반 삽질 있음
    재구성 의향 실험용/보조 노드로는 충분히 있음
    Proxmox ARM64 홈랩 운영 결과와 모니터링 상태를 보여주는 이미지

    CPU, 메모리, 네트워크, 컨테이너 상태가 안정적으로 보이는 운영 결과 이미지입니다.

    정리: Proxmox ARM64 홈랩을 추천할 사람, 말릴 사람

    여기서 정리해보겠습니다. 혹시 이런 경험 있으신가요? 시작할 땐 “작고 조용한 서버 하나면 다 되겠지” 싶은데, 막상 운영해보면 내가 원하는 게 성능인지, 안정성인지, 학습인지 헷갈릴 때가 있습니다. Proxmox ARM64 + 라즈베리 파이 5 조합은 그 질문에 답하게 해주는 환경이었습니다.

    이런 분께 추천합니다

    • 홈랩 구축 자체가 재미있는 분
    • ARM 아키텍처 제약을 배우고 싶은 분
    • LXC 중심 경량 서비스를 나눠 운영하고 싶은 분
    • 전력과 소음을 중요하게 보는 분

    이런 분께는 x86이 더 낫습니다

    • 여러 개의 무거운 VM을 안정적으로 돌려야 하는 분
    • amd64 전용 이미지 의존성이 큰 분
    • 트러블슈팅 시간을 줄이고 바로 결과가 필요한 분

    제가 배운 가장 큰 교훈은 하나였습니다. 홈랩은 '최고 사양'보다 '운영을 계속하게 만드는 구조'가 더 중요하다는 점입니다. 라즈베리 파이 5 기반 ARM 서버는 분명 제약이 있지만, 그 제약 덕분에 오히려 운영 기본기를 더 제대로 배우게 되더라고요.

    다음 글에서는 이 ARM 홈랩 위에 모니터링 스택을 어떻게 얹었는지, 그리고 어떤 서비스는 컨테이너로 두고 어떤 서비스는 분리했는지 더 자세히 다뤄볼 예정입니다. 이전 글에서 다룬 홈 네트워크 분리 전략과 함께 보시면 흐름이 더 잘 잡히실 겁니다.

    Proxmox ARM64와 라즈베리 파이 5 홈랩의 장단점 요약 이미지

    장점, 한계, 추천 사용 시나리오를 한 장으로 정리한 요약 인포그래픽 이미지입니다.

    자주 묻는 질문

    Q. 라즈베리 파이 5에 Proxmox를 공식 지원하나요?

    제가 확인하고 운영 방향을 잡을 때 기준으로는, x86_64 중심의 공식 흐름을 먼저 보는 게 맞았고, ARM64는 커뮤니티 포팅 성격을 염두에 두는 편이 안전했습니다. 그래서 실험/학습 목적이라면 좋지만, 무조건 공식 지원 장비처럼 기대하면 실망할 수 있습니다.

    Q. Proxmox ARM64 홈랩에서 VM보다 컨테이너가 더 나은가요?

    대체로 그렇습니다. 물론 워크로드에 따라 다르지만, 제가 직접 운영해보니 LXC 중심이 훨씬 가볍고 관리도 수월했습니다.

    Q. 홈랩 구축 입문자도 바로 시작해도 될까요?

    가능은 합니다. 다만 첫 홈랩이라면 x86 미니 PC가 더 수월할 수 있고, ARM 서버는 배움의 밀도가 높은 대신 변수도 많습니다. 본인이 “조금 돌아가더라도 배우면서 가겠다” 쪽이면 재미있게 하실 수 있습니다.

    마무리

    Proxmox ARM64는 만능 해법은 아니었습니다. 하지만 라즈베리 파이 5로 만든 홈랩 구축 경험은, 단순히 서버 한 대 굴린 것 이상을 남겨줬습니다. 아키텍처 차이, 이미지 호환성, 스토리지 안정성, 백업 습관, 장애 대응. 이런 것들이 전부 한 번에 묶여서 들어오거든요. 저도 처음엔 헷갈렸는데, 지나고 보니 그 과정 자체가 가장 큰 자산이었습니다.

    한 줄로 정리하면 이렇습니다. “ARM 홈랩은 불편해서 배운다. 그리고 그 배움이 의외로 오래 간다.” 혹시 지금 라즈베리 파이 5 기반 ARM 서버를 고민 중이시라면, 너무 큰 기대보다는 분명한 목표 하나를 잡고 시작해보세요. 그게 DNS든, 프록시든, 모니터링이든 상관없습니다. 작게 시작하면 생각보다 오래, 그리고 꽤 재미있게 갑니다. 🎉

  • [Proxmox] Proxmox Nested Virtualization으로 Kubernetes on VM 완벽 가이드

    [Proxmox] Proxmox Nested Virtualization으로 Kubernetes on VM 완벽 가이드

    [가상화] Proxmox Nested Virtualization으로 Kubernetes on VM 분석

    홈랩을 오래 굴리다 보면 결국 한 번은 Proxmox Nested Virtualization에 손이 가게 됩니다. 저도 처음엔 “굳이 VM 안에 또 가상화를 올려야 하나?” 싶었는데요, Kubernetes(쿠버네티스, 컨테이너 오케스트레이션) 실습 환경을 여러 번 갈아엎다 보니 이 구성이 생각보다 꽤 실용적이더라고요. 특히 VM 속 Kubernetes를 빠르게 복제하고, 스냅샷으로 되돌리고, 홈랩 가상화 구성을 유연하게 실험할 때 장점이 분명했습니다. 반대로 성능 손해와 디버깅 복잡도도 있어서, 막연히 “되니까 쓰자”로 접근하면 삽질 좀 하게 됩니다 ㅎㅎ 이 글에서는 제가 직접 해보며 정리한 가상화 성능 관점의 포인트와, Kubernetes on VM을 어떻게 굴렸는지 차근차근 풀어보겠습니다.

    Proxmox 호스트, 중첩 가상화가 활성화된 VM, 그리고 그 안에서 동작하는 Kubernetes 클러스터 흐름을 한눈에 보여주는 구성도입니다.

    1. 왜 굳이 Proxmox Nested Virtualization을 쓰게 됐나

    쉽게 말해 Nested Virtualization(중첩 가상화)는 “가상머신 안에서 또 가상화 기능을 쓰는 것”입니다. 예를 들어 Proxmox VE 위에 Ubuntu VM을 만들고, 그 VM 안에서 KVM(커널 기반 가상화)이나 kind, kubeadm 같은 도구를 써서 Kubernetes 실험 환경을 만드는 식이죠.

    제가 이 구성을 보게 된 이유는 단순했습니다.

    • 클러스터 실험 환경을 빠르게 복제하고 싶었습니다.
    • 실패했을 때 스냅샷으로 바로 되돌아가고 싶었습니다.
    • 물리 서버를 더 늘리지 않고도 여러 토폴로지를 시험해보고 싶었습니다.
    • 홈랩 가상화 환경에서 운영용 워크로드와 실험용 워크로드를 분리하고 싶었습니다.

    특히 kubeadm(쿠브애드엠, 쿠버네티스 수동 부트스트랩)으로 직접 클러스터를 구성해보면 네트워크, CNI(Container Network Interface, 컨테이너 네트워크 계층), cgroup(컨트롤 그룹, 리소스 제어) 같은 요소를 훨씬 잘 이해하게 됩니다. 다만 그만큼 레이어가 깊어져서, 문제 하나가 생기면 호스트인지, 게스트인지, 컨테이너 런타임인지 추적 범위가 넓어집니다. 여기서 중요한 포인트! 학습 효율은 높지만 운영 단순성은 떨어집니다.

    2. Proxmox Nested Virtualization 개념 정리

    저도 처음엔 헷갈렸는데, 구조를 한 줄로 정리하면 이렇습니다.

    물리 CPU의 가상화 확장(VT-x, AMD-V) – Proxmox/KVM – 게스트 VM – 게스트 내부의 컨테이너 또는 추가 가상화 계층

    즉, Proxmox가 게스트 VM에 CPU 가상화 기능을 노출해야 그 안에서 일부 가상화 관련 기능이 제대로 동작합니다. Kubernetes 자체는 반드시 중첩 가상화가 필요한 건 아닙니다. 예를 들어 단순히 containerd(컨테이너디, 컨테이너 런타임)와 kubelet(큐블릿, 노드 에이전트)만 돌리는 거라면 일반 VM으로도 충분합니다. 하지만 다음 같은 경우에는 Proxmox Nested Virtualization이 특히 의미가 있습니다.

    • VM 안에서 다시 KVM 기반 실험을 해야 할 때
    • 클러스터 테스트 도구가 가상화 확장 노출 여부에 민감할 때
    • 쿠버네티스 노드 역할을 하는 VM 내부에서 추가 격리 레이어를 시험할 때
    구성 방식 장점 주의점
    물리 서버에 직접 Kubernetes 설치 성능 손실이 적고 구조가 단순함 되돌리기와 복제가 번거로움
    Proxmox VM 위 Kubernetes 관리 편의성과 스냅샷 활용이 좋음 가상화 성능 오버헤드 고려 필요
    Proxmox Nested Virtualization 활용 실험 유연성이 가장 높음 가상화 성능 추적과 디버깅 난이도 증가

    제 경험상 학습, 검증, 반복 실험에는 정말 편합니다. 반면 장기 운영용 클러스터라면 레이어를 줄이는 쪽이 보통 더 낫더라고요.

    3. 실전 구성: VM 속 Kubernetes 실험 환경 만들기

    제가 홈랩에서 테스트할 때는 Proxmox 호스트 위에 Linux VM을 만들고, 그 안에 containerd와 kubeadm을 올리는 방식을 주로 썼습니다. 여기서는 특정 배포판 버전이나 Kubernetes 버전을 고정해서 적지는 않겠습니다. 버전은 계속 바뀌고, 이 글의 핵심은 원리와 체크포인트거든요.

    3-1. Proxmox VM 생성 시 확인할 것

    1. CPU 타입을 가능한 한 호스트와 가깝게 잡습니다. 일반적으로 호스트 CPU 기능 노출이 중요합니다.
    2. 가상 CPU 수(vCPU)와 메모리를 너무 타이트하게 주지 않습니다. control plane(컨트롤 플레인, 클러스터 제어 노드)은 생각보다 여유가 필요합니다.
    3. 디스크 캐시 정책과 스토리지 유형을 확인합니다. etcd(엣시디, 클러스터 상태 저장소)는 지연시간에 민감해서 가상화 성능에 직결됩니다.
    4. 브리지 네트워크 구성을 먼저 단순하게 잡습니다. 처음부터 VLAN까지 얹으면 문제 범위가 넓어집니다.

    CLI로 VM 설정을 확인할 때는 대략 이런 식으로 봤습니다.

    qm config 101

    CPU 관련 옵션을 조정할 때는 환경에 따라 설정 방식이 조금씩 다를 수 있지만, 핵심은 게스트가 필요한 CPU 가상화 기능을 볼 수 있게 하는 것입니다. 실제 반영 여부는 게스트 안에서 확인하는 편이 안전합니다.

    lscpu
    egrep -wo 'vmx|svm' /proc/cpuinfo | head

    여기서 vmx 또는 svm가 보이면 Intel/AMD 계열 가상화 확장이 게스트에 노출되는지 1차 확인이 됩니다.

    3-2. 게스트 OS에서 Kubernetes 기본 준비

    게스트 VM 안에서는 스왑(swap)을 끄고, 커널 모듈과 sysctl(시스ctl, 커널 런타임 파라미터)을 맞춰주는 작업이 먼저입니다. 이 부분은 예전에도 자주 삽질했던 구간입니다. kubelet이 뜨지 않거나, CNI가 이상하게 동작할 때 의외로 기본 설정이 빠져 있는 경우가 많거든요.

    sudo swapoff -a
    sudo modprobe overlay
    sudo modprobe br_netfilter
    
    cat <<'EOF' | sudo tee /etc/sysctl.d/99-kubernetes.conf
    net.bridge.bridge-nf-call-iptables = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.ipv4.ip_forward = 1
    EOF
    
    sudo sysctl --system

    containerd를 기준으로 보면 설정 파일도 한 번은 점검합니다.

    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
      runtime_type = "io.containerd.runc.v2"
    
    [plugins."io.containerd.grpc.v1.cri"]
      sandbox_image = "registry.k8s.io/pause:3.9"

    위 예시는 구조 예시입니다. 실제 배포판 기본값과 패키지 상태를 먼저 확인하세요. 이미 맞게 들어가 있는 경우도 꽤 많습니다.

    Proxmox Nested Virtualization 설정과 VM 속 Kubernetes 준비 과정 이미지

    가상 CPU, 메모리, 브리지 네트워크 설정과 게스트 내부의 containerd, kubeadm 준비 단계가 이어지는 모습을 설명하는 이미지입니다.

    3-3. kubeadm으로 클러스터 초기화

    실제로 써보니까 가장 덜 헷갈리는 건 제어 노드 하나로 먼저 붙이고, 그 다음 worker(워커, 작업 노드)를 늘리는 방식이었습니다.

    sudo kubeadm init --pod-network-cidr=10.244.0.0/16

    초기화 후에는 일반 사용자 기준 kubeconfig(큐브컨피그, 클러스터 접속 설정)를 옮깁니다.

    mkdir -p $HOME/.kube
    sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config

    그 다음 CNI 플러그인을 적용합니다. 어떤 플러그인을 쓸지는 환경마다 다르지만, 홈랩에서는 단순한 구성이 디버깅에 유리합니다. 제가 예전에 욕심내서 기능 많은 구성을 먼저 넣었다가, 문제 생겼을 때 네트워크 계층을 너무 많이 뒤져야 해서 시간을 꽤 썼습니다.

    4. 가상화 성능: 어디를 봐야 하나

    가상화 성능을 볼 때 단순히 “느리다/빠르다”로 끝내면 남는 게 없더라고요. 저는 보통 네 가지로 나눠서 봅니다.

    1. CPU 스케줄링 지연: vCPU가 실제 물리 코어를 기다리는 시간
    2. 메모리 압박: Ballooning(벌루닝, 동적 메모리 조절)이나 과도한 공유 여부
    3. 스토리지 지연: etcd, 이미지 풀, 로그 쓰기에서 체감이 큼
    4. 네트워크 오버헤드: 브리지, 오버레이 네트워크, MTU 불일치

    이 네 가지 중에서 홈랩에서는 스토리지와 네트워크가 체감 차이를 많이 만듭니다. CPU는 코어 수를 넉넉히 주면 얼추 버티는데, 디스크 레이턴시가 애매하면 control plane 반응성이 갑자기 거칠어지더라고요. 특히 이미지 풀링이나 Pod 재스케줄링 때 가상화 성능의 격차가 잘 보입니다.

    관찰 항목 증상 의심 포인트
    kubectl 응답이 느림 API 응답 지연 etcd 디스크 지연, 메모리 부족
    Pod 생성이 늦음 ContainerCreating 상태 지속 이미지 풀 속도, CNI 초기화
    노드 Ready 지연 초기 부팅 후 상태 불안정 kubelet 설정, cgroup, DNS
    서비스 통신 불안정 간헐적 타임아웃 브리지 설정, MTU, 오버레이 네트워크

    여기서 독자분들이 많이 궁금해하시는 게 “Nested면 못 쓸 정도로 느린가요?”인데요, 제 체감으로는 학습용, 테스트용, CI 비슷한 검증용으로는 충분히 쓸 만했습니다. 다만 I/O가 무겁거나 네트워크 민감한 워크로드를 오래 돌릴 거라면 구조를 더 단순하게 가져가는 게 맞습니다.

    5. ⚠️ 제가 실제로 겪은 문제와 해결 과정

    이 섹션이 제일 중요합니다. 설정 문서는 늘 깔끔한데, 현실은 안 그렇거든요.

    5-1. kubelet은 뜨는데 Pod 네트워크가 불안정했던 경우

    처음엔 Kubernetes 문제라고 생각했는데, 결국은 MTU(Maximum Transmission Unit, 최대 전송 단위)와 브리지 경로 문제였습니다. 오버레이 네트워크가 올라간 상태에서 하위 네트워크 장치 MTU가 엇갈리면, 겉보기엔 붙는 것 같다가 특정 통신에서만 이상해집니다.

    • 증상: 일부 Pod 간 통신은 되는데, 서비스 접근이 간헐적으로 실패
    • 원인 후보: 브리지 네트워크, CNI 기본 MTU, 상위 스위치 경로
    • 해결 방향: 네트워크 경로를 단순화하고 MTU 값을 일관되게 맞춤

    5-2. VM은 멀쩡한데 클러스터 반응이 둔했던 경우

    이건 대부분 저장소 쪽이었습니다. Proxmox 상의 스토리지가 바쁘거나, 게스트 디스크 설정이 애매하면 etcd가 은근히 영향받습니다. 겉으로는 CPU 사용률이 높지 않은데도 kubectl 응답이 굼뜬 경우가 있거든요. 저도 처음엔 “왜 이렇게 느리지?” 했었는데, 디스크 지연 쪽을 보고 나서 감이 오더라고요.

    kubectl get nodes
    kubectl get pods -A
    kubectl top nodes
    journalctl -u kubelet -xe --no-pager

    물론 kubectl top은 metrics-server(메트릭스 서버)가 있어야 합니다. 없는데 명령부터 치면 괜히 또 다른 삽질 시작입니다 ㅎㅎ

    5-3. nested 관련 확인이 애매했던 경우

    게스트 안에서 가상화 기능이 보이는지 먼저 확인하세요. 보이지 않으면 그 다음 단계에서 나오는 이상 증상들은 전부 부차적인 현상일 수 있습니다.

    lscpu | grep Virtualization
    egrep -c '(vmx|svm)' /proc/cpuinfo

    숫자가 0으로 나오면 Proxmox 쪽 CPU 노출 설정부터 다시 보는 게 맞습니다. 저도 예전에 Kubernetes 쪽 설정만 계속 뒤지다가 시간을 날린 적이 있습니다. 문제의 시작점이 더 아래 레이어였던 거죠.

    Proxmox Nested Virtualization 환경의 Kubernetes 트러블슈팅 이미지

    kubelet, CNI, 브리지 네트워크, 스토리지 지연을 순서대로 점검하는 트러블슈팅 흐름을 시각적으로 정리한 이미지입니다.

    6. 검증: 무엇을 확인하면 “이 구성 쓸 만하다”고 볼 수 있나

    저는 아래 체크리스트를 통과하면 일단 실험용으로 합격이라고 봅니다.

    1. 노드가 안정적으로 Ready 상태를 유지하는가
    2. Pod 생성과 삭제가 반복되어도 이상 지연이 없는가
    3. 서비스 간 통신과 DNS 해석이 일관적인가
    4. 재부팅 후에도 클러스터 상태가 다시 정상화되는가
    5. 스냅샷 복구 후 네트워크 식별자 충돌이 없는가

    검증 명령은 복잡할 필요 없습니다. 기본기가 더 중요합니다.

    kubectl get nodes -o wide
    kubectl get pods -A -o wide
    kubectl get svc -A
    kubectl run netcheck --image=busybox:1.36 --restart=Never -it --rm -- nslookup kubernetes.default

    여기서 DNS와 서비스 접근이 안정적이면 절반은 성공입니다. 그다음엔 샘플 워크로드를 배포해봅니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: demo-nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: demo-nginx
      template:
        metadata:
          labels:
            app: demo-nginx
        spec:
          containers:
          - name: nginx
            image: nginx:stable
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: demo-nginx
    spec:
      selector:
        app: demo-nginx
      ports:
      - port: 80
        targetPort: 80

    제 경험상 VM 속 Kubernetes 환경이 제대로 잡히면, 작은 웹 서비스 배포나 GitOps(깃옵스, Git 기반 운영 자동화) 실험 정도는 꽤 쾌적하게 돌아갑니다. 반면 대규모 스토리지 집약 워크로드나 지연시간 민감한 서비스는 가상화 성능 제약이 빨리 보입니다.

    Proxmox Nested Virtualization 기반 Kubernetes on VM 검증 결과 이미지

    노드 Ready 상태, Pod 분포, DNS 테스트 성공, 샘플 워크로드 배포 완료를 보여주는 운영 확인용 대시보드 이미지입니다.

    7. 어떤 경우에 추천하고, 어떤 경우엔 말리고 싶나

    이건 아주 현실적으로 나눠볼 수 있습니다.

    추천하는 경우

    • 쿠버네티스 학습과 반복 실험이 목적일 때
    • 스냅샷과 복제가 중요한 홈랩 가상화 환경일 때
    • 홈랩 가상화 자원이 제한적이라 구조를 유연하게 가져가야 할 때
    • CI 테스트나 배포 검증용 임시 클러스터가 필요할 때

    덜 추천하는 경우

    • 장기 운영용 프로덕션에 가까운 안정성이 필요할 때
    • 고성능 스토리지나 저지연 네트워크가 중요한 워크로드일 때
    • 문제 발생 시 추적 레이어를 최소화해야 할 때

    한마디로 정리하면 이렇습니다. Proxmox Nested Virtualization은 “학습과 실험의 효율을 극대화하는 도구”로는 좋습니다. 하지만 운영 복잡도를 감수해야 하니, 목적이 분명해야 합니다.

    8. 정리 및 다음 단계

    제가 직접 해보니 Proxmox Nested Virtualization은 단순한 장난감 구성이 아니었습니다. 잘만 쓰면 Kubernetes 실습, 네트워크 실험, 스냅샷 기반 복구 테스트에 정말 편하더라고요. 반대로 가상화 성능과 디버깅 난이도를 가볍게 보면 금방 막힙니다. 특히 스토리지 지연, MTU, CPU 기능 노출 이 세 가지는 처음부터 꼭 체크해보세요.

    혹시 지금 홈랩에서 Kubernetes를 굴리고 계신가요? 그렇다면 처음부터 모든 걸 복잡하게 올리지 말고, 단일 control plane + 단순 CNI + 작은 샘플 워크로드로 시작해보시는 걸 권합니다. 그게 결국 가장 빨리 갑니다. 저도 괜히 욕심냈다가 돌아온 적이 많았거든요.

    다음 글에서는 Proxmox VE에서 템플릿 기반으로 Kubernetes 노드 VM을 빠르게 복제하는 방법이나, 이전 글에서 다뤘던 스토리지 설계와 연결해서 etcd와 디스크 지연 이야기를 좀 더 깊게 풀어볼 예정입니다.

    Proxmox Nested Virtualization 활용 장단점 요약 이미지

    언제 쓰면 좋고 언제 피해야 하는지, 가상화 성능과 운영 복잡도 관점에서 한눈에 정리한 요약 인포그래픽입니다.

    9. 자주 묻는 질문

    Q. Kubernetes는 꼭 Nested Virtualization이 있어야 하나요?

    아닙니다. 일반 VM에서도 충분히 돌아갑니다. 다만 VM 내부에서 추가 가상화 기능 실험이 필요하거나, 특정 테스트 시나리오에서 CPU 기능 노출이 중요할 때 의미가 있습니다.

    Q. 홈랩 가상화에서 가장 먼저 점검할 건 뭔가요?

    저는 순서를 이렇게 봅니다. CPU 기능 노출, 디스크 지연, 브리지 네트워크, MTU, 그다음 kubelet과 CNI 로그입니다.

    Q. 가상화 성능 측정은 어떤 방식이 좋나요?

    처음부터 거창한 벤치마크보다, 노드 Ready 시간, Pod 생성 속도, 이미지 풀링, DNS 응답, 서비스 간 통신 안정성 같은 운영 지표부터 보는 게 더 실용적입니다.

  • [Proxmox] Proxmox VE vs VMware ESXi: 홈랩 환경 마이그레이션 1년 후기

    [Proxmox] Proxmox VE vs VMware ESXi: 홈랩 환경 마이그레이션 1년 후기

    Proxmox VE vs VMware ESXi: 홈랩 환경 마이그레이션 1년 후기

    Proxmox VE 마이그레이션을 고민하시는 분들이 요즘 꽤 많으시더라고요. 저도 홈랩(Home Lab, 집에서 운영하는 개인 실험실) 환경을 몇 년 동안 VMware ESXi로 굴리다가, 결국 Proxmox VE로 옮겨서 1년 정도 써봤습니다. 결론부터 말씀드리면, 홈랩 기준에서는 꽤 만족스러운 선택이었습니다. 물론 처음엔 익숙한 화면이 아니라서 좀 헤맸고, 네트워크 브리지(Bridge, 가상 스위치 역할)랑 스토리지(Storage, 저장소) 구조에서 삽질도 했습니다 ㅎㅎ 근데 실제로 써보니까 관리 흐름이 단순해지고, 실험용 VM(Virtual Machine, 가상 머신)과 LXC(Linux Container, 리눅스 컨테이너)까지 한 화면에서 다루는 점이 진짜 편하더라고요.

    이번 글은 제품 스펙 비교표만 나열하는 글은 아닙니다. VMware ESXi에서 Proxmox VE로 넘어가면서 무엇이 달라졌는지, 그리고 1년 동안 홈랩에서 굴려보니 어떤 점이 좋았고 어떤 점은 생각보다 불편했는지, 경험 위주로 정리해보겠습니다. 혹시 저처럼 “그냥 잘 돌아가던 걸 왜 굳이 바꾸지?”라는 생각이 드셨다면, 아마 도움이 되실 겁니다.

    Proxmox VE 마이그레이션을 위한 홈랩 가상화 환경 전체 아키텍처 이미지

    ESXi와 Proxmox VE가 각각 스토리지, 브리지 네트워크, 백업 저장소와 연결된 홈랩 전체 구조를 보여주는 이미지입니다.

    왜 VMware ESXi에서 Proxmox VE로 옮겼는가

    제가 ESXi를 오래 쓴 이유는 단순했습니다. 안정적이었고, 익숙했고, 기업 환경 감성이 있었거든요. 가상화 비교 관점에서도 ESXi는 오래 검증된 하이퍼바이저(Hypervisor, 가상화 계층)라서 믿음이 갔습니다. 실제로 VM 몇 대 올려서 NAS, 테스트용 쿠버네티스(Kubernetes), 모니터링 스택 정도 돌리는 데는 큰 문제가 없었습니다.

    근데 홈랩은 회사와 다르죠. 라이선스 정책, 관리 편의성, 백업 실험, 디스크 포맷 변경, 컨테이너 테스트 같은 자잘한 요구가 계속 생깁니다. 여기서부터 Proxmox VE가 조금씩 눈에 들어오기 시작했습니다. 쉽게 말해, ESXi는 깔끔하고 단단한 느낌이고, Proxmox VE는 좀 더 만지작거리기 좋은 실험실 스타일에 가깝습니다.

    • 웹 UI(Web User Interface, 웹 관리 화면)에서 VM과 컨테이너를 함께 관리할 수 있었습니다.
    • KVM(Kernel-based Virtual Machine, 리눅스 커널 기반 가상화)과 LXC를 같이 쓰는 구조가 홈랩에 잘 맞았습니다.
    • 스토리지 선택 폭이 넓어서 로컬 디스크, ZFS, NFS 같은 구성이 자연스러웠습니다.
    • 백업과 복원 흐름을 제가 원하는 방식으로 잡기 편했습니다.

    반대로, “무조건 Proxmox VE가 더 좋다”는 아닙니다. 기업 운영 기준으로 보면 VMware ESXi가 익숙한 팀도 많고, 기존 운영 절차와 잘 맞는 경우도 많습니다. 다만 홈랩이라면 이야기가 좀 달라집니다. 직접 만져보고 부숴보고 다시 올리는 과정이 잦기 때문에, 제 기준에서는 Proxmox VE 쪽이 손에 더 잘 붙었습니다.

    Proxmox VE와 VMware ESXi, 개념부터 쉽게 정리

    저도 처음엔 이게 뭔가 싶었는데, 막상 구조를 풀어보면 어렵지 않습니다. 쉽게 말해 두 제품 모두 “하드웨어 위에서 여러 운영체제를 동시에 돌리게 해주는 플랫폼”입니다. 다만 접근 방식이 조금 다릅니다.

    항목 VMware ESXi Proxmox VE
    기반 구조 전용 하이퍼바이저 중심 Debian 기반에 KVM/LXC 통합
    관리 감성 정돈된 기업형 유연한 홈랩형
    컨테이너 운영 별도 접근 필요 LXC를 기본 흐름 안에서 운영 가능
    스토리지 실험 보수적으로 운영하는 편 ZFS, 디렉터리, 네트워크 스토리지 연동이 편한 편
    학습 난이도 UI는 익숙하지만 생태계 의존이 있음 리눅스 감각이 있으면 확장성이 좋음

    여기서 중요한 포인트! Proxmox VE 마이그레이션은 단순히 하이퍼바이저를 갈아타는 작업이 아닙니다. 네트워크 구조, 백업 전략, 디스크 포맷, 운영 습관까지 같이 바뀝니다. 그래서 “성능이 더 좋냐”만 보면 판단이 틀어질 수 있습니다. 제가 직접 해보니, 체감 만족도는 성능보다도 운영 동선이 내 손에 맞느냐에서 갈리더라고요.

    마이그레이션 전에 꼭 점검한 것들

    실전 들어가기 전에 저는 체크리스트부터 만들었습니다. 이걸 안 하면 높은 확률로 중간에 멈춥니다. 특히 홈랩은 문서화가 느슨해서, 막상 옮기려 하면 “이 VM이 무슨 용도였지?”가 꼭 나오거든요.

    1. VM 인벤토리 정리: 어떤 VM이 항상 켜져 있어야 하는지, 테스트용인지, 폐기 가능한지 구분했습니다.
    2. 스토리지 구조 확인: VMDK(Virtual Machine Disk, VMware 디스크 포맷) 기준인지, 별도 NAS에 의존하는지 확인했습니다.
    3. 네트워크 의존성 파악: VLAN(Virtual LAN, 가상 분리 네트워크), 브리지, 고정 IP, 방화벽 규칙을 적어뒀습니다.
    4. 백업 선행: 마이그레이션 전에 무조건 백업부터 했습니다. 이건 진짜 중요합니다.
    5. 다운타임 허용 범위 확인: 홈 어시스턴트(Home Assistant), DNS, 리버스 프록시(Reverse Proxy, 역방향 프록시)처럼 끊기면 집안 전체가 불편한 서비스는 우선순위를 따로 잡았습니다.

    제 경우에는 특히 DNS와 리버스 프록시가 문제였습니다. 이 둘이 내려가면 나머지 서비스가 멀쩡해도 다 죽은 것처럼 보이거든요. 그래서 핵심 인프라 VM부터 옮기지 않고, 덜 중요한 워크로드부터 시험 이전을 했습니다. 이게 나중에 정신 건강에 정말 좋았습니다.

    실전: Proxmox VE 마이그레이션 진행 순서

    이제 본론입니다. 아래 순서는 제가 실제로 홈랩에서 썼던 흐름을 정리한 겁니다. 환경마다 조금 다르겠지만, 큰 틀은 비슷합니다.

    1. Proxmox VE 설치 후 기본 상태 확인

    설치 직후에는 무조건 현재 상태부터 확인했습니다. 특히 네트워크와 저장소가 정상인지 먼저 봐야 합니다.

    pveversion
    ip a
    pvesm status
    qm list
    pct list

    위 명령은 각각 버전 확인, 네트워크 인터페이스 확인, 스토리지 상태 확인, VM 목록, LXC 목록 확인입니다. 처음엔 별거 아닌 것 같았는데, 실제로 써보니까 여기서 꼬이면 뒤가 다 꼬이더라고요.

    2. 브리지 네트워크 구성 점검

    ESXi에서 vSwitch(가상 스위치) 개념에 익숙하셨다면, Proxmox VE에서는 Linux Bridge(리눅스 브리지) 설정을 먼저 이해하셔야 합니다. 저도 처음엔 이름만 다르고 비슷하겠지 했는데, 브리지에 IP를 어디에 붙이는지에서 잠깐 멈췄습니다.

    auto lo
    iface lo inet loopback
    
    auto eno1
    iface eno1 inet manual
    
    auto vmbr0
    iface vmbr0 inet static
        address 192.168.10.20/24
        gateway 192.168.10.1
        bridge-ports eno1
        bridge-stp off
        bridge-fd 0

    핵심은 물리 NIC(Network Interface Card, 네트워크 인터페이스)는 보통 manual로 두고, 실제 IP는 브리지에 붙인다는 점입니다. 이 구조를 이해하면 VM NIC 연결이 훨씬 명확해집니다.

    Proxmox VE 마이그레이션 중 브리지 네트워크와 스토리지 구성 예시 이미지

    Proxmox VE 관리 화면에서 브리지 네트워크와 스토리지 상태를 함께 보여주는 설정 예시 이미지입니다.

    3. VMware 디스크를 옮기고 VM 재구성

    가장 신경 썼던 구간입니다. VMware ESXi에서 내보낸 디스크를 Proxmox VE 쪽에서 받아서 붙이는 흐름이죠. 제 경우에는 일부 VM은 새로 만들고 디스크만 붙였고, 일부는 애플리케이션 레벨에서 재설치했습니다. 후자가 귀찮긴 한데, 결과적으로 더 깔끔한 경우도 있었습니다.

    qemu-img info source-disk.vmdk
    qemu-img convert -f vmdk -O qcow2 source-disk.vmdk vm-100-disk-0.qcow2

    그 다음 Proxmox VE에서 VM을 만들고 디스크를 연결했습니다. 여기서 CPU 타입, BIOS/UEFI, 디스크 버스 종류가 맞지 않으면 부팅이 안 될 수 있습니다. 저도 처음엔 이 부분에서 “왜 안 켜지지?” 하다가 한참 봤네요.

    qm create 100 --name ubuntu-test --memory 4096 --cores 2 --net0 virtio,bridge=vmbr0
    qm importdisk 100 vm-100-disk-0.qcow2 local-lvm
    qm set 100 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-100-disk-0
    qm set 100 --boot order=scsi0

    여기서 중요한 건 가져오기보다 검증입니다. VM이 켜진다고 끝이 아니고, 서비스가 정상 기동하는지, 네트워크 라우팅이 맞는지, 시간 동기화가 되는지까지 봐야 합니다.

    4. 백업 정책 다시 설계

    마이그레이션하면서 오히려 가장 만족했던 부분이 백업입니다. 예전에는 “일단 돌아가니까 됐지”였는데, Proxmox VE로 옮긴 뒤에는 스냅샷(Snapshot, 시점 복사)과 백업 작업을 좀 더 의식적으로 관리하게 됐습니다.

    vzdump 100 --mode snapshot --storage backup-nfs --compress zstd
    vzdump 101 --mode snapshot --storage backup-nfs --compress zstd

    백업 이름 규칙과 보관 정책을 정리해두니 복원 테스트가 쉬워졌습니다. 홈랩에서 진짜 중요한 건 백업 “존재”보다도 복원이 실제로 되는지 확인하는 습관이더라고요.

    ⚠️ 실제로 겪었던 문제와 해결 과정

    이 섹션이 아마 제일 현실적일 겁니다. Proxmox VE 마이그레이션 자체는 어렵지 않은데, 중간중간 사소한 함정이 있습니다.

    네트워크 인터페이스 이름이 달라져서 부팅은 되는데 통신이 안 됨

    이거 진짜 흔합니다. ESXi에서 쓰던 VM을 옮기면 게스트 OS 안에서 NIC 이름이 바뀌는 경우가 있거든요. 예를 들어 `ens160`으로 잡히던 게 `ens18`처럼 바뀌면, OS는 켜졌는데 네트워크가 죽어 있습니다.

    해결은 단순했습니다. 게스트 OS 안에서 인터페이스 이름을 다시 확인하고, Netplan(넷플랜, 네트워크 설정 도구)이나 기존 네트워크 스크립트를 수정했습니다.

    ip a
    ip route
    ping -c 4 192.168.10.1

    디스크는 붙었는데 부팅 로더가 꼬임

    특히 오래된 VM일수록 BIOS/UEFI 설정 차이 때문에 부팅이 안 되는 경우가 있었습니다. 처음엔 디스크 손상인 줄 알고 식겁했는데, 실제로는 부팅 모드가 안 맞는 경우가 있더라고요. 이럴 때는 VM 하드웨어 옵션을 다시 보고, 디스크 버스나 부트 순서를 조정해보면 해결되는 경우가 많았습니다.

    성능 문제라기보다 스토리지 설계 문제였음

    처음엔 “Proxmox VE가 느린가?” 싶었던 순간이 있었는데, 나중에 보니 스토리지 캐시와 디스크 배치 이슈였습니다. 결국 하이퍼바이저보다도 디스크 I/O(Input/Output, 입출력) 설계가 체감 성능을 더 크게 좌우하더라고요. 이건 ESXi든 Proxmox VE든 비슷합니다.

    • 자주 쓰는 VM은 빠른 스토리지에 배치했습니다.
    • 백업 저장소는 운영 디스크와 분리했습니다.
    • 로그와 모니터링을 통해 병목이 CPU인지 디스크인지 먼저 확인했습니다.

    삽질 좀 했습니다 ㅎㅎ 그런데 이 과정을 거치고 나니까, 단순 제품 비교보다 내 홈랩 설계가 얼마나 정리돼 있는지를 더 많이 보게 되더라고요.

    Proxmox VE 마이그레이션 과정의 VM 디스크 변환과 문제 해결 흐름 이미지

    VMDK 변환, VM 재등록, 네트워크 점검까지 이어지는 실제 마이그레이션 작업 흐름을 시각화한 이미지입니다.

    1년 써보니 체감한 결과

    1년 정도 지나고 나서 보니, 저는 결국 Proxmox VE 환경에 완전히 적응했습니다. 오히려 다시 VMware ESXi로 돌아가라고 하면 좀 답답할 것 같더라고요. 이유는 성능 숫자 하나 때문이 아니라, 운영의 유연성 때문입니다.

    • VM과 LXC를 같이 다루는 흐름이 홈랩에 잘 맞았습니다.
    • 웹 UI와 CLI(Command Line Interface, 명령줄 인터페이스)를 오가며 관리하기 편했습니다.
    • 백업과 복원 테스트를 더 자주 하게 됐습니다.
    • 실험 환경 분리가 쉬워져서 새로운 서비스를 올리는 부담이 줄었습니다.

    특히 Kubernetes 노드 테스트, 리버스 프록시 교체, 모니터링 재구성 같은 작업이 훨씬 가벼워졌습니다. “망가지면 다시 만들면 되지”라는 감각이 생기니까, 홈랩이 훨씬 재미있어졌어요. 이건 숫자로 표현하기 어려운 장점이더라고요.

    물론 단점도 있습니다. 리눅스 기반이라서, ESXi 특유의 일체형 경험에 익숙한 분은 초반에 거부감이 있을 수 있습니다. 그리고 잘 모르는 상태에서 너무 많은 걸 한 번에 바꾸면 오히려 운영 난이도가 올라갑니다. 그래서 제 추천은 간단합니다. 한 번에 전체 이전하지 말고, 낮은 중요도의 VM부터 옮겨보세요.

    Proxmox VE 마이그레이션 1년 운영 결과와 안정화 상태를 보여주는 이미지

    가동 중인 VM과 컨테이너, 백업 상태, 스토리지 사용량이 안정적으로 보이는 운영 결과 이미지입니다.

    가상화 비교 관점에서 정리한 선택 기준

    독자분들이 제일 궁금해하실 부분이라 따로 정리해보겠습니다. 결국 중요한 건 “무엇이 더 우월하냐”가 아니라 “내 환경에 무엇이 더 맞느냐”입니다.

    이런 분께 추천 더 잘 맞는 방향 이유
    기업형 워크플로에 익숙함 VMware ESXi 유지 검토 기존 운영 습관과 절차가 익숙할 수 있음
    홈랩에서 실험을 자주 함 Proxmox VE 고려 VM/LXC 혼합 운영과 유연한 설정이 편함
    리눅스 CLI에 익숙함 Proxmox VE 유리 문제 분석과 확장이 자연스러움
    최소 변경을 선호함 현 환경 유지 마이그레이션 자체가 리스크이기 때문

    제가 직접 해보니, Proxmox VE 마이그레이션은 “최신이라서” 혹은 “남들이 많이 하니까”가 아니라, 내 홈랩 운영 방식과 맞아떨어질 때 가장 만족도가 높았습니다. 저처럼 NAS, DNS, 프록시, 개발용 VM, 테스트용 컨테이너를 뒤섞어 쓰는 분이면 특히 체감이 클 수 있습니다.

    자주 묻는 질문

    Q1. 기존 VMware ESXi VM을 전부 그대로 옮겨야 할까요?

    꼭 그렇지는 않습니다. 애플리케이션 구성이 단순한 서비스는 새로 만들고 데이터만 옮기는 편이 더 깔끔할 때도 많습니다. 오래된 VM일수록 찌꺼기가 많아서, 오히려 재구성이 관리에 도움이 됩니다.

    Q2. Proxmox VE 마이그레이션 후 바로 체감할 만한 장점이 있나요?

    홈랩 기준으로는 관리 편의성과 실험 자유도가 가장 먼저 느껴집니다. 성능보다도 운영 동선이 가벼워지는 느낌이 큽니다.

    Q3. 초보자도 괜찮을까요?

    가능은 합니다. 다만 네트워크 브리지와 스토리지 개념은 꼭 먼저 잡고 들어가시는 게 좋습니다. 저도 처음엔 헷갈렸는데, 이 두 가지만 이해하면 진입 장벽이 확 낮아집니다.

    VMware ESXi와 Proxmox VE의 가상화 비교 요약 이미지

    홈랩 사용자의 관점에서 ESXi와 Proxmox VE의 차이를 한눈에 요약한 비교 이미지입니다.

    마무리: 1년 후에도 유지한 이유

    정리해보면 이렇습니다. VMware ESXi는 여전히 좋은 플랫폼입니다. 다만 제 홈랩에서는 Proxmox VE가 더 손에 맞았습니다. 직접 써보니 “관리”, “실험”, “복원”, “재구성” 이 네 가지 흐름이 훨씬 자연스러웠거든요. 드디어 됐다! 싶었던 순간이 백업 복원 테스트까지 매끄럽게 끝났을 때였습니다.

    혹시 지금 Proxmox VE 마이그레이션을 고민 중이시라면, 한 번에 다 옮기지 마시고 덜 중요한 VM 하나만 먼저 이전해보세요. 그 과정에서 네트워크, 스토리지, 백업 철학이 같이 정리됩니다. 그게 진짜 핵심입니다. 다음 글에서는 홈랩 기준으로 Proxmox Backup Server를 어떻게 붙여서 백업 전략을 단순화했는지 다뤄볼 예정입니다. 이전 글에서 다뤘던 홈 네트워크 분리 구성과 함께 보시면 더 이해가 잘 되실 겁니다.

    결국 가상화 비교의 답은 제품 소개 페이지에 있는 게 아니라, 내가 1년 뒤에도 불편 없이 계속 쓸 수 있느냐에 있더라고요. 제 경우 그 답은 Proxmox VE였습니다.

  • [클라우드] VMware ESXi에서 OpenStack으로 전환한 실제 사례

    [클라우드] VMware ESXi에서 OpenStack으로 전환한 실제 사례

    [클라우드] VMware ESXi에서 OpenStack으로 전환한 실제 사례

    VMware OpenStack 마이그레이션을 고민하는 분들이 요즘 정말 많으시죠. 라이선스 정책 변화나 비용 구조, 그리고 운영 자동화 수준을 다시 점검해야 하는 시점이 오면 결국 한 번은 ESXi OpenStack 전환을 검토하게 되더라고요. 저도 처음엔 “하이퍼바이저(Hypervisor, 가상화 실행 계층)만 바꾸면 끝나는 거 아닌가?” 싶었는데, 실제로 해보니 전혀 아니었습니다. 컴퓨트(Compute), 네트워크(Network), 스토리지(Storage), 이미지(Image) 관리 방식이 다 바뀌거든요. 그래서 오늘은 제가 홈랩과 내부 테스트 환경에서 진행했던 흐름을 바탕으로, VMware 대안 OpenStack을 검토할 때 어디서 막히고 어떻게 풀어야 하는지 경험 위주로 정리해보겠습니다.

    특히 이 글은 “OpenStack이 좋아 보이는데 실제 전환은 어떻게 하지?”, “클라우드 마이그레이션 사례를 봐도 다 추상적이던데 실무 감각이 있는 글이 없네” 하셨던 분들께 맞춰 썼습니다. 숫자 뻥튀기나 과장 없이, 제가 직접 부딪히며 정리한 포인트만 담아볼게요.

    VMware OpenStack 마이그레이션 전체 아키텍처 다이어그램

    기존 ESXi 가상머신이 이미지 변환과 네트워크 재설계를 거쳐 OpenStack으로 이동하는 전체 흐름을 보여주는 개요 이미지입니다.

    왜 VMware ESXi에서 OpenStack으로 옮기게 될까요

    쉽게 말해서 ESXi는 가상화 플랫폼 중심의 운영 경험을 주고, OpenStack은 클라우드 운영체계에 가깝습니다. 둘 다 가상머신(VM, Virtual Machine)을 띄운다는 점은 같지만, 운영 철학이 꽤 다릅니다. VMware 환경은 관리 콘솔이 잘 정리되어 있고 초기 안정화가 쉬운 편이죠. 반면 OpenStack은 구성 요소가 많아서 처음엔 복잡해 보이지만, 자동화와 API(Application Programming Interface, 프로그램 제어 인터페이스) 중심 운영으로 넘어가면 확실히 강점이 있습니다.

    제가 전환을 결심했던 이유도 단순했습니다.

    • 비용 구조를 장기적으로 통제하고 싶었습니다.
    • API 기반 자동화를 더 강하게 가져가고 싶었습니다.
    • 네트워크를 더 세밀하게 분리하고 싶었습니다.
    • 벤더 종속성(Vendor lock-in, 특정 벤더 의존)을 줄이고 싶었습니다.

    다만 여기서 중요한 게 하나 있어요. VMware OpenStack 마이그레이션은 제품 교체가 아니라 운영 모델 전환이라는 점입니다. 이거 무시하면 중간에 꼭 한 번 크게 흔들려요. 저도 처음엔 VM만 잘 옮기면 될 줄 알았는데, 보안그룹(Security Group, 가상 방화벽), 네트워크 세그먼트, 스토리지 타입 설계에서 삽질 좀 했습니다 ㅎㅎ

    핵심 개념 정리: ESXi와 OpenStack은 무엇이 다를까

    이 부분은 꼭 짚고 넘어가야 해요. 독자분들이 제일 많이 헷갈려 하시는 부분이거든요.

    영역 VMware ESXi 중심 OpenStack 중심
    가상화 실행 ESXi 보통 KVM(Kernel-based Virtual Machine)
    관리 계층 vCenter OpenStack API와 Horizon
    이미지 관리 템플릿, OVA/OVF Glance(글랜스, 이미지 서비스)
    컴퓨트 제어 클러스터/호스트 중심 Nova(노바, 컴퓨트 서비스)
    네트워크 vSwitch, 포트 그룹 Neutron(뉴트론, 네트워크 서비스)
    블록 스토리지 데이터스토어 중심 Cinder(신더, 블록 스토리지)
    인증 vCenter 계정/연동 Keystone(키스톤, 인증 서비스)

    쉽게 말해서 VMware에서는 사람이 콘솔에서 정리해주는 느낌이 강했다면 OpenStack은 “정책과 API로 자원을 선언적으로 다룬다”는 느낌이 더 강합니다. 그래서 클라우드 마이그레이션 사례를 볼 때도 VM 파일 이동만 보면 안 되고, 네트워크와 접근제어를 같이 봐야 합니다.

    전환 전에 꼭 분류해야 할 워크로드

    1. 상태 저장형(Stateful)인지 확인합니다. 데이터베이스처럼 디스크 의존도가 높으면 더 신중해야 합니다.
    2. 정적 IP, MAC 의존성이 있는지 봅니다. 방화벽이나 라이선스 서버가 여기서 많이 걸립니다.
    3. 운영체제 부팅 방식이 BIOS인지 UEFI인지 점검합니다.
    4. 게스트 OS 안에 VMware Tools 의존 설정이 있는지 확인합니다.
    5. 백업/복구 체계가 OpenStack 쪽에서도 유지되는지 따져봅니다.

    제가 직접 해보니 이 분류 작업이 귀찮아 보여도 가장 중요했습니다. 이걸 대충 하면 나중에 전환 일정이 아니라 장애 대응 일정이 되어버립니다.

    사전 준비: VMware OpenStack 마이그레이션 체크리스트

    실전 들어가기 전에 제가 잡았던 기준은 아래와 같았습니다. 여기서 절반이 결정된다고 봐도 됩니다.

    • 대상 VM 목록: 운영, 스테이징, 개발을 분리합니다.
    • 종속성 매핑: DB, 외부 API, DNS, NTP, 라이선스 서버 연결을 정리합니다.
    • 네트워크 설계: OpenStack 테넌트 네트워크와 외부 네트워크를 미리 정의합니다.
    • 이미지 변환 절차: VMDK에서 QCOW2 또는 RAW로 갈지 정합니다.
    • 전환 방식: 빅뱅(Big Bang)보다 단계적 전환을 권장합니다.
    • 롤백 계획: 문제 생기면 다시 ESXi에서 기동할 수 있게 둡니다.

    저는 처음에 네트워크를 나중에 맞추면 되겠지 하고 넘어갔다가, OpenStack의 포트(Port)와 보안그룹 정책 때문에 통신 확인에 시간을 꽤 썼습니다. VM 부팅보다 통신 성공이 더 어렵더라고요.

    실전 구현 1: ESXi VM 추출과 디스크 변환

    이제 본론입니다. 제가 많이 썼던 흐름은 VM 종료 – 디스크 추출 – 이미지 변환 – OpenStack 업로드 – 테스트 부팅 순서였습니다. 무중단 전환이 절대적으로 필요한 서비스가 아니라면, 이 방식이 가장 단순하고 예측 가능했습니다.

    1. VMware 쪽 VM 상태 확인

    govc vm.info -vm /Datacenter/vm/app-server-01
    

    govc는 VMware vSphere 환경을 CLI(Command Line Interface, 명령행 인터페이스)로 다룰 때 꽤 유용합니다. 환경에 따라 vCenter를 쓰지 않고 직접 ESXi에서 파일을 꺼낼 수도 있습니다.

    2. OVF 또는 VMDK 형태로 추출

    ovftool vi://[email protected]@vcenter.example.local/Datacenter/vm/app-server-01 ./app-server-01
    

    환경에 따라 OVA/OVF 패키지로 받거나 VMDK만 직접 확보해도 됩니다. 저는 처음엔 OVA가 편해 보여서 그렇게 했는데, 실제로는 디스크 변환만 필요할 때 VMDK 직취득이 더 단순한 경우도 있었습니다.

    3. VMDK를 QCOW2로 변환

    qemu-img convert -p -f vmdk -O qcow2 app-server-01-disk1.vmdk app-server-01.qcow2
    qemu-img info app-server-01.qcow2
    

    여기서 qemu-img는 거의 필수 도구라고 보시면 됩니다. 변환 후 qemu-img info로 포맷과 가상 크기를 꼭 확인하세요. 저는 한 번은 스냅샷 체인이 남은 VMDK를 잘못 잡아서 이미지가 이상하게 올라간 적이 있었습니다.

    VMware OpenStack 마이그레이션에서 VMDK를 QCOW2로 변환하는 작업 흐름 이미지

    VMDK 추출, qemu-img 변환, Glance 업로드로 이어지는 실제 작업 흐름을 설명하는 이미지입니다.

    실전 구현 2: OpenStack 이미지 업로드와 네트워크 구성

    OpenStack으로 넘어오면 이제부터는 이미지와 네트워크가 핵심입니다. 이 구간에서 “드디어 됐다!” 싶다가도 보안그룹 하나 빠뜨리면 SSH도 안 붙고, 웹도 안 열리고, 괜히 이미지 탓하게 됩니다.

    1. 이미지 등록

    openstack image create "app-server-01" \
      --file app-server-01.qcow2 \
      --disk-format qcow2 \
      --container-format bare \
      --private
    

    OpenStack의 Glance는 이미지 저장소 역할을 합니다. 템플릿 개념과 비슷하지만, API 중심 운영에 더 잘 녹아 있습니다.

    2. 네트워크와 서브넷 준비

    openstack network create prod-net
    openstack subnet create prod-subnet \
      --network prod-net \
      --subnet-range 192.168.100.0/24 \
      --dns-nameserver 8.8.8.8
    

    물론 실무에서는 외부 DNS를 그대로 넣기보다 내부 DNS 체계를 맞추는 경우가 많습니다. 여기서는 예시만 단순하게 보여드리는 거예요.

    3. 보안그룹 생성

    openstack security group create web-sec
    openstack security group rule create --protocol tcp --dst-port 22 web-sec
    openstack security group rule create --protocol tcp --dst-port 80 web-sec
    openstack security group rule create --protocol tcp --dst-port 443 web-sec
    

    여기서 중요한 포인트! VMware 쪽에서는 포트 그룹과 상위 방화벽 정책으로 어느 정도 익숙하게 처리되던 것이, OpenStack에서는 인스턴스 단위 정책으로 체감될 때가 있습니다. 처음엔 이게 뭔가 싶었는데, 익숙해지면 오히려 훨씬 명확합니다.

    4. 인스턴스 기동

    openstack server create app-server-01 \
      --flavor m1.medium \
      --image app-server-01 \
      --network prod-net \
      --security-group web-sec
    

    이후 Floating IP(Floating IP, 외부 접근용 유동 IP)가 필요한 구조라면 외부 네트워크에 붙여줘야 합니다.

    openstack floating ip create public-net
    openstack server add floating ip app-server-01 203.0.113.10
    

    ⚠️ 실제로 많이 막히는 문제들: ESXi OpenStack 전환 트러블슈팅

    여기가 제일 중요합니다. 성공 사례는 대부분 결과만 보여주는데, 실무에서는 이 구간이 진짜 본게임입니다.

    1. 부팅은 되는데 네트워크가 안 붙는 경우

    원인은 보통 세 가지였습니다.

    • 게스트 OS 안에 VMware 네트워크 인터페이스 설정이 남아 있는 경우
    • udev 규칙 때문에 NIC 이름이 바뀌는 경우
    • OpenStack 보안그룹에서 필요한 포트가 안 열린 경우

    리눅스는 부팅 후 인터페이스 이름을 먼저 확인했습니다.

    ip addr
    ip route
    journalctl -b | grep -i network
    

    특히 CentOS나 Ubuntu 구버전 계열은 예전 NIC 정보 때문에 인터페이스가 달라지는 일이 종종 있었습니다. 저는 이 문제를 몇 번 겪고 나서는 이미지 올리기 전에 네트워크 설정 파일을 먼저 정리하는 습관이 생겼습니다.

    2. 디스크는 붙었는데 부팅이 불안정한 경우

    이건 VirtIO(Virtual I/O, 가상 장치 고속 드라이버) 드라이버나 부팅 로더 문제일 때가 많았습니다. 윈도우 게스트는 VirtIO 드라이버 준비 여부를 꼭 점검하셔야 하고, 리눅스는 initramfs 안에 필요한 드라이버가 포함됐는지 보는 게 좋습니다.

    3. 시간이 틀어지거나 애플리케이션이 이상 동작하는 경우

    NTP(Network Time Protocol, 시간 동기화)와 DNS는 가볍게 보면 안 됩니다. OpenStack 쪽 인스턴스가 올라오고 서비스는 떠 있는데, 인증이나 토큰 검증이 계속 실패하면 시간 동기화부터 보셔야 합니다. 이거 진짜 자주 놓칩니다.

    4. 스냅샷 의존 운영 습관

    VMware에서 스냅샷을 임시 안전장치처럼 쓰던 습관이 있으면 OpenStack으로 넘어와서 운영 방식 자체를 다시 잡아야 합니다. 인스턴스 스냅샷, 볼륨 스냅샷, 이미지 버전 관리, 백업 정책을 분리해서 생각해야 하거든요. 저도 처음엔 “스냅샷 느낌이 왜 다르지?” 싶었는데, 클라우드식 운영으로 사고방식을 바꾸니까 정리가 되더라고요.

    ESXi OpenStack 전환 시 OpenStack 네트워크와 보안그룹 구성 다이어그램

    테넌트 네트워크, 라우터, 보안그룹, 플로팅 IP 관계와 함께 통신 장애 포인트를 표시하는 설명 이미지입니다.

    검증 방법: 클라우드 마이그레이션 사례에서 놓치면 안 되는 체크

    전환이 끝났다고 바로 운영으로 넘기면 안 됩니다. 저는 아래 순서로 검증했습니다.

    1. 인스턴스 상태 확인: ACTIVE 상태인지, 콘솔 로그에 에러가 없는지 봅니다.
    2. 네트워크 점검: 내부 통신, 외부 통신, DNS 해석을 확인합니다.
    3. 애플리케이션 점검: 웹, API, 배치 작업, 데이터 연결을 확인합니다.
    4. 성능 비교: 최소한 부팅 시간, 응답성, 디스크 지연 체감은 체크합니다.
    5. 운영 도구 점검: 백업, 모니터링, 로그 수집이 붙는지 확인합니다.
    openstack server list
    openstack console log show app-server-01
    ping -c 4 192.168.100.10
    curl -I http://192.168.100.10
    

    여기서 제가 제일 강조하고 싶은 건, VM이 떠 있는 것과 서비스가 정상인 것은 다르다는 점입니다. 실제로는 애플리케이션 레벨 체크가 마지막 문턱이었습니다.

    클라우드 마이그레이션 사례 검증을 위한 OpenStack 인스턴스 상태 대시보드

    마이그레이션 이후 인스턴스 상태, 네트워크 연결, 서비스 응답을 한눈에 확인하는 검증 대시보드 이미지입니다.

    전환 결과: 제가 얻은 것과 예상 밖의 변화

    결론부터 말씀드리면, 제 경우엔 VMware OpenStack 마이그레이션 자체는 성공이었습니다. 특히 개발/스테이징 계열 워크로드에서는 OpenStack의 장점이 빨리 보였습니다. API로 인스턴스를 만들고, 네트워크를 분리하고, 이미지 기반으로 재현 가능한 환경을 만드는 흐름이 아주 좋았거든요.

    반대로 예상보다 시간이 더 걸린 부분도 있었습니다.

    • 운영팀의 사고방식 전환: 가상머신 관리에서 클라우드 자원 관리로 바뀝니다.
    • 네트워크 설계: OpenStack Neutron 이해도가 없으면 초반에 막힙니다.
    • 표준 이미지 전략: 아무 VM이나 옮기는 방식은 오래 못 갑니다.

    즉, VMware 대안 OpenStack은 충분히 현실적인 선택지이지만, “기존 VM을 그냥 다른 데 올린다”는 접근으로는 만족도가 떨어질 수 있습니다. 반대로 이미지 표준화, 자동화, 셀프서비스 포털, IaC(Infrastructure as Code, 코드형 인프라)까지 연결하면 진가가 나옵니다.

    정리와 다음 단계: 이런 순서로 접근하면 덜 흔들립니다

    혹시 지금 전환을 검토 중이시라면, 제가 추천하는 순서는 이렇습니다.

    1. 가장 덜 중요한 개발 VM부터 파일럿으로 옮깁니다.
    2. 이미지 변환 절차를 문서화합니다.
    3. 네트워크와 보안그룹 템플릿을 먼저 만듭니다.
    4. 백업, 모니터링, 로그 수집을 붙인 뒤 운영계로 확장합니다.
    5. 마지막에 표준 이미지와 자동 배포 흐름까지 정리합니다.

    사실 저도 처음엔 OpenStack이 너무 많은 조각으로 보였는데, 하나씩 이해하고 나니 왜 다들 클라우드 운영체계라고 부르는지 알겠더라고요. 반대로 VMware에서 익숙했던 편의 기능이 사라진 듯 느껴지는 순간도 있었는데, 그건 “없다”기보다 “다른 방식으로 설계해야 한다”에 가까웠습니다.

    이전 글에서 다뤘던 가상화 스토리지 설계 내용과도 연결되는 부분이 있고, 다음 글에서는 OpenStack에서 표준 이미지와 cloud-init(cloud-init, 초기 부팅 자동 설정)를 묶어 운영하는 방법도 다뤄볼 예정입니다. 여기까지 정리해보니, 결국 성공 포인트는 기술 하나가 아니라 운영 모델의 재설계였습니다.

    VMware 대안 OpenStack 전환 포인트 비교 인포그래픽

    운영 모델, 네트워크, 스토리지, 자동화 관점에서 VMware와 OpenStack의 차이를 요약한 마무리 인포그래픽입니다.

    자주 묻는 질문

    Q1. ESXi에서 OpenStack으로 무중단 전환이 가능한가요?

    가능 여부는 애플리케이션 구조에 달려 있습니다. 일반적인 단일 VM 서비스는 점검 시간을 잡고 이미지 기반으로 옮기는 편이 더 현실적이었습니다.

    Q2. 모든 VMware VM이 그대로 OpenStack에서 잘 동작하나요?

    아닙니다. 네트워크 설정, 드라이버, 부팅 방식, 에이전트 의존성에 따라 손봐야 할 부분이 꽤 있습니다. 특히 오래된 VM일수록 사전 점검이 중요합니다.

    Q3. OpenStack이 무조건 비용 절감으로 이어지나요?

    단순히 플랫폼만 바꾼다고 바로 그렇진 않습니다. 운영 역량, 자동화 수준, 표준화 정도가 함께 따라와야 의미 있는 효과가 납니다.

    Q4. 가장 먼저 테스트할 워크로드는 무엇이 좋을까요?

    개발 또는 스테이징 환경의 웹 애플리케이션부터 권장합니다. 네트워크와 이미지 변환 절차를 검증하기에 적당하고, 실패했을 때 영향도 상대적으로 적습니다.

  • [Proxmox] VMware 마이그레이션, Proxmox로 전환 시 고려사항 및 성공 전략

    [Proxmox] VMware 마이그레이션, Proxmox로 전환 시 고려사항 및 성공 전략

    [Proxmox] VMware 마이그레이션, Proxmox로 전환 시 고려사항 및 성공 전략

    안녕하세요, 13년차의 서버실입니다. 제가 13년 동안 서버실을 지키면서 참 많은 가상화 솔루션을 만나보고 또 직접 구축하고 운영해봤는데요. 그중에서도 VMware ESXi는 오랫동안 업계 표준처럼 여겨져 왔죠. 저도 수많은 프로젝트에서 VMware를 사용해왔습니다. 근데 최근 들어 이런저런 이유로 VMware ESXi를 대체할 솔루션을 고민하시는 분들이 부쩍 늘었더라고요. 특히 홈랩을 운영하는 분들이나 중소기업 환경에서는 비용 부담 때문에 오픈소스 솔루션으로 눈을 돌리는 경우가 많더라고요.

    저도 최근에 홈랩의 일부 워크로드를 VMware ESXi에서 Proxmox VE로 마이그레이션(Migration)하는 삽질을 좀 했습니다. 처음엔 이거 뭐 그냥 옮기면 되는 거 아니야? 싶었는데, 막상 해보니 생각보다 고려해야 할 점들이 많더군요. 특히 기존 VMware 가상머신(Virtual Machine, VM)을 Proxmox 환경으로 가져올 때 포맷 변환부터 드라이버 문제까지, 하나하나 짚어가면서 해결해야 할 숙제들이 있었습니다. 오늘은 제가 직접 겪었던 경험을 바탕으로 VMware 마이그레이션을 Proxmox로 전환할 때 어떤 점들을 고려해야 하고, 어떻게 하면 성공적으로 마이그레이션할 수 있는지 그 전략들을 함께 알아보는 시간을 가지려고 합니다. 저처럼 삽질하실 분들을 위해 핵심만 콕콕 짚어드릴게요!

    VMware ESXi에서 Proxmox VE로의 가상머신 마이그레이션 전체 흐름을 보여주는 다이어그램

    VMware ESXi에서 Proxmox VE로의 가상머신 마이그레이션 전체 흐름을 보여주는 다이어그램입니다. 각 단계별로 어떤 작업이 필요한지 한눈에 파악할 수 있어요.

    Proxmox VE, 과연 VMware의 좋은 대안일까요?

    먼저, Proxmox VE (Virtual Environment)가 뭔지 간단하게 짚고 넘어갈게요. Proxmox VE는 오픈소스 기반의 완전한 가상화 관리 플랫폼이에요. 쉽게 말해, VMware ESXi처럼 서버 한 대에 여러 개의 가상머신을 돌릴 수 있게 해주는 하이퍼바이저(Hypervisor)인 셈이죠. 근데 Proxmox는 단순히 가상머신(KVM)만 지원하는 게 아니라, 컨테이너(LXC)까지 통합해서 관리할 수 있다는 점이 정말 좋더라고요. 게다가 웹 기반의 깔끔한 관리 인터페이스를 제공해서 초보자도 쉽게 접근할 수 있고요. Ceph (분산 스토리지)나 HA (High Availability, 고가용성) 클러스터링 기능까지 기본으로 제공하니, 엔터프라이즈급 기능들을 오픈소스로 무료로 사용할 수 있다는 게 정말 신선했어요.

    제가 Proxmox를 홈랩에 도입해보고 느낀 건, “이거 진짜 물건이네?” 였습니다. 특히 기존 VMware ESXi 환경에서 익숙했던 기능들이 Proxmox에도 대부분 존재하고, 오히려 더 유연하게 설정할 수 있는 부분들도 많더라고요. 물론 상용 솔루션만큼의 완벽한 기능이나 기술 지원을 기대하긴 어렵지만, 커뮤니티가 활성화되어 있어서 웬만한 문제는 검색만으로도 해결할 수 있었습니다.

    VMware에서 Proxmox로 가상머신 마이그레이션 실전 전략

    자, 그럼 이제 본격적으로 VMware ESXi에 있던 가상머신을 Proxmox VE로 옮기는 방법을 알아볼까요? 제가 직접 해보니 몇 가지 핵심 단계가 있더라고요.

    1. VMware VM 내보내기 (Exporting VMware Virtual Machines)

    가장 먼저 할 일은 VMware ESXi에 있는 가상머신을 내보내는 겁니다. 보통 OVF (Open Virtualization Format)나 OVA (Open Virtual Appliance) 파일 형식으로 내보내게 되죠. vSphere Client나 OVF Tool을 사용해서 쉽게 내보낼 수 있어요. 저는 주로 vSphere Client를 사용했는데요, 간단히 VM을 우클릭해서 ‘템플릿’ → ‘OVF 템플릿 내보내기’를 선택하면 됩니다. 이때 모든 디스크를 하나로 묶을지, 아니면 개별로 분리할지 선택할 수 있어요. 나중에 Proxmox에서 작업하기 훨씬 편하니까, 개별 파일로 내보내는 걸 추천해요.

    # OVF Tool을 사용하여 VM 내보내기 (예시)
    # OVF Tool은 VMware에서 제공하는 CLI 도구입니다.
    # 'vi://:@/' 형식으로 원본 VM을 지정합니다.
    # --targetDiskFormat: thin, thick, monolithicSparse, monolithicFlat 등
    # --noImageFiles: 디스크 이미지를 제외하고 OVF 파일만 내보낼 때 사용
    
    # 예시: vSphere ESXi 호스트에서 'MyVM'이라는 가상머신을 로컬 디렉토리로 내보내기
    # ovftool "vi://root:[email protected]/MyVM" "/path/to/save/MyVM.ovf"
    
    # 주의: OVF Tool은 설치와 사용법이 다소 복잡할 수 있어, vSphere Client GUI가 더 편리할 수 있습니다.
    

    2. 가상 디스크 포맷 변환 (Converting Virtual Disk Format)

    VMware에서 내보낸 가상 디스크 파일은 주로 VMDK (.vmdk) 포맷입니다. 그런데 Proxmox VE는 KVM 기반이라 QCOW2 (.qcow2) 포맷이 더 일반적이고 성능도 좋거든요. 그래서 이 VMDK 파일을 QCOW2로 변환해줘야 하는데요. 이때 사용하는 강력한 도구가 바로 qemu-img입니다. Proxmox 서버나 별도의 Linux 서버에서 이 작업을 할 수 있어요.

    제가 가장 많이 삽질했던 부분 중 하나가 바로 이 포맷 변환이었습니다. 변환 옵션을 잘못 주거나, 원본 파일이 손상되어 있으면 부팅이 안 되는 불상사가 발생하더라고요. 원본 VMDK 파일은 꼭 백업해두고 작업하세요!

    # Proxmox 서버나 Linux 터미널에서 실행
    # VMDK 파일을 QCOW2 포맷으로 변환
    # -f: 원본 파일 형식 (from format)
    # -O: 대상 파일 형식 (to format)
    
    qemu-img convert -f vmdk -O qcow2 /path/to/your/vmware_vm.vmdk /path/to/your/proxmox_vm.qcow2
    
    # 만약 변환 중 문제가 발생한다면, 원본 VMDK 파일의 무결성을 확인하거나
    # 다른 변환 옵션 (예: -o cluster_size=2M)을 시도해볼 수 있어요.
    # 스냅샷이 포함된 VMDK 파일은 더 복잡할 수 있습니다.
    
    VMDK 파일을 QCOW2 포맷으로 변환하는 qemu-img convert 명령어 실행 화면

    qemu-img convert 명령어를 통해 VMDK 파일을 QCOW2 포맷으로 변환하는 과정을 터미널에서 보여주는 화면입니다. 이 과정은 마이그레이션의 핵심 단계 중 하나입니다.

    3. Proxmox VE로 가져오기 및 VM 생성 (Importing to Proxmox VE and Creating VM)

    변환된 QCOW2 파일을 Proxmox VE 서버의 적절한 스토리지 경로로 옮긴 다음, 새로운 가상머신을 생성하고 이 디스크를 연결해줘야 합니다.

    1. QCOW2 파일 업로드/이동: Proxmox 서버의 `/var/lib/vz/images/` 경로 아래에 새 VM ID 폴더를 만들고 그 안에 QCOW2 파일을 복사해요. 또는 Proxmox 웹 UI의 ‘스토리지’에서 ‘콘텐츠’ 업로드 기능을 사용할 수도 있어요.
    2. 새 가상머신 생성: Proxmox 웹 UI에서 ‘VM 생성’ 버튼을 누르고, 운영체제는 ‘미디어 사용 안 함’을 선택해요. CPU, 메모리, 네트워크 등은 기존 VMware VM과 비슷하게 설정하면 됩니다.
    3. 기본 디스크 분리: 새로 생성된 VM에는 기본적으로 작은 디스크가 하나 붙어있을 겁니다. 이 디스크는 ‘하드웨어’ 탭에서 선택 후 ‘분리’하면 됩니다.
    4. 변환된 디스크 연결: ‘하드웨어’ 탭에서 ‘추가’ → ‘하드 디스크’를 선택해요. ‘저장소’는 QCOW2 파일이 있는 스토리지를 선택하고, ‘디스크 이미지’는 앞서 복사해둔 QCOW2 파일을 선택합니다. 버스/장치는 SCSI 또는 VirtIO Block을 선택하는 게 성능상 유리해요. 컨트롤러는 VirtIO SCSI Single을 추천합니다.
    5. 부팅 순서 설정: ‘옵션’ 탭에서 ‘부팅 순서’를 변경하여 새로 연결한 디스크로 부팅하도록 설정합니다.

    4. 게스트 에이전트 설치 및 네트워크 설정 (Installing Guest Agent and Network Configuration)

    여기서 또 한 번의 삽질이 기다리고 있을 수 있어요. VM이 성공적으로 부팅되었다고 끝이 아니거든요! 성능 최적화와 안정적인 관리를 위해 몇 가지 추가 작업이 필요합니다.

    • QEMU Guest Agent 설치: VMware Tools처럼, Proxmox 환경에서는 QEMU Guest Agent를 설치해야 해요. 이걸 설치해야 Proxmox 웹 UI에서 VM의 IP 주소나 게스트 OS 상태를 정확하게 확인할 수 있고, 깔끔한 종료(shutdown)나 재부팅(reboot) 명령도 정상적으로 동작합니다.
    # Debian/Ubuntu 기반 게스트 OS에서 QEMU Guest Agent 설치
    sudo apt update
    sudo apt install qemu-guest-agent
    sudo systemctl start qemu-guest-agent
    sudo systemctl enable qemu-guest-agent
    
    # CentOS/RHEL 기반 게스트 OS에서 QEMU Guest Agent 설치
    sudo yum install qemu-guest-agent
    sudo systemctl start qemu-guest-agent
    sudo systemctl enable qemu-guest-agent
    
    • 네트워크 드라이버 설정: VMware에서 사용하던 E1000이나 VMXNET3 드라이버가 Proxmox 환경에서는 제대로 작동하지 않을 수 있습니다. Proxmox에서는 VirtIO (Virtio network device) 드라이버를 사용하는 게 성능상 훨씬 유리해요. VM 설정에서 네트워크 장치를 VirtIO로 변경하고, 게스트 OS 내부에서 네트워크 설정을 다시 해줘야 할 수 있습니다.

    ⚠️ 마이그레이션 중 겪었던 주의사항 및 트러블슈팅

    저도 마이그레이션을 하면서 몇 번의 좌절을 겪었습니다. 특히 이런 문제들이 자주 발생하더라고요.

    • 부팅 문제 (Boot Issues): VMDK를 QCOW2로 변환 후 부팅이 안 되는 경우가 있어요. 대부분 디스크 컨트롤러 타입 문제인데요. Proxmox VM 생성 시 디스크 컨트롤러를 VirtIO SCSI로 설정하고, 게스트 OS에 VirtIO 드라이버가 없으면 부팅이 안 될 수 있습니다. Windows OS의 경우 VirtIO 드라이버 ISO를 연결하여 드라이버를 수동으로 설치해야 할 수도 있어요.
    • 네트워크 연결 불가: 위에서 언급했듯이, 네트워크 장치를 VirtIO로 변경하면 기존 드라이버가 없어서 네트워크가 안 잡힐 수 있습니다. 게스트 OS에 접속해서 네트워크 인터페이스 설정 파일(예: Linux의 /etc/network/interfaces나 /etc/sysconfig/network-scripts/)을 수정하거나, Windows의 경우 장치 관리자에서 드라이버를 업데이트해야 합니다.
    • 스냅샷 문제: VMware VM에 스냅샷이 많다면 마이그레이션이 복잡해질 수 있어요. 가급적 스냅샷을 모두 제거하고 베이스 디스크만 내보내는 것을 권장합니다.
    • 성능 저하: 마이그레이션 후 VM 성능이 기대 이하라면, 디스크와 네트워크 장치를 모두 VirtIO로 설정했는지, QEMU Guest Agent가 설치되어 잘 작동하는지 꼭 확인해봐요. CPU 타입도 ‘host’로 설정하는 게 최적의 성능을 낼 수 있습니다.

    🎉 마이그레이션 결과 확인 및 검증

    모든 과정을 거쳐 VM이 정상적으로 부팅되고 작동한다면, 이제 마이그레이션이 성공적으로 완료된 거예요. Proxmox 웹 UI에서 VM의 상태를 확인하고, 게스트 OS 내부에서 네트워크 연결, 서비스 동작 여부 등을 꼼꼼히 검증해야 합니다.

    • Proxmox 웹 UI 확인: VM의 CPU, 메모리 사용량, 네트워크 트래픽 등이 정상적으로 표시되는지 확인해요. QEMU Guest Agent가 활성화되어 있다면, IP 주소도 보일 겁니다.
    • 게스트 OS 내부 확인: SSH나 콘솔로 접속하여 주요 서비스(웹 서버, DB 등)가 제대로 시작되었는지, 파일 시스템은 정상인지, 네트워크 연결은 원활한지 테스트해요. ping, ifconfig (또는 ip a), df -h 등의 명령어를 활용하면 좋겠죠.

    Proxmox VE 웹 인터페이스에서 성공적으로 마이그레이션된 가상머신의 개요 대시보드 화면입니다. VM의 상태, 리소스 사용량, 네트워크 정보 등을 한눈에 확인할 수 있습니다.

    마무리하며: Proxmox, 새로운 시작을 위한 현명한 선택

    솔직히 처음엔 VMware ESXi에 너무 익숙해서 Proxmox VE로 넘어가는 게 번거롭지 않을까 걱정했었습니다. 하지만 직접 마이그레이션을 해보고 몇 주간 운영해보니, Proxmox VE는 충분히 강력하고 유연한 대안이라는 걸 깨달았어요. 물론 중간중간 삽질도 좀 했지만, 그 과정에서 얻은 경험은 정말 값지다고 생각합니다.

    특히 비용 문제로 고민이 많으셨던 분들이나, 홈랩에서 다양한 기술을 자유롭게 실험해보고 싶으신 분들에게 Proxmox VE는 아주 좋은 선택이 될 거예요. 이번 글이 VMware 마이그레이션을 Proxmox로 전환하려는 분들에게 조금이나마 도움이 되었으면 좋겠네요. 다음번에는 Proxmox VE 클러스터링이나 Ceph 스토리지 구성에 대한 저의 삽질 경험을 공유해드릴게요!

    VMware ESXi와 Proxmox VE의 핵심 기능을 비교하는 인포그래픽 표

    VMware ESXi와 Proxmox VE의 주요 특징들을 비교하여 보여주는 인포그래픽 표입니다. 각 솔루션의 장단점을 파악하는 데 도움이 될 것입니다.

  • [Proxmox] Proxmox VE 8.2 심층 분석: 데이터센터 관리 기능과 주요 개선점

    [Proxmox] Proxmox VE 8.2 심층 분석: 데이터센터 관리 기능과 주요 개선점

    도입부: 왜 Proxmox VE 8.2에 주목해야 할까요?

    안녕하세요, 13년차 서버실 지킴이입니다. 요즘 인프라 환경이 정말 빠르게 변하고 있죠? 특히 가상화 솔루션은 기술 스택의 핵심 중 하나라고 해도 과언이 아닙니다. 많은 분들이 VMware의 라이선스 정책 변화 때문에 오픈소스 대안을 찾고 계실 텐데요. 저도 홈랩을 운영하면서 이 문제에 대해 늘 고민하고 있거든요. 그러던 와중에 Proxmox VE (Virtual Environment) 8.2가 드디어 출시되었다는 소식을 들었습니다!

    Proxmox VE는 KVM 기반의 가상화와 LXC 컨테이너를 통합하여 단일 플랫폼에서 관리할 수 있는 강력한 오픈소스 솔루션입니다. 저처럼 작은 규모의 서버실이나 홈랩을 운영하는 입장에서는 비용 효율적이면서도 엔터프라이즈급 기능을 제공하는 Proxmox VE가 정말 매력적일 수밖에 없는데요. 이번 8.2 버전에서는 데이터센터 관리 기능이 한층 더 강화되고 다양한 개선점이 추가되었다고 해서, 제가 직접 한번 파헤쳐 봤습니다. 혹시 여러분도 VMware에서 Proxmox VE로의 마이그레이션을 고민하고 계시다면, 이 글이 좋은 가이드가 될 거라고 생각해요!

    Proxmox VE 클러스터의 전체적인 구성도를 보면, 왜 이 솔루션이 데이터센터 관리에 효율적인지 한눈에 이해할 수 있습니다.

    Proxmox VE 8.2, 무엇이 달라졌나? (핵심 개념 설명)

    Proxmox VE는 기본적으로 Debian Linux 위에 KVM(Kernel-based Virtual Machine)과 LXC(Linux Containers)를 통합하여 제공합니다. 쉽게 말해, KVM으로 Windows나 다른 Linux 같은 다양한 운영체제의 가상 머신(Virtual Machine, VM)을 만들 수 있고, LXC로는 가벼운 리눅스 컨테이너를 만들어서 애플리케이션을 격리된 환경에서 실행할 수 있다는 뜻이죠. 이걸 하나의 웹 인터페이스에서 모두 관리할 수 있다는 게 Proxmox VE의 가장 큰 장점입니다.

    KVM 기반 가상화와 LXC 컨테이너의 조화

    • KVM (Kernel-based Virtual Machine): 하드웨어 가상화 기술을 활용하여 OS 커널 레벨에서 완전한 가상 머신을 생성합니다. 높은 성능과 격리성을 제공하며, 다양한 게스트 OS를 지원하죠.
    • LXC (Linux Containers): OS 레벨 가상화로, 호스트 OS의 커널을 공유하며 격리된 사용자 공간을 제공합니다. VM보다 훨씬 가볍고 빠르며, 리소스 오버헤드가 적습니다.

    이번 Proxmox VE 8.2에서는 이런 기본적인 강점에 더해, 사용자 경험을 개선하고 인프라 관리의 복잡성을 줄여주는 여러 기능들이 추가되었더라고요. 특히 데이터센터 규모에서 효율성을 높일 수 있는 기능들이 눈에 띄었습니다.

    주요 개선점 심층 분석: 데이터센터 관리 기능 강화

    이번 8.2 버전에서 가장 인상 깊었던 점은 역시 데이터센터 관리와 스토리지 효율성에 대한 부분이었습니다. 저처럼 스토리지 구성에 늘 목마른 사람에게는 정말 반가운 소식이었죠.

    ZFS dRAID 지원 (Data Redundancy over Arrays of Independent Disks)

    드디어 ZFS dRAID가 정식으로 지원됩니다! ZFS는 강력한 파일 시스템이자 볼륨 관리자로, 데이터 무결성과 스냅샷 기능으로 유명하죠. 기존 RAIDZ2 등도 훌륭했지만, dRAID는 좀 더 유연한 확장성과 빠른 리빌드(Rebuild) 속도를 제공합니다. 대규모 스토리지 환경에서 디스크 장애 시 복구 시간을 단축할 수 있다는 건 정말 큰 장점이에요. 제가 직접 홈랩에서 ZFS 풀을 구성하고 재구성할 때마다 시간이 오래 걸려서 답답했었는데, dRAID는 이런 고충을 덜어줄 것 같더라고요.

    Ceph Quincy → Reef 업그레이드 (분산 스토리지)

    분산 스토리지 솔루션인 Ceph도 Quincy에서 Reef로 업그레이드되었습니다. Ceph Reef는 성능 개선과 함께 관리 기능이 더 편리해졌습니다. 특히 소규모 클러스터에서도 효율적으로 운영할 수 있도록 최적화된 부분들이 있어서, 저처럼 제한된 리소스로 여러 노드를 운영하는 환경에 아주 적합하다고 생각합니다. Ceph를 Proxmox VE와 함께 사용하면 VM 디스크 이미지를 여러 노드에 분산 저장하여 고가용성(High Availability, HA)을 확보할 수 있거든요.

    # Ceph 상태 확인 (Proxmox VE 8.2에서)
    ceph -s
    
    # Ceph OSD 트리 확인
    ceph osd tree
    

    스냅샷 기반 백업 최적화

    이번 버전에서는 스냅샷 기반 백업 최적화 기능이 한층 더 강화되었습니다. VM 백업 시 생성되는 스냅샷의 I/O 부하를 더 효율적으로 관리할 수 있게 개선됐거든요. 특히 스토리지 성능이 제한적이거나, 동시에 여러 VM을 백업해야 할 때 정말 유용합니다. 백업 중에도 VM의 성능 저하를 최소화할 수 있어서, 서비스 중단 없이 안정적인 백업 운영이 가능해졌다는 게 핵심입니다. 제가 예전에 백업 돌리다가 VM이 버벅거려서 사용자들한테 컴플레인 들었던 적이 한두 번이 아니었거든요. 이 개선점이 있다면 그런 걱정을 덜 수 있겠네요!

    Proxmox VE 8.2 Ceph Reef 클러스터 관리 대시보드

    Proxmox VE 웹 UI에서 Ceph Reef 클러스터의 상태를 한눈에 모니터링하는 모습입니다.

    실전 적용: Proxmox VE 8.2 설치 및 초기 설정 팁

    Proxmox VE 8.2 설치 과정은 기존 버전과 크게 다르지 않습니다. 하지만 몇 가지 팁을 드리자면, 설치 시 파일 시스템 선택이 중요해요. 특히 ZFS를 사용하실 계획이라면, 설치 단계에서 미리 구성해두는 것이 편리합니다. 저 같은 경우에는 ZFS Root on RAID1으로 OS를 설치하고, 데이터용으로 별도의 ZFS dRAID 풀을 구성하는 방식을 선호합니다.

    설치 후에는 항상 시스템을 최신 상태로 유지하는 것이 중요합니다. 터미널에서 다음 명령어를 실행해주세요.

    sudo apt update
    sudo apt dist-upgrade -y
    sudo reboot
    

    그리고 Proxmox Backup Server (PBS)를 연동하는 것도 잊지 마세요. Proxmox VE의 백업 기능을 100% 활용하려면 PBS가 필수거든요. PBS는 증분 백업(Incremental Backup)과 중복 제거(Deduplication) 기능을 제공해서 스토리지 사용량을 획기적으로 줄여줍니다. 제가 직접 써보니까, 백업 용량이 정말 드라마틱하게 줄어들더라고요!

    VMware 마이그레이션 관점에서 본 Proxmox VE 8.2

    VMware에서 Proxmox VE로 넘어오는 분들이 많으실 텐데요, Proxmox VE 8.2는 이런 마이그레이션 시나리오를 더욱 강력하게 지원합니다. 기본적으로 qemu-img 툴을 사용하여 VMDK 파일을 QCOW2나 RAW 포맷으로 변환할 수 있습니다. 예를 들어:

    # VMDK 파일을 QCOW2로 변환
    qemu-img convert -f vmdk /path/to/your/vmware.vmdk -O qcow2 /path/to/your/new_proxmox_vm.qcow2
    

    변환된 이미지를 Proxmox VE 스토리지로 옮기고, 새로운 VM을 생성할 때 해당 디스크 이미지를 연결해주면 됩니다. 이 과정에서 네트워크 드라이버나 가상 하드웨어 설정을 Proxmox VE 환경에 맞게 조정해야 하는 경우가 많으니, 꼭 충분한 테스트를 거치셔야 해요. 특히 VMware Tools에 해당하는 QEMU Guest Agent를 VM에 설치하는 것은 성능 향상과 스냅샷 일관성을 위해 필수적입니다.

    Proxmox VE의 웹 UI를 통해 VM을 생성하고, 변환된 디스크를 추가하는 과정은 직관적이라 어렵지 않을 겁니다. 사실 제가 처음 VMware에서 Proxmox VE로 마이그레이션할 때 가장 걱정했던 부분인데, 막상 해보니 생각보다 쉬웠습니다. 물론 삽질이 없었던 건 아니지만요! 😉

    Proxmox VE에서 VMware VMDK 가져와 VM 생성하는 과정

    VMware 환경에서 사용하던 VMDK 파일을 Proxmox VE로 가져와 새로운 가상 머신을 만드는 과정입니다.

    ⚠️ 삽질 경험: 백업 설정 시 주의할 점

    이번 Proxmox VE 8.2의 백업 기능, 정말 좋다고 말씀드렸잖아요? 그런데 제가 이걸 설정하다가 한 번 크게 삽질했습니다. 분명 설정은 다 했는데, 백업 로그를 보니 뭔가 제대로 동작하지 않는 거예요. 처음엔 ‘이게 뭔가 싶었는데’ 알고 보니 Proxmox Backup Server (PBS)와 Proxmox VE 클러스터 간의 네트워크 지연 시간(Latency)이 너무 높아서 제대로 협업이 안 되고 있었던 거였죠.

    백업 성능의 핵심은 Proxmox VE 호스트와 PBS 간의 긴밀한 통신입니다. 만약 네트워크 환경이 좋지 않다면, 최적의 성능을 기대하기 어려울 수 있습니다. 그래서 제가 드리는 팁은:

    1. 네트워크 대역폭과 Latency 확인: 백업 트래픽이 몰리는 시간대에 네트워크 모니터링을 꼭 해보세요.
    2. 전용 백업 네트워크 구성: 가능하다면 Proxmox VE 클러스터와 PBS 사이에 전용 백업 네트워크를 구성하는 것이 가장 좋습니다.
    3. QEMU Guest Agent 설치 확인: 백업 대상 VM에 QEMU Guest Agent가 제대로 설치되어 실행 중인지 다시 한번 확인하세요. 이 Agent가 없으면 스냅샷 일관성을 보장할 수 없어요.

    이 세 가지를 점검하고 나서야 백업이 의도한 대로 동작하는 걸 확인할 수 있었어요. 역시 인프라는 눈으로 보이는 게 다가 아니라니까요! 😅

    마무리: Proxmox VE 8.2, 앞으로의 기대

    Proxmox VE 8.2는 데이터센터 관리의 효율성을 높이고, VMware 마이그레이션을 고민하는 분들에게 더욱 강력한 대안을 제시하는 버전이라고 생각합니다. 특히 ZFS dRAID와 Ceph Reef 업그레이드, 그리고 스냅샷 최적화 같은 기능들은 실제 운영 환경에서 체감할 수 있는 큰 개선점들이에요. 오픈소스의 유연성과 강력한 커뮤니티 지원까지 더해져, 앞으로 Proxmox VE의 성장이 더욱 기대됩니다.

    저도 홈랩에서 Proxmox VE 8.2를 계속 사용하면서 새로운 기능들을 더 깊이 파고들어 볼 생각입니다. 혹시 여러분도 Proxmox VE를 사용하면서 궁금한 점이나 팁이 있다면 댓글로 공유해주세요. 서로의 경험을 나누면서 더 좋은 인프라를 만들어나갈 수 있으니까요!

    Proxmox VE 8.2의 핵심 개선점들을 한눈에 파악할 수 있는 요약 정보입니다.

    다음 단계 제안

    이번 글에서는 Proxmox VE 8.2의 주요 기능들을 살펴봤는데요, 다음번에는 Proxmox Backup Server (PBS)를 활용한 백업 전략과 재해 복구(Disaster Recovery, DR) 구성에 대해 좀 더 자세히 다뤄볼까 합니다. PBS는 Proxmox VE 생태계에서 정말 중요한 부분이니, 놓치지 마세요!

  • [Proxmox] PCIe 패스스루 오류: vGPU 가상화 실패 디버깅 사례

    [Proxmox] PCIe 패스스루 오류: vGPU 가상화 실패 디버깅 사례

    [Proxmox] PCIe 패스스루 오류: vGPU 가상화 실패 디버깅 사례

    안녕하세요, 13년차 서버실 지킴이, ’13년차의 서버실’입니다. 홈랩에서 다양한 장비들을 만져보며 삽질을 즐기는 저에게, 가장 큰 도전 중 하나는 역시 Proxmox PCIe 패스스루(Passthrough)더라고요. 특히 고성능 GPU를 가상 머신(Virtual Machine, VM)에 넘겨줘서 게임이나 AI 연산, 아니면 고사양 CAD 작업을 해보겠다고 마음먹었을 때의 그 설렘, 다들 경험해보셨죠?

    근데 이게 말처럼 쉽지가 않더라고요. 분명히 공식 문서와 수많은 가이드를 따라했는데도, VM에서는 GPU를 제대로 인식 못 하거나, 인식하더라도 알 수 없는 오류 코드(Error Code)를 뿜어내며 vGPU 가상화 실패를 알리는 경우가 많았습니다. 저도 처음엔 이게 뭔가 싶었는데, 결국 삽질 끝에 해결했던 경험을 여러분과 공유하려고 합니다. 혹시 저와 비슷한 문제로 골머리를 앓고 계시다면, 이 글이 작은 도움이 되기를 바랍니다.

    그림 1: Proxmox와 PCIe 패스스루의 개념적 아키텍처. 호스트의 물리 GPU가 VM에 직접 연결되는 모습을 보여줍니다.

    PCIe 패스스루와 vGPU, 그리고 VFIO: 왜 이렇게 복잡할까?

    먼저, 우리가 이야기할 핵심 개념들을 간단히 짚어볼게요. 저도 처음엔 용어 때문에 많이 헤맸거든요.

    • PCIe Passthrough (PCIe 패스스루): 쉽게 말해, Proxmox 호스트 서버에 꽂혀 있는 물리적인 PCIe 장치(예: 그래픽 카드, NVMe SSD, 네트워크 카드)를 가상 머신(VM)이 마치 자기 것처럼 직접 사용할 수 있도록 ‘직통’으로 연결해주는 기술이에요. 호스트의 간섭 없이 장치의 모든 성능을 VM이 온전히 활용할 수 있게 해줍니다.
    • vGPU (Virtual GPU): 하나의 물리적인 GPU를 여러 가상 머신이 나눠 쓸 수 있도록 해주는 기술예요. NVIDIA GRID나 AMD MxGPU 같은 솔루션들이 대표적이죠. 하지만 우리가 보통 홈랩에서 시도하는 건, 하나의 물리 GPU를 하나의 VM에 통째로 넘겨주는 싱글 GPU 패스스루(Single GPU Passthrough)가 대부분입니다.
    • IOMMU (Input/Output Memory Management Unit): CPU가 메모리를 관리하는 MMU(Memory Management Unit)처럼, IOMMU는 입출력(I/O) 장치들이 메모리에 직접 접근하는 방식(DMA, Direct Memory Access)을 관리하고 격리시켜줘요. 이 기능이 활성화되어야만 PCIe 장치를 안전하게 VM에 넘겨줄 수 있습니다. BIOS/UEFI에서 VT-d (Intel) 또는 AMD-Vi (AMD)라는 이름으로 찾아볼 수 있어요.
    • VFIO (Virtual Function I/O): Linux 커널이 제공하는 표준 인터페이스로, 안전하게 PCIe 장치를 사용자 공간(user-space) 애플리케이션(여기서는 QEMU/KVM)에 전달하는 역할을 합니다. Proxmox에서 PCIe 패스스루를 구현할 때 vfio-pci라는 커널 모듈이 핵심적인 역할을 하죠.

    결국, 이 모든 기술들이 잘 맞물려야 비로소 VM에서 GPU를 사용할 수 있게 되는 거더라고요. 어느 하나라도 삐끗하면 가상화 오류가 발생하는 겁니다.

    실전 구현: 기본 패스스루 설정 과정

    제가 Proxmox에서 NVIDIA RTX 3060 그래픽 카드를 Windows VM에 패스스루 하려고 시도했던 과정을 예시로 들어볼게요. 기본적인 설정은 다음과 같습니다.

    1. BIOS/UEFI 설정 확인: 메인보드 BIOS/UEFI 설정에서 IOMMU, VT-d (Intel) 또는 AMD-Vi (AMD) 기능을 ‘Enabled’로 활성화해야 합니다. 이 단계를 빼먹으면 모든 것이 시작도 안 돼요! ⚠️
    2. GRUB 설정 수정: Proxmox 호스트의 GRUB 부트로더 설정에 IOMMU를 활성화하는 파라미터를 추가합니다.

      # /etc/default/grub 파일 편집
      sudo nano /etc/default/grub
      
      # GRUB_CMDLINE_LINUX_DEFAULT 값에 다음 추가 (Intel CPU)
      # GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
      
      # 또는 AMD CPU의 경우
      # GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
      
      # 변경사항 적용
      sudo update-grub
      sudo reboot
    3. VFIO 모듈 로드 및 블랙리스트 설정: Proxmox가 GPU 드라이버를 로드하지 않고, VFIO 모듈이 GPU를 점유하도록 설정합니다.

      # /etc/modules 파일에 다음 추가
      sudo nano /etc/modules
      
      # vfio_pci
      # vfio_iommu_type1
      # vfio
      # vfio_virqfd
      
      # 호스트 OS에서 GPU 드라이버 블랙리스트 처리
      sudo nano /etc/modprobe.d/blacklist.conf
      
      # blacklist nouveau
      # blacklist amdgpu
      # blacklist radeon
      # blacklist nvidiafb
      # blacklist snd_hda_intel # HDMI 오디오도 같이 넘길 경우
      
      # VFIO가 GPU ID를 잡도록 설정 (Vendor ID:Device ID)
      # GPU ID는 'lspci -nnk' 명령어로 확인합니다.
      # 예시: NVIDIA RTX 3060 (10de:2503) / HDMI Audio (10de:228e)
      sudo nano /etc/modprobe.d/vfio.conf
      
      # options vfio-pci ids=10de:2503,10de:228e disable_vga=1
      
      # 변경사항 적용 및 램디스크 업데이트
      sudo update-initramfs -u -k all
      sudo reboot
    4. IOMMU 그룹 확인: 재부팅 후, GPU가 제대로 VFIO 그룹에 할당되었는지 확인합니다.

      # IOMMU 그룹 확인 스크립트 (예시)
      # /usr/src/pve/iommu.sh 같은 이름으로 저장 후 실행
      #!/bin/bash
      for d in $(find /sys/kernel/iommu_groups/*/devices -type l | sort -V); do
          n=${d#*/iommu_groups/*}
          printf 'IOMMU Group %s ' "${n%%/*}"
          lspci -nns "${d##*/}"
      done

      여기서 GPU와 HDMI 오디오가 같은 IOMMU 그룹에 속해 있고, 다른 불필요한 장치들과 섞여 있지 않아야 해요. 만약 다른 장치와 섞여 있다면, 다음 섹션의 IOMMU Grouping 문제를 의심해봐야 합니다.

    5. Proxmox VM에 PCIe 장치 추가: Proxmox 웹 UI에서 VM 하드웨어 설정으로 들어가 ‘PCI 장치’를 추가하거나, qm set 명령어를 사용합니다. 중요한 것은 ‘모든 PCI 익스프레스 포트’를 활성화하고, ‘고급’ 옵션에서 ‘ROM-Bar’를 체크해주는 거예요.
    Proxmox VM 하드웨어 설정 PCI Device 추가 화면

    그림 2: Proxmox VM 설정 화면. PCI Device를 추가하고 ‘ROM-Bar’ 옵션을 활성화하는 모습입니다.

    ⚠️ 삽질의 시작: Proxmox vGPU 가상화 실패 디버깅 사례

    자, 여기까지는 일반적인 가이드에 나오는 내용입니다. 그런데 저의 삽질은 바로 여기서부터 시작됐더라고요. VM을 부팅하고 Windows 장치 관리자를 열어보니, 여지없이 ‘오류 코드 43’이 뜨더라고요. 드라이버를 아무리 다시 깔아도 마찬가지였습니다. 아, 이거 진짜 미치겠더라고요! 🤬

    제가 겪었던 주요 가상화 오류와 해결 과정은 다음과 같습니다.

    1. IOMMU Grouping 문제

    가장 흔한 문제더라고요. lspci -nns 명령어로 확인했을 때, GPU가 다른 불필요한 장치(예: USB 컨트롤러, SATA 컨트롤러)와 같은 IOMMU 그룹에 묶여 있는 경우가 있어요. IOMMU는 그룹 단위로만 패스스루를 허용하기 때문에, 이 경우 원하는 장치만 넘길 수가 없습니다.

    • 증상: VM에 GPU를 추가하려 할 때 Proxmox에서 ‘Device is in use’ 같은 에러가 발생하거나, 추가되더라도 VM에서 제대로 인식하지 못해요.
    • 해결책 (ACS Override 패치): GRUB 설정에 pcie_acs_override=downstream,multifunction 파라미터를 추가하여 IOMMU 그룹을 강제로 분리시키는 방법입니다. 저도 이 방법으로 많은 문제를 해결했어요.

      # /etc/default/grub 파일 수정
      sudo nano /etc/default/grub
      
      # GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction"
      
      # 변경사항 적용
      sudo update-grub
      sudo reboot

      ⚠️ 주의: 이 방법은 IOMMU의 보안 기능을 약화시킬 수 있으니까, 보안에 민감한 환경에서는 신중하게 사용하셔야 해요. 홈랩 환경에서는 보통 큰 문제가 되지 않습니다.

    2. ROM BAR 또는 VBIOS 문제 (특히 NVIDIA 카드)

    NVIDIA 그래픽 카드에서 ‘오류 코드 43’이 뜨는 가장 큰 원인 중 하나였더라고요. NVIDIA 드라이버가 가상 환경에서 실행되는 것을 감지하고 스스로 기능을 제한하는 경우가 많거든요. 또, Proxmox가 GPU의 VBIOS(Video BIOS)를 제대로 로드하지 못해서 생기는 문제도 있어요.

    • 증상: Windows VM에서 장치 관리자에 ‘오류 코드 43’이 뜨거나, 화면이 나오지 않아요.
    • 해결책 (VBIOS 덤프 및 직접 로드): 호스트에서 GPU의 VBIOS 롬 파일을 직접 추출(덤프)해서 VM 설정에 지정해주는 방법입니다. 저는 이 방법으로 RTX 3060의 ‘오류 코드 43’을 해결했어요! 🎉

      1. VBIOS 덤프: 리눅스 환경에서 GPU의 VBIOS를 추출합니다. 다른 PC에 GPU를 연결해서 GPU-Z 같은 툴로 덤프하는 방법도 있어요.
        # VFIO에 바인딩되기 전의 GPU를 찾아서 롬 파일 덤프
        # 예시: GPU가 /sys/bus/pci/devices/0000:01:00.0 에 있을 경우
        sudo su
        echo 1 > /sys/bus/pci/devices/0000:01:00.0/rom
        cat /sys/bus/pci/devices/0000:01:00.0/rom > /var/lib/vz/snippets/vbios.rom
        echo 0 > /sys/bus/pci/devices/0000:01:00.0/rom
        exit
      2. VM 설정에 VBIOS 파일 지정: 덤프한 vbios.rom 파일을 Proxmox의 스니펫(Snippet) 경로(예: /var/lib/vz/snippets/)에 넣고, VM 설정에 추가합니다.
        # VM ID가 100번일 경우
        qm set 100 -args '-device vfio-pci,host=01:00.0,x-vga=on,romfile=/var/lib/vz/snippets/vbios.rom'
        # 또는 VM 설정 파일 직접 수정: /etc/pve/qemu-server/100.conf
        # args: -device vfio-pci,host=01:00.0,x-vga=on,romfile=/var/lib/vz/snippets/vbios.rom

        Proxmox 웹 UI에서 PCI 장치 추가 시 ‘ROM-Bar’ 옵션을 체크하는 것으로도 해결될 때가 있긴 하지만, 직접 롬 파일을 지정하는 것이 더 확실한 경우가 많았어요.

    IOMMU 그룹과 ACS Override 개념 다이어그램

    그림 3: IOMMU 그룹 문제와 해결책. ACS Override가 어떻게 장치 격리를 돕는지 보여줍니다.

    3. `vfio-pci` 드라이버 바인딩 실패

    가끔 Proxmox 호스트가 부팅될 때 GPU가 vfio-pci 드라이버에 제대로 바인딩(Binding)되지 않고, 다른 드라이버(예: nouveau, nvidia)에 먼저 잡히는 경우가 있어요. 이렇게 되면 VM에서 GPU를 사용할 수 없게 되죠.

    • 증상: lspci -nnk 명령어로 확인했을 때, GPU 장치 아래에 ‘Kernel driver in use: vfio-pci’ 대신 다른 드라이버가 표시돼요.
    • 해결책 (강제 바인딩): 부팅 시점에 스크립트를 통해 강제로 vfio-pci에 바인딩하도록 만들 수 있습니다. 보통은 /etc/modprobe.d/vfio.conf 설정으로 충분하지만, 간혹 필요한 경우도 있어요.

      # 부팅 스크립트 (예: /etc/rc.local 또는 systemd 서비스)
      # PCI 장치 ID 확인 (lspci -nnk)
      PCI_ID="0000:01:00.0" # 예시 GPU 장치 ID
      VENDOR_ID="10de"      # 예시 NVIDIA Vendor ID
      DEVICE_ID="2503"      # 예시 RTX 3060 Device ID
      
      if [ -e /sys/bus/pci/drivers/nvidia ]; then
        echo "$PCI_ID" > /sys/bus/pci/drivers/nvidia/unbind
      fi
      if [ -e /sys/bus/pci/drivers/nouveau ]; then
        echo "$PCI_ID" > /sys/bus/pci/drivers/nouveau/unbind
      fi
      
      echo "$VENDOR_ID $DEVICE_ID" > /sys/bus/pci/drivers/vfio-pci/new_id

    4. Proxmox 커널 버전 문제

    간혹 특정 Proxmox 커널 버전에서 PCIe 패스스루 관련 버그가 발생하기도 해요. 특히 최신 커널로 업데이트한 후에 문제가 생겼다면 의심해볼 만합니다.

    • 증상: 이전에는 잘 되던 패스스루가 특정 커널 업데이트 후 작동하지 않거나, 예상치 못한 오류가 발생해요.
    • 해결책: Proxmox의 이전 커널 버전으로 부팅하거나, 커널을 업데이트 또는 다운그레이드하는 것을 고려해봐야 합니다. Proxmox는 여러 커널을 설치하고 선택적으로 부팅할 수 있게 지원하거든요.

    검증과 결과: 드디어 성공!

    앞서 언급한 삽질을 거쳐 모든 설정을 마치고 VM을 부팅했을 때의 쾌감이란! 🥳 Windows VM의 장치 관리자를 열었을 때, 더 이상 ‘오류 코드 43’이 뜨지 않고 NVIDIA GeForce RTX 3060이 정상적으로 인식되는 것을 확인했어요. GPU-Z 같은 툴로도 모든 정보가 정확하게 표시되는 것을 보니 정말 뿌듯하더라고요.

    그리고 가장 중요한 것은, 실제 벤치마크 프로그램이나 게임을 돌렸을 때 물리 머신에 준하는 성능이 나오는 것을 확인했을 때예요. 이 순간을 위해 그렇게 많은 밤을 새워가며 디버깅했던 거겠죠.

    호스트에서도 lspci -nnk 명령어를 다시 실행하여 GPU가 여전히 vfio-pci에 바인딩되어 있는지 확인하는 것도 중요해요. ✅

    Windows VM에서 정상 인식된 NVIDIA GPU와 GPU-Z 화면

    그림 4: Windows VM에서 NVIDIA GPU가 정상 인식되고 GPU-Z로 상세 정보가 확인되는 모습입니다.

    마무리하며: 삽질은 경험이 됩니다

    Proxmox PCIe 패스스루는 인프라 엔지니어에게 정말 까다로운 도전 과제 중 하나예요. 수많은 변수와 시스템 환경에 따라 다른 문제를 일으키기 때문에, 정답이 하나로 정해져 있지 않거든요. 저도 수많은 가상화 오류를 겪었고, 그때마다 로그를 뒤지고 포럼을 찾아보며 디버깅했어요. 이 과정 자체가 저에게는 소중한 경험과 지식으로 남더라고요.

    핵심은 문제 발생 시 당황하지 않고, dmesg, journalctl -xe 같은 시스템 로그를 꼼꼼히 확인하고, IOMMU 그룹핑이나 VBIOS 문제 등 알려진 원인들을 하나씩 점검해나가는 끈기인 것 같아요. 그리고 가장 중요한 것은, 다양한 커뮤니티와 포럼에서 얻을 수 있는 정보들이에요. 비슷한 문제를 겪은 사람들의 경험담은 정말 큰 도움이 되거든요.

    이 글이 Proxmox PCIe 패스스루와 vGPU 가상화 실패로 고생하는 분들께 작은 등불이 되기를 바랍니다. 다음번에는 vGPU Manager를 활용해서 하나의 GPU를 여러 VM이 나눠 쓰는 방법을 다뤄볼까 합니다. 그때까지 다들 즐거운 삽질(?) 되세요! 😊

  • [Nas] TrueNAS CORE vs SCALE: 홈랩 및 소규모 비즈니스 NAS 선택 가이드

    [Nas] TrueNAS CORE vs SCALE: 홈랩 및 소규모 비즈니스 NAS 선택 가이드

    안녕하세요, 13년차 서버실입니다.

    홈랩 운영하시는 분들이나 소규모 비즈니스를 위한 NAS를 고민하시는 분들이라면 한 번쯤 TrueNAS라는 이름을 들어보셨을 거예요. 저도 처음엔 단순히 ‘FreeNAS’ 시절부터 쭉 써왔던 터라 익숙한 이름이었는데, 어느새 TrueNAS CORE와 TrueNAS SCALE이라는 두 가지 버전으로 나뉘어 있더라고요. ‘도대체 뭘 선택해야 하지?’ 저도 꽤 고민하고 삽질 좀 했거든요. 그래서 오늘은 제가 직접 경험한 것을 바탕으로 TrueNAS CORE vs SCALE의 차이점과 여러분의 환경에 맞는 선택 가이드를 알려드릴게요. 이 글이 여러분의 현명한 TrueNAS 선택에 도움이 되길 바라요.

    TrueNAS, CORE와 SCALE 개념 이해하기

    TrueNAS는 FreeBSD 기반의 TrueNAS CORE와 Linux 기반의 TrueNAS SCALE로 나뉩니다. 둘 다 ZFS 파일 시스템을 기반으로 안정적인 데이터 저장과 관리 기능을 제공하는 NAS 운영체제(OS)죠. 쉽게 말해, 여러분의 하드웨어를 강력한 네트워크 스토리지 서버로 만들어주는 소프트웨어라고 생각하면 돼요. TrueNAS CORE는 전통적인 NAS 기능에 충실하고, TrueNAS SCALE은 여기에 컨테이너(Container)와 가상 머신(Virtual Machine, VM) 기능을 더해 확장성을 높인 버전이라고 보면 돼요. 사실상 NAS OS 비교의 핵심이죠.

    TrueNAS CORE 깊이 보기: 전통의 강자

    TrueNAS CORE는 오랫동안 FreeNAS라는 이름으로 사랑받아온 전통적인 버전입니다. FreeBSD 운영체제를 기반으로 하고 있죠.

    장점:

    • 안정성(Stability): FreeBSD 기반이라 굉장히 안정적이에요. 오랜 기간 검증된 만큼 데이터 안정성을 최우선으로 생각한다면 이만한 게 없어요. 제가 홈랩에서 10년 넘게 굴려봤는데, 정말 든든하더라고요.
    • 성숙한 기능(Mature Features): ZFS 파일 시스템, 다양한 프로토콜(SMB, NFS, iSCSI, FTP 등), 플러그인(Plugins) 기반의 추가 기능 등 NAS에 필요한 모든 기능이 완벽하게 구현되어 있어요.
    • 낮은 리소스 요구량(Lower Resource Footprint): SCALE에 비해 상대적으로 낮은 하드웨어 사양에서도 좋은 성능을 보여줘요. 특히 오래된 하드웨어로 NAS를 구축하려는 분들께는 아주 매력적인 선택지죠.

    단점:

    • 확장성 제한(Limited Extensibility): 플러그인 외에는 추가 기능을 확장하기가 쉽지 않아요. Docker 컨테이너나 가상 머신을 직접 구동하기 어렵다는 점이 가장 큰 단점이에요.
    • 상대적으로 적은 커뮤니티 자료(Smaller Community for Advanced Features): 전통적인 NAS 기능에는 자료가 많지만, 최신 개발 환경을 위한 자료는 SCALE에 비해 적은 편이에요.

    간단히 말해, ‘나는 그냥 튼튼한 데이터 저장소가 필요하고, 부가 기능은 크게 중요하지 않다!’ 하시는 분들께 CORE는 최고의 선택이 될 거예요. 제가 처음에 홈랩을 구성할 때도 CORE를 썼는데, 정말 별 탈 없이 잘 썼거든요. 안정성 하나는 끝내줍니다. ✅

    TrueNAS SCALE 깊이 보기: 미래 지향적인 올인원

    자, 다음은 요즘 핫한 TrueNAS SCALE입니다. CORE와 달리 Linux 기반(Debian)으로 만들어졌어요. 여기서 큰 차이가 발생하죠.

    장점:

    • 컨테이너 및 가상화 지원(Container & Virtualization Support): Docker 컨테이너와 Kubernetes(쿠버네티스)를 통한 앱 배포, KVM 기반의 가상 머신을 직접 구동할 수 있다는 점이 가장 큰 장점이에요. 홈랩에서 다양한 서비스를 한 번에 돌리고 싶을 때 정말 강력해요. 제가 Nextcloud, Plex, Home Assistant 등을 전부 SCALE 위에서 컨테이너로 돌리고 있는데, 관리도 편하고 성능도 아주 만족스러워요. 🎉
    • 확장성(Scalability): 기존 CORE보다 훨씬 유연하게 기능을 확장할 수 있어요. 특히 TrueCharts 같은 커뮤니티 앱 스토어를 통해 수많은 앱을 쉽게 설치하고 관리할 수 있죠.
    • 클러스터링(Clustering) 가능: 여러 TrueNAS SCALE 서버를 묶어 스케일-아웃(Scale-out) 스토리지를 구축할 수 있어요. 소규모 비즈니스 환경에서 나중에 확장을 고려한다면 이 기능이 정말 중요할 수 있죠.

    단점:

    • 상대적으로 높은 리소스 요구량(Higher Resource Footprint): Linux 커널과 컨테이너 환경 때문에 CORE보다 더 많은 RAM과 CPU 리소스가 필요해요. 오래된 하드웨어에서는 버벅일 수 있죠.
    • 새로운 기능의 안정성(New Features Stability): CORE에 비해 역사가 짧기 때문에, 새로운 기능들이 아직 완벽하게 안정화되지 않았을 가능성도 있어요. 물론 지금은 많이 안정화되었지만, 초기에는 잔버그도 좀 있었거든요. 삽질 좀 했습니다 ㅎㅎ
    • 복잡성(Complexity): 컨테이너, VM, Kubernetes 등 다룰 수 있는 기능이 많아지면서 CORE에 비해 학습 곡선이 가파를 수 있어요. 초보자에게는 좀 어렵게 느껴질 수도 있죠.

    SCALE은 ‘나는 NAS 기능뿐만 아니라, 홈 서버나 개발 서버 역할까지 한 번에 다 하고 싶다!’ 하시는 분들을 위한 올인원(All-in-one) 솔루션이라고 보면 돼요. 저도 결국 SCALE로 넘어왔는데, 정말 만족하면서 쓰고 있어요. 💡

    TrueNAS CORE와 SCALE의 핵심 차이점을 한눈에 볼 수 있는 아키텍처 비교 다이어그램입니다.

    홈랩 사용자를 위한 TrueNAS 선택 가이드

    이제 여러분의 상황에 맞춰 어떤 TrueNAS를 선택해야 할지 고민해볼 시간이에요. 먼저 홈랩(Homelab) 환경부터 살펴볼까요?

    TrueNAS CORE를 추천하는 경우:

    • 안정적인 파일 서버가 최우선: 오직 데이터 저장과 공유 기능만 필요하고, 안정성이 가장 중요하다고 생각한다면 CORE가 좋아요.
    • 하드웨어 리소스가 제한적: 오래된 PC나 저사양 서버를 쓸 계획이라면 CORE가 리소스를 덜 먹어서 효율적이에요.
    • NAS 기능 외의 복잡한 설정은 피하고 싶다: Docker나 VM에 대한 지식이 없거나, 굳이 배우고 싶지 않다면 CORE가 훨씬 직관적이에요.

    TrueNAS SCALE을 추천하는 경우:

    • NAS 외에 다양한 서비스를 한 서버에서 운영하고 싶다: Plex 미디어 서버, Nextcloud 개인 클라우드, Home Assistant 스마트 홈 허브 등 다양한 애플리케이션을 컨테이너로 돌리고 싶다면 SCALE이 압도적으로 유리해요.
    • 가상 머신(VM)을 활용할 계획: 윈도우나 리눅스 VM을 TrueNAS 위에서 구동하고 싶다면 KVM을 지원하는 SCALE이 유일한 선택지에요.
    • 새로운 기술과 확장성에 관심이 많다: Docker, Kubernetes 같은 최신 기술을 홈랩에서 직접 경험해보고 싶다면 SCALE이 제격이에요. 저도 이 점 때문에 SCALE로 넘어왔죠!

    홈랩에서 TrueNAS CORE와 SCALE을 어떻게 활용할 수 있는지 보여주는 인포그래픽입니다.

    소규모 비즈니스 사용자를 위한 TrueNAS 선택 가이드

    그럼 소규모 비즈니스(Small Business) 환경에서는 어떨까요? 여기서는 안정성과 확장성, 그리고 관리의 용이성이 더욱 중요해져요.

    TrueNAS CORE를 추천하는 경우:

    • 주요 목적이 파일 서버 및 백업: 직원 간 파일 공유, 중요 데이터 백업 등 기본적인 NAS 기능이 핵심이라면 CORE의 검증된 안정성이 큰 장점이에요.
    • IT 인력이 제한적: 복잡한 컨테이너 환경 관리 부담 없이, 안정적인 스토리지만 운영하고 싶을 때 CORE가 더 적합할 수 있어요.
    • 비용 효율성: 초기 하드웨어 투자 비용을 절감하고 싶을 때, CORE는 낮은 사양에서도 충분한 성능을 제공해요.

    TrueNAS SCALE을 추천하는 경우:

    • 내부 서비스(Internal Services) 확장 계획: 사내 Git 서버, 프로젝트 관리 툴, CI/CD 파이프라인 등 다양한 내부 서비스를 NAS 위에서 통합 운영하고 싶다면 SCALE이 효율적이에요.
    • 미래 확장성을 고려: 향후 데이터 증가나 서비스 확장에 대비하여 스케일-아웃(Scale-out) 클러스터링을 염두에 둔다면 SCALE이 유리해요.
    • 가상화 환경 통합: 기존에 운영 중인 가상화 환경(VMware, Proxmox 등)에 TrueNAS를 통합하거나, TrueNAS 자체에서 VM을 구동해야 한다면 SCALE이 답이에요.

    사실 소규모 비즈니스에서도 ‘무조건 CORE가 좋다’ 또는 ‘무조건 SCALE이 좋다’고 말하기는 어려워요. 비즈니스의 특성과 미래 계획에 따라 신중하게 선택해야 하거든요. 저도 컨설팅을 진행할 때 항상 고객사의 상황을 먼저 파악해요. ⚠️

    주의사항 및 삽질 경험 공유

    제가 직접 TrueNAS를 사용하면서 겪었던 몇 가지 삽질 경험과 주의사항을 공유해 드릴게요.

    1. 하드웨어 요구사항:
      특히 TrueNAS SCALE은 CORE보다 RAM과 CPU를 더 많이 써요. 제가 처음엔 CORE 쓰던 서버에 그냥 SCALE을 올렸다가 버벅이는 경험을 했거든요. 특히 Docker 컨테이너나 VM을 많이 돌릴 계획이라면 최소 16GB RAM (개인적으로는 32GB 이상 권장)과 멀티코어 CPU는 필수라고 생각해요. 저도 결국 RAM 업그레이드를 했더니 훨씬 쾌적해졌어요.
    2. 마이그레이션(Migration) 고려:
      만약 기존에 TrueNAS CORE를 쓰고 계시다가 SCALE로 넘어가고 싶으시다면, 데이터 백업은 필수에요. CORE에서 SCALE로의 직접적인 인플레이스(In-place) 업그레이드는 가능하지만, 항상 예기치 않은 문제가 발생할 수 있거든요. 저도 괜히 한번 믿었다가 데이터 날릴 뻔했어요… 😱 꼭 백업하시고, 가능하다면 새로운 하드웨어에 SCALE을 새로 설치하고 데이터를 옮기는 걸 추천해요.
    3. ZFS 설정의 중요성:
      TrueNAS의 핵심은 ZFS에요. 풀(Pool) 구성, 데이터셋(Dataset) 설정, 스냅샷(Snapshot) 주기 등을 처음부터 잘 계획해야 나중에 후회하지 않아요. 특히 스냅샷은 랜섬웨어(Ransomware) 같은 위협으로부터 데이터를 보호하는 데 정말 중요하니까요. 저도 예전에 한번 실수로 중요한 데이터를 지운 적이 있었는데, 스냅샷 덕분에 살린 경험이 있어요. 💡

    TrueNAS CORE에서 SCALE로 안전하게 마이그레이션하는 과정을 보여주는 흐름도입니다.

    두 버전 한눈에 비교하기

    두 버전을 한눈에 비교할 수 있도록 표로 정리해 봤어요.

    구분 TrueNAS CORE TrueNAS SCALE
    기반 OS FreeBSD Debian Linux
    주요 기능 안정적인 NAS (ZFS, SMB, NFS, iSCSI, 플러그인) NAS + 컨테이너 (Docker, Kubernetes) + 가상 머신 (KVM)
    주요 용도 순수 파일 서버, 데이터 백업, 고신뢰성 스토리지 올인원 홈 서버, 개발 환경, 클러스터링 스토리지
    하드웨어 요구사항 상대적으로 낮음 (8GB RAM 권장) 상대적으로 높음 (16GB RAM 이상 권장)
    확장성 플러그인 위주, 제한적 컨테이너 앱, VM, 클러스터링으로 유연하게 확장
    학습 곡선 쉬운 편 상대적으로 가파름

    TrueNAS CORE와 SCALE의 주요 특징을 비교한 표를 시각적으로 보여주는 차트입니다.

    마무리: 당신의 TrueNAS는?

    오늘은 TrueNAS CORE와 SCALE 중에서 어떤 것을 선택해야 할지, 제 13년차 인프라 엔지니어 경험을 바탕으로 이야기해 봤어요.

    결론적으로 말씀드리면, ‘정답은 없다!’ 이에요.

    • 안정적인 파일 저장 기능만 필요하고, 하드웨어 사양이 낮다면 TrueNAS CORE.
    • 다양한 컨테이너 앱이나 가상 머신을 돌리고 싶고, 충분한 하드웨어 리소스가 있다면 TrueNAS SCALE.

    이렇게 정리할 수 있을 것 같아요.

    어떤 버전을 선택하시든, TrueNAS는 강력한 NAS 솔루션임에는 틀림없어요. 여러분의 환경과 목적에 맞는 최적의 선택을 하시길 바라면서, 궁금한 점이 있다면 언제든지 댓글로 남겨주세요! 다음번에는 TrueNAS SCALE에서 Docker 컨테이너를 활용하는 방법에 대해 더 자세히 다뤄볼까 합니다. 기대해주세요! 😄