13년차의 서버실

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

[태그:] Proxmox VE

  • [Proxmox] Proxmox HAOS 마이그레이션: VMware ESXi에서 안전하게 이전하기

    [Proxmox] Proxmox HAOS 마이그레이션: VMware ESXi에서 안전하게 이전하기

    홈랩 서버실 | Proxmox HAOS 마이그레이션: VMware ESXi에서 안전하게 이전하기

    안녕하세요, 13년차의 서버실입니다. 홈랩을 운영하면서 여러 하이퍼바이저(Hypervisor)를 오가다 보면, 언젠가 한 번쯤은 겪게 되는 고민이 있어요. 바로 기존 가상머신(Virtual Machine, VM)을 새로운 플랫폼으로 옮기는 마이그레이션(Migration)입니다. 특히 스마트 홈의 핵심인 Home Assistant OS(HAOS) 같은 친구들은 안정성이 중요해서 마이그레이션할 때 더욱 신중해지죠. 저도 최근에 오랫동안 잘 써오던 VMware ESXi 환경에서 Proxmox VE로 HAOS를 안전하게 이전하면서 꽤 삽질을 했거든요. 오늘은 그 경험을 바탕으로 여러분께 자세히 알려드리려고 합니다.

    혹시 여러분도 ESXi의 라이선스 정책 변화나, Proxmox VE의 유연한 기능들, 혹은 단순히 새로운 환경에 대한 호기심 때문에 마이그레이션을 고민하고 계신가요? 그렇다면 이 글이 큰 도움이 될 겁니다. 제가 직접 겪었던 시행착오와 해결 과정을 솔직하게 공유하면서, 여러분의 Proxmox HAOS 마이그레이션 여정을 조금 더 부드럽게 만들어 드릴게요. 자, 그럼 시작해 볼까요?

    VMware ESXi에서 Proxmox VE로 Home Assistant OS 마이그레이션 전체 개요

    VMware ESXi에서 Proxmox VE로 Home Assistant OS 마이그레이션 전체 개요 다이어그램입니다.

    1. 왜 VMware ESXi에서 Proxmox VE로 옮겨야 할까요?

    사실 VMware ESXi는 오랫동안 안정적인 가상화 플랫폼의 대명사였어요. 특히 엔터프라이즈 환경에서는 거의 표준이라고 할 수 있었죠. 저도 덕분에 많은 프로젝트를 ESXi 위에서 진행했었고요. 하지만 홈랩(Home Lab) 환경에서는 몇 가지 고민이 생기더라고요.

    • 라이선스 정책 변화: ESXi 무료 버전의 기능 제한이 점점 심해지고 있습니다. 특히 vSphere API 접근 제한은 백업이나 관리 자동화에 큰 걸림돌이 되죠.
    • 오픈소스의 유연성: Proxmox VE(Virtual Environment)는 완벽한 오픈소스 가상화 플랫폼입니다. KVM(Kernel-based Virtual Machine)과 LXC(Linux Containers)를 모두 지원해서 VM과 컨테이너를 한 곳에서 관리할 수 있다는 점이 정말 매력적이더라고요.
    • 커뮤니티와 학습: Proxmox는 활발한 커뮤니티와 방대한 자료 덕분에 새로운 기술을 익히고 실험하기에 좋은 환경을 제공합니다. 저처럼 이것저것 만져보는 걸 좋아하는 사람에게는 최고의 놀이터죠.

    이런 이유들로 저는 Proxmox VE로의 전환을 결심했고, 그 첫 타자로 홈랩의 심장인 Home Assistant OS를 옮겨보기로 했습니다.

    2. 개념 설명: Proxmox VE와 Home Assistant OS 간략히

    마이그레이션에 앞서, 핵심 개념들을 간단히 짚고 넘어갈까요?

    • Proxmox VE (Virtual Environment): 쉽게 말해, 서버 한 대에서 여러 개의 가상 서버를 돌릴 수 있게 해주는 운영체제라고 생각하시면 됩니다. VMware ESXi와 비슷한 역할을 하지만, 오픈소스라는 점이 가장 큰 차이점이에요. 웹 기반 인터페이스를 제공해서 관리도 편리하고요.
    • Home Assistant OS (HAOS): 스마트 홈 기기들을 한곳에 모아 관리하고 자동화할 수 있게 해주는 오픈소스 플랫폼입니다. 전용 OS 형태로 제공되어 가상머신 위에 설치하는 경우가 많죠. 저도 Z-Wave, Zigbee 동글(dongle)을 연결해서 사용하고 있습니다.
    • 마이그레이션 (Migration): 기존에 잘 돌아가던 가상머신을 다른 가상화 환경으로 옮기는 과정입니다. 단순히 파일을 복사하는 것 이상으로, 새로운 환경에 맞게 설정들을 조정해줘야 하죠.

    3. 실전 구현: VMware ESXi에서 HAOS VM 내보내기

    자, 이제 본론입니다. 제가 직접 해보니 몇 가지 포인트만 잘 지키면 생각보다 어렵지 않더라고요.

    3.1. Home Assistant OS VM 백업 및 종료

    가장 먼저 할 일은 HAOS VM을 백업하는 것입니다. 혹시 모를 상황에 대비해서 꼭 스냅샷(Snapshot)을 찍어두거나, Home Assistant 자체의 백업 기능을 활용해서 전체 백업 파일을 받아두세요. 그리고 VM을 정상적으로 종료(Shut Down)해야 합니다. 전원 끄기(Power Off) 말고, 반드시 OS 내부에서 종료 명령을 내려주세요. 데이터 무결성(Data Integrity)을 위해 아주 중요하거든요.

    3.2. OVF/OVA 형식으로 내보내기

    VMware ESXi에서 가상머신을 다른 환경으로 옮길 때 가장 일반적인 방법은 OVF(Open Virtualization Format) 또는 OVA(Open Virtual Appliance) 형식으로 내보내는 것입니다. OVA는 OVF 파일과 관련 디스크 이미지를 하나의 파일로 묶어둔 아카이브(Archive) 형태라고 보시면 돼요. 저는 OVA로 내보냈습니다.

    1. vSphere Client 또는 ESXi 웹 UI에 접속합니다.
    2. 내보낼 Home Assistant OS VM을 선택하고 마우스 오른쪽 버튼을 클릭합니다.
    3. ‘템플릿(Template)’ > ‘OVF 템플릿 내보내기(Export OVF Template…)’를 선택합니다.
    4. 저장할 위치와 파일명을 지정하고 ‘확인’을 누르면 내보내기가 시작됩니다. 시간이 좀 걸릴 수 있어요.
    VMware ESXi에서 Home Assistant OS 가상 머신을 OVF/OVA 형식으로 내보내는 과정

    VMware ESXi 웹 UI에서 Home Assistant OS 가상 머신을 OVF/OVA 형식으로 내보내는 화면입니다.

    3.3. 디스크 이미지 변환 (VMDK → QCOW2)

    Proxmox VE는 일반적으로 QCOW2나 RAW 형식의 디스크 이미지를 사용합니다. ESXi에서 내보낸 OVA 파일 안에는 VMDK 형식의 디스크 이미지가 들어있죠. 이걸 Proxmox에서 사용할 수 있는 형식으로 변환해야 합니다. 저는 Proxmox 서버에서 직접 변환하는 방법을 선택했어요. 이게 가장 빠르고 편하더라고요.

    1. 내보낸 OVA 파일을 Proxmox VE 서버의 특정 디렉토리(예: /var/lib/vz/template/iso/)로 옮깁니다. scp 명령어를 사용하면 편리합니다.
    2. Proxmox VE 서버에 SSH로 접속합니다.
    3. OVA 파일 압축을 해제합니다. OVA는 사실 .tar 아카이브 파일이에요.
    cd /var/lib/vz/template/iso/
    tar -xvf homeassistant.ova
    

    압축을 풀면 .ovf 파일과 .vmdk 파일이 보일 겁니다.

    1. qemu-img 도구를 사용하여 VMDK 파일을 QCOW2로 변환합니다.
    qemu-img convert -f vmdk homeassistant-disk1.vmdk -O qcow2 homeassistant-disk1.qcow2
    

    이 명령어가 성공적으로 실행되면, homeassistant-disk1.qcow2 파일이 생성됩니다. 이 파일이 Proxmox VE에서 사용할 디스크 이미지예요.

    4. 실전 구현: Proxmox VE로 HAOS VM 가져오기

    이제 변환된 디스크 이미지를 Proxmox VE에 VM으로 등록할 차례입니다.

    4.1. 새 가상머신 생성 (디스크 없이)

    Proxmox VE 웹 UI에서 새로운 VM을 생성합니다. 이때 ‘하드 디스크(Hard Disk)’ 단계에서는 디스크를 추가하지 않고 넘어가는 것이 중요해요. 나중에 변환한 디스크를 직접 연결할 거거든요.

    1. Proxmox VE 웹 UI에 접속합니다.
    2. 우측 상단 ‘VM 생성(Create VM)’ 버튼을 클릭합니다.
    3. ‘일반(General)’ 탭에서 이름과 VM ID를 지정합니다. (예: homeassistant-new, ID 100)
    4. ‘OS’ 탭에서 ‘미디어 사용 안 함(Do not use any media)’을 선택합니다.
    5. ‘시스템(System)’ 탭에서 기본값으로 두거나 필요한 경우 수정합니다. (저는 VMWare에서 사용하던 BIOS 대신 UEFI를 선택했어요.)
    6. ‘디스크(Disks)’ 탭에서 ‘디스크를 추가하지 않음(Do not add a disk)’을 선택하고 다음으로 넘어갑니다.
    7. ‘CPU’ 및 ‘메모리(Memory)’를 적절히 설정합니다. HAOS는 2코어, 4GB RAM 정도면 충분해요.
    8. ‘네트워크(Network)’ 탭에서 원하는 브리지(Bridge)를 선택합니다. (일반적으로 vmbr0)
    9. 마지막 ‘확인(Confirm)’ 단계에서 설정을 다시 확인하고 ‘완료(Finish)’를 클릭합니다.

    4.2. 변환된 디스크 이미지 임포트

    생성된 VM에 아까 변환했던 .qcow2 디스크 이미지를 연결합니다.

    1. Proxmox VE 서버에 SSH로 접속합니다.
    2. 다음 명령어를 사용하여 디스크 이미지를 생성한 VM (예: ID 100)으로 임포트합니다. local-lvm은 디스크 이미지를 저장할 스토리지 풀 이름입니다. 여러분의 환경에 맞게 변경해주세요.
    qm importdisk 100 /var/lib/vz/template/iso/homeassistant-disk1.qcow2 local-lvm
    

    이 명령어가 완료되면, Proxmox VE 웹 UI의 VM 하드웨어 설정에 ‘사용하지 않는 디스크(Unused Disk)’로 추가된 것을 볼 수 있어요.

    4.3. 임포트된 디스크 연결 및 부팅 순서 설정

    1. Proxmox VE 웹 UI에서 생성한 VM (ID 100)을 선택하고 ‘하드웨어(Hardware)’ 탭으로 이동합니다.
    2. ‘사용하지 않는 디스크(Unused Disk)’를 더블클릭하거나 선택 후 ‘편집(Edit)’ 버튼을 눌러 디스크를 VM에 연결합니다. ‘버스/장치(Bus/Device)’는 ‘SATA’나 ‘VirtIO Block’ 중 선택하는데, 저는 일반적으로 성능이 좋은 VirtIO Block을 선호해요. ‘캐시(Cache)’ 설정도 필요에 따라 조정해주세요.
    3. ‘옵션(Options)’ 탭으로 이동하여 ‘부팅 순서(Boot Order)’를 편집합니다. 방금 연결한 디스크를 첫 번째 부팅 장치로 설정하고 ‘확인(OK)’을 클릭합니다.
    Proxmox VE에서 새로운 가상 머신 생성 후 Home Assistant OS 디스크 이미지를 임포트하는 과정

    Proxmox VE 웹 UI에서 새로운 VM을 생성하고, SSH 터미널에서 qm importdisk 명령어를 통해 Home Assistant OS 디스크 이미지를 임포트하는 과정입니다.

    5. 주의사항 및 트러블슈팅 ⚠️ (삽질 경험 공유)

    제가 이 과정에서 겪었던 몇 가지 ‘삽질’과 그 해결 방법을 공유합니다. 여러분은 저 같은 실수를 하지 않으시길 바랍니다! ㅎㅎ

    • 네트워크 인터페이스 문제: 마이그레이션 후 HAOS가 네트워크를 잡지 못하는 경우가 있어요. ESXi와 Proxmox는 가상 네트워크 카드 드라이버가 다를 수 있거든요. HAOS는 보통 eth0을 사용하지만, Proxmox에서 VirtIO 네트워크 카드를 사용하면 이름이 바뀌거나 설정이 꼬일 수 있습니다.

      • 해결책: Proxmox VM 설정에서 네트워크 카드를 VirtIO 대신 E1000으로 변경해보세요. 또는 HAOS 콘솔에 접속해서 네트워크 설정을 수동으로 확인하고 network update 명령어를 통해 DHCP를 다시 시도해볼 수 있습니다.
    • VMware Tools 잔재: ESXi에서 설치했던 VMware Tools는 Proxmox에서는 필요 없어요. 이게 남아있으면 불필요한 리소스를 잡아먹거나 충돌을 일으킬 수도 있습니다. 사실 HAOS는 자체적으로 VM Tools 같은 걸 설치하지 않아서 크게 문제가 되지는 않지만, 다른 Linux VM을 마이그레이션할 때는 꼭 확인해주세요.

      • 해결책: 마이그레이션 전 ESXi에서 VM Tools를 제거하거나, Proxmox로 옮긴 후 해당 VM에 접속해서 제거하는 것이 좋습니다.
    • USB 패스스루(USB Passthrough): Zigbee나 Z-Wave 동글을 사용하신다면, Proxmox에서 USB 패스스루 설정을 새로 해줘야 합니다. ESXi에서 사용하던 설정이 그대로 넘어오지 않거든요.

      • 해결책: Proxmox 웹 UI에서 VM 하드웨어 설정에 들어가 ‘추가(Add)’ > ‘USB 장치(USB Device)’를 선택하고, ‘벤더/제품 ID 사용(Use vendor/product ID)’ 또는 ‘USB 포트 사용(Use USB Port)’을 통해 해당 동글을 연결해줍니다.
    • 디스크 용량 문제: HAOS VMDK 파일이 크면 변환 및 임포트 과정에서 시간이 오래 걸리고, 스토리지 용량을 충분히 확보해야 합니다. 저도 한 번은 Proxmox 서버의 /tmp 디렉토리 용량이 부족해서 변환이 실패한 적이 있었어요. 😅

      • 해결책: 변환 파일을 저장할 디렉토리에 충분한 여유 공간이 있는지 미리 확인하세요.

    6. 검증 및 결과 🎉 (드디어 새로운 둥지에서 HAOS 가 움직인다!)

    모든 설정이 끝나고 VM을 부팅하면, 이제 HAOS가 Proxmox VE 위에서 새로운 시작을 알릴 겁니다. 저는 부팅 후 다음 사항들을 꼼꼼히 확인했어요.

    1. HAOS 웹 인터페이스 접속: 가장 먼저 HAOS의 웹 UI에 접속해서 대시보드가 정상적으로 로드되는지 확인합니다.
    2. 네트워크 연결 상태: ‘설정(Settings)’ > ‘시스템(System)’ > ‘네트워크(Network)’에서 IP 주소와 게이트웨이(Gateway) 설정이 올바른지 확인합니다.
    3. 통합(Integrations) 작동 여부: 스마트 기기 연동(예: Philips Hue, SmartThings, Zigbee/Z-Wave 동글)이 제대로 작동하는지 하나씩 테스트해봅니다.
    4. 애드온(Add-ons) 상태: 설치했던 애드온들이 모두 정상적으로 실행되는지 확인해요.
    5. 리소스 사용량: Proxmox VE 웹 UI에서 VM의 CPU, 메모리, 디스크 I/O 사용량을 모니터링하여 ESXi 때와 비교해봅니다. 보통 Proxmox가 더 효율적인 경우가 많더라고요.

    이 모든 과정이 끝나고 HAOS 대시보드가 완벽하게 작동하는 것을 보니, 그동안의 삽질이 싹 잊히는 기분이었어요. 드디어 성공했구나! 하는 성취감이 밀려오더라고요. 🥳

    Proxmox VE에서 성공적으로 마이그레이션되어 작동 중인 Home Assistant OS 대시보드

    Proxmox VE 위에서 성공적으로 마이그레이션되어 작동 중인 Home Assistant OS 대시보드 화면입니다.

    7. 마무리: 배운 점과 다음 단계

    VMware ESXi에서 Proxmox VE로 Home Assistant OS를 마이그레이션하는 과정은 단순히 파일을 옮기는 것을 넘어, 새로운 가상화 환경에 대한 이해와 트러블슈팅 능력을 길러주는 좋은 경험이었습니다. 제가 얻은 몇 가지 교훈은 이렇습니다.

    • 사전 백업의 중요성: 아무리 강조해도 지나치지 않아요.
    • 문서화의 습관화: 제가 어떤 설정을 했는지, 어떤 삽질을 했는지 기록해두면 다음번에 훨씬 수월합니다.
    • 오픈소스 커뮤니티의 힘: 막히는 부분이 있을 때 Proxmox 포럼이나 Home Assistant 커뮤니티에서 많은 도움을 받을 수 있었어요.

    이제 여러분의 Home Assistant OS는 Proxmox VE라는 새로운 환경에서 더욱 안정적이고 유연하게 동작할 겁니다. 다음 단계로는 Proxmox VE의 강력한 백업 기능(Proxmox Backup Server와 연동)을 활용하여 HAOS 백업 전략을 수립하거나, VM에 GPU 패스스루를 설정하여 미디어 서버 등 다른 서비스를 구축하는 것도 좋은 아이디어가 될 수 있겠죠. 물론 이 부분은 다음 글에서 자세히 다룰 예정입니다. 😉

    오늘도 제 글이 여러분의 홈랩 운영에 작은 도움이 되었기를 바라며, 궁금한 점은 언제든 댓글로 남겨주세요! 13년차의 서버실은 언제나 여러분의 삽질을 응원합니다. 감사합니다!

  • [Proxmox] Proxmox 클러스터 1년 사용 후기: 안정성, 성능, 그리고 예상치 못한 문제들

    [Proxmox] Proxmox 클러스터 1년 사용 후기: 안정성, 성능, 그리고 예상치 못한 문제들

    Proxmox 클러스터 1년 사용 후기: 안정성, 성능, 그리고 예상치 못한 문제들

    안녕하세요! 13년차 인프라 엔지니어, ’13년차의 서버실’ 블로그 운영자입니다. 홈랩을 운영하며 쌓아온 경험을 바탕으로 오늘은 많은 분들이 관심을 가지시는 Proxmox 클러스터에 대한 솔직한 Proxmox 후기를 들려드리려고 합니다. 특히 1년이라는 시간 동안 Proxmox VE(Virtual Environment) 클러스터 환경을 직접 운영해보면서 느꼈던 점, 좋았던 점, 그리고 예상치 못했던 문제점까지 가감 없이 공유해 드릴게요. 가상화 환경 구축을 고민 중이시거나, 이미 Proxmox를 사용하고 계신 분들께 조금이나마 도움이 되기를 바랍니다.

    Proxmox 클러스터 아키텍처 개요 다이어그램

    이 가상화 클러스터는 여러 대의 Proxmox VE 서버를 하나의 논리적인 단위로 묶어 관리할 수 있게 해주는 강력한 기능입니다. 이를 통해 고가용성(High Availability)과 효율적인 자원 분배를 구현하여 서비스의 안정성과 성능을 크게 향상시킬 수 있죠. 마치 여러 대의 컴퓨터가 힘을 합쳐 하나의 거대한 컴퓨터처럼 작동하는 것과 같다고 생각하시면 이해하기 쉬우실 거예요.

    Proxmox 클러스터, 왜 선택했을까?

    제가 이 가상화 클러스터를 구축하게 된 가장 큰 이유는 바로 고가용성(High Availability, HA) 때문이었습니다. 홈랩 환경에서도 중요한 서비스들은 단일 서버 장애로 인해 중단되는 것을 원치 않았거든요. Proxmox 클러스터를 사용하면, 노드(Node, 개별 Proxmox 서버) 하나에 장애가 발생하더라도 해당 노드에서 실행 중이던 가상머신(Virtual Machine, VM)이나 컨테이너(Container, LXC)를 다른 정상 노드로 자동으로 이전(Migrate)시켜 서비스 중단을 최소화할 수 있습니다. 13년차 인프라 엔지니어로서 이런 HA 기능은 제게 있어선 선택이 아닌 필수였죠.

    또한, 여러 노드에 분산된 자원(CPU, RAM, 스토리지)을 중앙에서 통합 관리할 수 있다는 점도 매력적이었습니다. 덕분에 개별 서버의 자원 현황을 파악하고, VM을 효율적으로 배치하여 전체적인 성능을 최적화하는 데 유리했죠. 처음엔 단순히 여러 대의 서버를 묶는다고 생각했는데, 막상 사용해보니 운영의 편리성 측면에서도 큰 이점을 느낄 수 있었습니다.

    Proxmox 클러스터 구축 과정: 삽질과 극복의 기록

    Proxmox 클러스터 구축 자체는 Proxmox VE의 웹 인터페이스를 통해 비교적 쉽게 진행할 수 있었어요. 하지만 제 경험상, 완벽하게 매끄럽게만 흘러가지는 않았습니다. 특히 네트워크 설정과 스토리지 공유 설정에서 몇 가지 난관에 부딪혔었죠.

    1단계: Proxmox VE 설치 및 기본 설정

    먼저, 클러스터에 참여할 모든 서버에 Proxmox VE를 설치합니다. 저는 주로 Debian 기반으로 설치했는데, Proxmox VE ISO 이미지를 사용하면 훨씬 간편하게 설치할 수 있습니다. 설치 후에는 IP 주소, 호스트 이름(Hostname), DNS 설정 등을 기본적으로 완료해야 합니다.

    2단계: 클러스터 생성 및 노드 참여

    클러스터를 처음 생성할 노드에서 웹 인터페이스에 접속하여 Datacenter -> Cluster 메뉴로 이동합니다. 여기서 ‘Create Cluster’ 버튼을 눌러 클러스터 이름을 지정하고 생성합니다. 이후 다른 노드들을 이 클러스터에 참여시켜야 합니다. 참여시킬 노드에서 마찬가지로 웹 인터페이스에 접속하여 Datacenter -> Cluster 메뉴로 간 후, ‘Join Cluster’ 버튼을 누르고 기존 클러스터의 IP 주소와 관리자 계정 정보를 입력하면 됩니다.

    # 클러스터 생성 (첫 번째 노드에서 실행)
    pvecm create <ClusterName>
    
    # 클러스터 참여 (다른 노드에서 실행)
    pvecm add <ClusterIP>
    

    3단계: 공유 스토리지 설정 (중요!)

    고가용성(HA) 기능을 제대로 활용하기 위해서는 VM이나 컨테이너의 디스크 이미지가 모든 노드에서 접근 가능해야 합니다. 이를 위해 공유 스토리지(Shared Storage) 설정이 필수적이죠. 저는 NFS(Network File System)를 이용하여 공유 스토리지를 구성했는데요. 각 노드에서 NFS 클라이언트를 설정하고, NFS 서버에 마운트하는 방식으로 진행했습니다. 처음엔 로컬 스토리지로 VM을 생성했다가, HA 마이그레이션이 불가능하다는 것을 깨닫고 공유 스토리지 구성에 다시 시간을 투자했던 기억이 나네요. 😅

    Proxmox VE 웹 인터페이스에서 Datacenter -> Storage 메뉴로 이동하여 NFS 스토리지 설정을 추가할 수 있습니다. 여기서 NFS 서버의 IP 주소와 마운트 경로, 그리고 ‘Nodes’ 필드에 클러스터 내 모든 노드를 선택하는 것이 중요합니다. 이렇게 해야 해당 스토리지가 모든 노드에서 인식되어 VM 디스크를 저장할 수 있게 됩니다.

    4단계: HA 설정 및 VM 구성

    클러스터와 공유 스토리지 설정이 완료되었다면, 이제 HA 설정을 진행할 차례입니다. Datacenter -> HA 메뉴에서 HA 그룹을 생성하고, 해당 그룹에 속할 노드들과 VM들을 지정합니다. HA 그룹에 속한 VM은 지정된 노드 중 하나에 장애가 발생하면 자동으로 다른 노드에서 재시작(Restart)되거나 이전(Migrate)됩니다. VM 생성 시 ‘High Availability’ 옵션을 활성화하는 것을 잊지 마세요.

    💡 팁: HA 설정을 할 때, VM의 우선순위(Priority)를 설정하여 어떤 VM을 먼저 HA 대상으로 할지 결정할 수 있습니다. 중요한 서비스 VM에는 높은 우선순위를 부여하는 것이 좋습니다.

    1년간 Proxmox 클러스터를 사용하며 느낀 장점

    1년 동안 Proxmox 클러스터를 운영하면서 여러 가지 장점을 체감했죠. 역시 가장 큰 장점은 앞서 언급한 고가용성(HA)과 중앙 집중식 관리입니다.

    • ✅ 안정적인 서비스 운영: 노드 장애 발생 시에도 서비스 중단을 최소화할 수 있어 안심하고 운영할 수 있었어요. 실제로 한 번 노드에 문제가 발생했을 때, HA 기능 덕분에 다른 노드에서 VM이 자동으로 재시작되어 서비스 영향이 거의 없었고요.
    • ✅ 효율적인 자원 관리: 여러 노드의 CPU, RAM, 스토리지 자원을 한눈에 파악하고 관리할 수 있어 효율적인 자원 배분이 가능했습니다.
    • ✅ 간편한 마이그레이션: 유지보수나 업그레이드를 위해 특정 노드의 VM을 다른 노드로 이전(Live Migration)하는 작업이 매우 간편했습니다. 서비스 중단 없이 VM을 안전하게 이동시킬 수 있다는 점이 인상 깊었습니다.
    • ✅ 강력한 기능과 유연성: Proxmox VE 자체의 강력한 기능(스냅샷, 백업, 복제 등)과 클러스터링 기능이 결합되어 매우 유연하고 강력한 가상화 환경을 구축할 수 있었습니다.

    예상치 못한 문제들과 트러블슈팅 경험

    모든 기술이 그렇듯, 이 클러스터 환경 역시 완벽하지만은 않더라고요. 1년이라는 시간 동안 몇 가지 예상치 못한 문제들과 마주했고, 이를 해결하는 과정에서 많은 것을 배울 수 있었죠.

    ⚠️ 문제 1: 네트워크 분리 (Network Partition)

    가장 골치 아팠던 문제 중 하나는 바로 네트워크 분리(Network Partition)였습니다. 특정 노드와 클러스터 코어(Corosync) 통신이 원활하지 않을 때 발생하는데요. 이 경우, 해당 노드는 자신을 클러스터의 일부로 인식하지만, 다른 노드들은 이 노드를 정상으로 인식하지 못하게 됩니다. 최악의 경우, 분리된 노드에서 VM이 중복 실행되는Split-Brain 상황까지 발생할 수 있습니다.

    해결 과정:

    1. 네트워크 연결 상태 점검: 각 노드 간의 ping 테스트, traceroute 등을 통해 네트워크 경로 및 지연 시간을 확인했습니다.
    2. Corosync 설정 확인: /etc/pve/corosync.conf 파일을 주의 깊게 검토하여 네트워크 설정, 노드 목록, 그리고 쿼럼(Quorum) 관련 설정을 재확인했습니다. 특히 2노드 클러스터의 경우 two_node: 1 설정을 통해 스플릿 브레인 방지를 고려하는 것이 중요하죠.
    3. 방화벽 규칙 점검: 각 노드 및 네트워크 장비의 방화벽에서 Corosync 통신 포트(주로 UDP 5404, 5405)가 열려 있는지 확인했습니다.

    ⚠️ 문제 2: 공유 스토리지 접근 불가

    앞서 강조했던 공유 스토리지 설정이 잘못되거나, NFS 서버에 문제가 발생하면 클러스터 전체의 VM 운영에 심각한 영향을 미칩니다. VM 생성이나 시작이 불가능해지는 것은 물론, HA 마이그레이션도 정상적으로 작동하지 않죠.

    해결 과정:

    1. NFS 서버 상태 확인: NFS 서버가 정상적으로 구동 중인지, 해당 디렉토리가 제대로 공유되고 있는지 확인했습니다.
    2. 클라이언트 노드 마운트 확인: 각 Proxmox VE 노드에서 NFS 공유가 정상적으로 마운트되었는지 mount 명령어로 확인하고, 필요시 재마운트했습니다.
    3. 권한 문제 확인: NFS 서버의 내보내기(Export) 설정에서 Proxmox VE 노드들의 IP 주소 또는 서브넷에 대한 접근 권한이 제대로 부여되었는지 확인했습니다.
    Proxmox 클러스터 로그 분석 화면

    이런 문제 발생 시, /var/log/syslog, /var/log/daemon.log, /var/log/pve/ 등 Proxmox VE 관련 로그 파일을 꼼꼼히 확인하는 것이 문제 해결의 첫걸음입니다. 때로는 Corosync의 상태를 확인하기 위해 systemctl status corosync 명령어를 사용하기도 했고요.

    💡 팁: 정기적인 백업과 스냅샷은 필수!

    아무리 안정적인 환경이라도 예기치 못한 상황은 언제든 발생할 수 있습니다. 따라서 중요한 VM은 정기적으로 백업하고, 변경 사항 적용 전에는 스냅샷을 생성하는 습관을 들이는 것이 좋습니다. Proxmox VE는 이러한 백업 및 스냅샷 기능을 매우 편리하게 제공하므로 적극 활용하시길 바랍니다.

    결론: 13년차 엔지니어의 Proxmox 클러스터 최종 평가

    1년 동안 이 Proxmox 클러스터를 사용해보면서, 이 솔루션이 제공하는 안정성, 성능, 그리고 관리 편의성은 홈랩 환경뿐만 아니라 중소규모의 프로덕션 환경에서도 충분히 매력적인 선택지가 될 수 있다고 확신하게 되었어요. 특히 오픈소스 기반으로 강력한 기능을 제공하면서도 라이선스 비용 부담이 적다는 점은 큰 장점이죠.

    물론, 저처럼 처음 클러스터 환경을 구축하거나 운영하는 경우, 네트워크 분리나 공유 스토리지 설정 등에서 다소의 학습 곡선과 삽질(?)이 필요할 수 있습니다. 하지만 Proxmox 커뮤니티의 활성화와 풍부한 온라인 자료 덕분에 대부분의 문제는 해결할 수 있었죠.

    핵심 요약:

    • 장점: 높은 안정성 (HA), 효율적인 자원 관리, 간편한 마이그레이션, 강력한 기능, 비용 효율성
    • 고려사항: 초기 설정의 복잡성 (네트워크, 스토리지), 문제 발생 시 깊이 있는 이해 필요
    Proxmox 클러스터 사용 경험 비교 테이블

    Proxmox 클러스터의 장단점을 한눈에 비교하면 다음과 같습니다.

    구분 장점 고려사항 (단점)
    안정성 고가용성(HA)으로 서비스 중단 최소화 네트워크 분리, 쿼럼 문제 발생 가능성
    성능/관리 중앙 집중식 자원 관리, 간편한 마이그레이션 초기 설정의 복잡성 (네트워크, 스토리지)
    비용 오픈소스 기반, 라이선스 비용 부담 적음 하드웨어 투자 비용 필요

    결론적으로, Proxmox 클러스터는 안정적이고 확장 가능한 가상화 환경을 구축하고자 하는 분들에게 강력 추천할 만한 솔루션입니다. 앞으로도 Proxmox VE의 새로운 기능이나 클러스터 운영 팁에 대해 꾸준히 포스팅할 예정이니, ’13년차의 서버실’ 블로그의 다른 Proxmox 관련 글들도 참고해 주세요! 혹시 Proxmox 클러스터 운영 중 겪었던 재미있는 에피소드나 꿀팁이 있다면 댓글로 공유해주세요. 함께 배우고 성장하는 ’13년차의 서버실’이 되겠습니다. 감사합니다!

  • [Proxmox] Proxmox Backup Server vs Veeam Agent: 홈랩 VM 백업 솔루션 성능 벤치마크

    [Proxmox] Proxmox Backup Server vs Veeam Agent: 홈랩 VM 백업 솔루션 성능 벤치마크

    안녕하세요, 13년차 서버실 지킴이입니다. 오늘도 제 홈랩에서 겪었던 삽질과 그 결과물을 공유해드리려고 합니다. 홈랩을 운영하다 보면 가장 중요하면서도 소홀하기 쉬운 부분이 바로 ‘백업’이더라고요. 소중한 설정 파일, 직접 구축한 서비스 데이터, 자식 같은 VM들… 한순간에 날아갈 수도 있다는 생각에 늘 불안하죠. 그래서 오늘은 제가 직접 Proxmox Backup Server (PBS)와 Veeam Agent for Linux 두 가지 백업 솔루션을 비교하고 성능을 벤치마크해본 경험을 이야기해보려고 합니다. 홈랩 VM 백업 솔루션 선택에 고민이 많으셨다면, 이 글이 좋은 가이드가 될 거예요.

    Proxmox Backup Server와 Veeam Agent를 활용한 홈랩 VM 백업 아키텍처 다이어그램

    홈랩 환경에서 Proxmox VE 호스트, Proxmox Backup Server VM, NAS 스토리지, 그리고 Veeam Agent가 설치된 게스트 VM들이 서로 연결되어 백업이 진행되는 전체 아키텍처 다이어그램입니다.

    1. Proxmox Backup Server와 Veeam Agent, 뭐가 다른가요?

    먼저 오늘 비교할 두 주인공에 대해 간단히 알아볼까요? 제가 직접 써보니 각각의 특징이 아주 명확하더라고요.

    1.1. Proxmox Backup Server (PBS)

    Proxmox Backup Server (PBS)는 이름에서 알 수 있듯이 Proxmox VE(Virtual Environment) 생태계에 최적화된 백업 솔루션입니다. Proxmox VE를 사용하신다면 마치 한 몸처럼 연동되는 걸 느낄 수 있을 거예요. 주요 특징은 다음과 같습니다.

    • 블록 수준 중복 제거 (Block-level Deduplication): 백업 데이터에서 중복되는 블록을 찾아 제거해서 스토리지 공간을 엄청나게 절약해줍니다. 제가 써보니 이 기능이 정말 압권이더라고요!
    • 증분 백업 (Incremental Backup): 변경된 데이터만 백업해서 백업 시간을 줄여줍니다.
    • 압축 (Compression): 백업 데이터를 압축하여 스토리지 효율을 높여줍니다.
    • 웹 기반 GUI: Proxmox VE와 유사하게 직관적인 웹 인터페이스를 제공해서 관리하기 정말 편합니다.
    • 통합 백업 스케줄링: Proxmox VE에서 직접 PBS로 VM 백업 스케줄을 설정할 수 있어요.

    1.2. Veeam Agent for Linux

    Veeam Agent for Linux는 Veeam에서 제공하는 리눅스용 백업 에이전트입니다. Proxmox VE 환경뿐만 아니라, 일반 물리 서버나 다른 하이퍼바이저의 게스트 OS 등 다양한 리눅스 환경에서 유연하게 사용할 수 있다는 장점이 있어요. 특히 Free (무료) 버전도 기본적인 백업/복구 기능이 강력해서 홈랩 백업 솔루션으로 많이들 사용하시더라고요.

    • 에이전트 기반 (Agent-based): 백업 대상 리눅스 VM 내부에 직접 에이전트를 설치해서 동작합니다.
    • 다양한 백업 대상: 전체 시스템 (Entire System), 볼륨 (Volume), 파일 수준 (File-level) 백업을 지원합니다.
    • 유연한 복구 옵션: 베어 메탈 복구 (Bare-metal Recovery), 파일 복구 등을 지원합니다.
    • Free 버전의 강력함: 무료 버전으로도 훌륭한 백업 기능을 제공해서 저 같은 홈랩 유저들에게 인기가 많죠.

    2. 제 홈랩에서 직접 구현해 본 과정

    이론은 여기까지 하고, 이제 제가 직접 어떻게 구성했는지 설명해 드릴게요. 제 홈랩은 Proxmox VE 호스트 한 대와 NAS (Network Attached Storage)로 구성되어 있습니다. 백업 대상은 Proxmox VE 위에 올라간 데비안(Debian) 기반의 리눅스 VM이었어요.

    2.1. Proxmox Backup Server (PBS) 설치 및 구성

    저는 별도의 VM에 PBS를 설치했습니다. 물론 물리 서버에 설치해도 되지만, 홈랩에서는 VM도 충분하거든요.

    1. PBS VM 생성: Proxmox VE에서 새로운 VM을 만들고, PBS ISO 파일을 마운트해서 설치했습니다. 설치 과정은 Proxmox VE와 비슷해서 어렵지 않더라고요. 최소 4GB RAM과 2코어 CPU, 그리고 백업 데이터를 저장할 디스크를 할당해줬습니다.
    2. 저장소 설정: PBS 웹 GUI에 접속해서 백업 데이터를 저장할 디스크를 Datastore(데이터스토어)로 설정했습니다. 저는 NAS의 NFS 마운트 경로를 여기에 연결했어요.
    3. Proxmox VE에 PBS 추가: Proxmox VE 웹 GUI에서 Datacenter > Storage > Add > Proxmox Backup Server를 선택하고, PBS의 IP 주소와 Datastore 이름, 사용자 인증 정보를 입력했습니다.
    4. 백업 작업 생성: 이제 Proxmox VE에서 백업할 VM을 선택하고 ‘Backup’ 버튼을 누르면, 스토리지 옵션에 PBS 서버가 뜨는 것을 확인할 수 있습니다. 스케줄링과 리텐션(Retention, 보존 정책)까지 설정해주면 끝! 정말 편하더라고요.
    Proxmox Backup Server 웹 GUI의 백업 성공 및 스토리지 중복 제거율 화면

    Proxmox Backup Server의 웹 인터페이스에서 백업 작업이 성공적으로 완료된 목록과 데이터스토어의 중복 제거율 및 압축률을 보여주는 화면입니다.

    2.2. Veeam Agent for Linux 설치 및 구성

    이제 백업 대상 리눅스 VM에 Veeam Agent를 설치할 차례입니다. 저는 데비안 기반 VM에 설치했어요.

    1. Veeam Repository 추가: 먼저 Veeam 리포지토리를 추가해야 합니다.
    2. wget -qO - https://download.veeam.com/veeam-release-key.gpg | sudo apt-key add -
      echo "deb https://download.veeam.com/linux-repository-x64 stable" | sudo tee /etc/apt/sources.list.d/veeam.list
      sudo apt update
    3. Veeam Agent 설치: 리포지토리를 추가했으니, 이제 에이전트를 설치합니다.
    4. sudo apt install veeam
    5. 설정 및 백업 저장소 마운트: Veeam Agent는 백업 데이터를 저장할 위치가 필요합니다. 저는 NAS의 SMB 공유 폴더를 VM 내부에 마운트해서 사용했어요.
    6. # /etc/fstab 에 추가
      //NAS_IP/share /mnt/veeam_backup cifs credentials=/root/.smbcredentials,uid=1000,gid=1000 0 0
      # .smbcredentials 파일 내용: username=myuser,password=mypass
      
      sudo mount -a
    7. 백업 작업 생성: Veeam Agent는 CLI (Command Line Interface)로 백업 작업을 생성하고 관리합니다.
    8. sudo veeamconfig job create --name "My_VM_Backup" --type "volume" --volumes "/" --repository "/mnt/veeam_backup" --schedule "daily" --retention "7" --full-backup-period "weekly"

      위 명령어는 ‘/’ 볼륨 전체를 매일 백업하고 7일간 보존하며, 매주 전체 백업을 수행하는 작업을 생성하는 예시입니다.

    Veeam Agent for Linux의 CLI 명령어를 사용하여 백업 작업 생성 및 상태를 확인하는 리눅스 터미널 화면

    백업 대상 리눅스 VM의 터미널에서 `veeamconfig` 명령어를 사용하여 백업 작업을 생성하거나 상태를 확인하는 CLI 실행 화면입니다.

    3. 삽질 경험: 주의사항과 트러블슈팅

    홈랩에서 새로운 기술을 도입하면 늘 예상치 못한 삽질의 연속이죠. 저도 예외는 아니었습니다. 😅

    3.1. Proxmox Backup Server (PBS)에서 겪은 문제

    • 초기 백업 시간: 처음 전체 백업을 할 때, Dedup 인덱싱 때문에 생각보다 시간이 좀 걸리더라고요. 특히 데이터 양이 많을수록 초기 부담이 있었습니다. 물론 그 이후의 증분 백업은 매우 빨라졌지만요. 💡 팁: 처음부터 충분한 리소스 (RAM, CPU)를 할당해주면 좋습니다.
    • 스토리지 공간 관리: Dedup이 강력해서 공간 절약은 좋지만, 오래된 백업을 제대로 프루닝(Pruning, 정리)하지 않으면 나중에 공간이 부족해질 수 있습니다. 리텐션 정책을 꼼꼼히 설정하고 주기적으로 확인하는 게 중요합니다.

    3.2. Veeam Agent for Linux에서 겪은 문제

    • 커널 업데이트와 DKMS: 리눅스 커널이 업데이트될 때마다 Veeam Agent의 커널 모듈이 재컴파일되어야 합니다. DKMS (Dynamic Kernel Module Support)가 잘 작동하면 문제가 없지만, 가끔 수동으로 개입해야 할 때가 있더라고요. ⚠️ 커널 업데이트 후 백업이 실패한다면 이 부분을 먼저 확인해보세요.
    • NFS/SMB 마운트 권한: 백업 저장소로 NAS를 사용하면서 마운트 권한 문제로 한참을 씨름했습니다. `uid`, `gid` 옵션과 `.smbcredentials` 파일 설정을 잘못해서 백업 파일을 쓸 수 없었던 거죠. 결국 `veeamconfig`를 실행하는 유저의 권한과 마운트 옵션을 정확히 맞춰주니 해결되더라고요.
    • 파일 시스템 스냅샷: Veeam Agent는 백업 시 파일 시스템 스냅샷을 활용하는데, 특정 파일 시스템에서는 문제가 될 수 있습니다. LVM (Logical Volume Manager)을 사용하면 안정적인 스냅샷을 생성할 수 있어서 백업 신뢰도가 높아집니다. 저는 처음엔 LVM 없이 하다가 나중에 LVM으로 전환했네요.

    4. 드디어 결과: 홈랩 VM 백업 솔루션 성능 벤치마크

    여러 번의 테스트와 삽질 끝에 드디어 두 솔루션의 성능을 비교해볼 수 있었습니다. 제가 직접 동일한 VM과 데이터 세트를 가지고 테스트해본 결과는 다음과 같습니다. (정확한 수치보다는 제가 체감한 경향성을 위주로 말씀드릴게요.)

    항목 Proxmox Backup Server (PBS) Veeam Agent for Linux
    백업 속도 (초기 전체) 매우 빠름 (VM 스냅샷 기반, 블록 직접 접근) 보통 (VM 내부에서 파일 시스템 스캔)
    백업 속도 (증분) 압도적으로 빠름 (변경 블록만 백업) 빠름 (변경된 파일/블록 스캔)
    스토리지 효율성 최상 (블록 수준 Dedup + 압축, 중복 제거율 매우 높음) 보통 (일반적인 파일 압축, Dedup 없음)
    복구 속도 및 편의성 매우 편리 (전체 VM 복구, 파일 단위 복구도 가능) 편리 (전체 시스템/볼륨/파일 단위 복구)
    관리 편의성 최상 (Proxmox VE와 통합된 중앙 집중식 GUI) 보통 (각 VM에 에이전트 설치 및 CLI 관리)
    지원 환경 Proxmox VE 환경에 특화 다양한 리눅스 환경 (물리/가상/클라우드)
    Proxmox Backup Server와 Veeam Agent for Linux의 백업 성능 및 기능 비교 인포그래픽

    Proxmox Backup Server와 Veeam Agent for Linux의 백업 속도, 스토리지 효율성, 관리 편의성 등을 시각적으로 비교한 인포그래픽입니다.

    제가 직접 써보니 PBS의 블록 수준 중복 제거는 정말 엄청난 기능이더라고요. 여러 VM을 백업해도 중복되는 OS 파일이나 라이브러리 같은 것들은 한 번만 저장되니, 스토리지 공간이 기하급수적으로 절약됩니다. 백업 시간도 Proxmox VE와 긴밀하게 연동되어 VM 스냅샷 기반으로 동작하기 때문에 훨씬 빨랐습니다. Veeam Agent도 훌륭한 솔루션이지만, VM 내부에서 동작하는 특성상 PBS만큼의 통합된 성능과 효율을 보여주지는 못했어요.

    5. 마무리: 어떤 솔루션이 당신의 홈랩에 적합할까요?

    결론적으로 제 홈랩 백업 환경에서는 Proxmox Backup Server가 압도적인 우위를 보였습니다. Proxmox VE를 메인 하이퍼바이저로 사용하고 있다면, PBS는 선택이 아닌 필수라고 해도 과언이 아닐 정도예요. 정말 이거 진짜 편하더라고요! 🎉

    하지만 만약 여러분의 홈랩이나 실제 운영 환경이 Proxmox VE 외에 다른 하이퍼바이저 (예: VMware, Hyper-V)나 물리 서버, 혹은 클라우드 VM이 섞여 있다면, Veeam Agent for Linux는 여전히 매우 강력한 선택지가 될 수 있습니다. 다양한 환경을 아우르는 범용성과 강력한 복구 기능은 무시할 수 없거든요. 특히 무료 버전도 워낙 훌륭해서 예산 제약이 있는 홈랩에서는 충분히 고려해볼 만합니다.

    어떤 솔루션을 선택하든, 가장 중요한 건 정기적인 백업과 복구 테스트입니다. 백업은 했는데 복구가 안 되면 아무 소용 없잖아요? 제가 겪었던 삽질 경험을 바탕으로 여러분은 좀 더 수월하게 백업 환경을 구축하시길 바랍니다. 혹시 더 궁금한 점이나 다른 백업 솔루션에 대한 경험이 있으시다면 댓글로 공유해주세요! 다음 글에서는 Proxmox Backup Server의 고급 설정이나 복구 시뮬레이션에 대해 좀 더 깊이 다뤄볼까 합니다. 기대해주세요!

  • [Proxmox] Proxmox LXC 컨테이너 보안 강화 체크리스트: 프로덕션 필수 설정

    [Proxmox] Proxmox LXC 컨테이너 보안 강화 체크리스트: 프로덕션 필수 설정

    Proxmox LXC 컨테이너 보안 강화 체크리스트: 프로덕션 필수 설정

    안녕하세요, 13년차의 서버실 주인장입니다. 오늘은 제가 홈랩에서, 그리고 실제 프로덕션 환경에서 Proxmox LXC 컨테이너를 운영하면서 뼈저리게 느꼈던 보안 강화에 대한 이야기를 해보려고 합니다. Proxmox LXC는 가볍고 빠르며 효율적이라서 저도 정말 애용하는 기술 스택인데요. 근데 이 편리함 뒤에는 간과하기 쉬운 보안 위협이 숨어있다는 사실, 혹시 알고 계셨나요? ⚠️

    처음에는 LXC가 워낙 가볍고 VM(Virtual Machine)만큼 복잡하지 않으니까, ‘이 정도면 괜찮겠지?’ 하고 안일하게 생각했던 적도 있습니다. 하지만 몇 번의 삽질과 실제 보안 사고(아찔한 순간이었죠… 휴)를 겪으면서, 컨테이너 환경도 강력한 보안 대책이 필수적이라는 것을 깨달았죠. 특히 프로덕션 환경에서는 더더욱 그렇습니다.

    오늘은 제가 직접 해보고 효과를 본 Proxmox LXC 컨테이너 보안 강화 체크리스트와 베스트 프랙티스를 여러분께 멘토처럼 알려드릴게요. 저처럼 삽질하지 마시라고, 제가 겪었던 시행착오와 해결 과정까지 솔직하게 공유해드리겠습니다! 자, 그럼 시작해볼까요? 🎉

    Proxmox LXC 컨테이너 보안 강화를 위한 주요 구성 요소를 보여주는 개요 다이어그램

    Proxmox LXC 컨테이너 환경에서 보안 강화를 위한 주요 구성 요소와 상호작용을 보여주는 다이어그램입니다.

    1. LXC 컨테이너, 왜 보안이 중요할까요? (개념 설명)

    Proxmox VE (Virtual Environment)에서 LXC (Linux Containers)는 도커(Docker) 컨테이너와 VM의 중간 지점에 있다고 생각하시면 편합니다. VM처럼 완벽한 격리는 아니지만, 도커보다는 더 OS에 가까운 환경을 제공하죠. 호스트 OS의 커널을 공유하기 때문에 가상화 오버헤드가 적고 성능이 좋습니다. 하지만 바로 이 커널 공유 때문에 보안에 취약점이 생길 수 있습니다.

    만약 하나의 LXC 컨테이너가 해킹당하면, 공격자가 호스트 OS의 커널에 접근할 수 있는 경로를 확보하게 될 수도 있습니다. 이는 곧 다른 컨테이너나 심지어 호스트 시스템 전체까지 위험에 빠뜨릴 수 있다는 뜻이거든요. 그래서 LXC 컨테이너는 VM만큼은 아니더라도, 최소한의 보안 장치들을 꼭 마련해두는 것이 좋습니다. 제가 처음 이걸 알았을 때, 등골이 오싹했더랬죠.

    2. 실전 구현: Proxmox LXC 보안 강화 체크리스트

    자, 이제 실질적으로 어떤 작업을 해야 하는지 단계별로 살펴보겠습니다. 제가 직접 구축하면서 가장 효과적이라고 느꼈던 방법들 위주로 구성했어요.

    2.1. ✅ Unprivileged 컨테이너 사용 (권한 분리)

    가장 기본 중의 기본입니다. Unprivileged container (비특권 컨테이너)는 컨테이너 내부의 root 사용자가 호스트 시스템의 root 권한을 가지지 못하도록 격리하는 방식입니다. 이게 핵심이에요. 만약 컨테이너가 Compromise (침해)되더라도, 공격자가 호스트 시스템에 직접적인 root 권한을 행사하기 어렵게 만드는 거죠.

    새 LXC 컨테이너를 생성할 때 Proxmox UI에서 ‘Unprivileged container’ 옵션을 체크하거나, CLI에서는 --unprivileged 1 옵션을 추가하면 됩니다. 저는 주로 CLI로 작업하기 때문에 다음과 같이 명령어를 사용합니다.

    pct create 101 local:vztmpl/debian-11-standard_11.0-1_amd64.tar.zst \
      --hostname my-secure-lxc \
      --password mysecretpassword \
      --memory 512 --swap 512 \
      --rootfs local-lvm:8 \
      --unprivileged 1 # 여기가 중요!

    이렇게 컨테이너를 생성하면 Proxmox가 자동으로 UID/GID 매핑 설정을 해줍니다. /etc/subuid와 /etc/subgid 파일에 호스트 시스템의 사용자 ID와 그룹 ID를 컨테이너 내부의 ID에 매핑하는 규칙이 추가되죠. 처음엔 이게 뭔가 싶었는데, 결국 호스트와 컨테이너 간의 권한 분리 장치더라고요.

    2.2. ✅ AppArmor 프로파일 적용 (강제적 접근 제어)

    AppArmor (앱아머)는 Linux 커널의 MAC (Mandatory Access Control, 강제적 접근 제어) 보안 시스템 중 하나입니다. 특정 프로그램이 접근할 수 있는 파일, 네트워크 리소스 등을 미리 정의된 프로파일에 따라 제한합니다. 쉽게 말해, ‘이 프로그램은 딱 이것만 할 수 있어!’라고 미리 정해주는 거죠.

    Proxmox는 기본적으로 LXC 컨테이너에 AppArmor 프로파일을 적용하지만, 더 세밀하게 제어하고 싶을 때가 있습니다. 예를 들어, 웹 서버 컨테이너가 불필요한 시스템 파일에 접근하는 것을 막는 것이죠.

    현재 AppArmor 상태는 다음 명령어로 확인할 수 있습니다.

    sudo aa-status

    특정 컨테이너나 서비스에 대한 커스텀 AppArmor 프로파일을 작성하여 /etc/apparmor.d/ 디렉토리에 넣고, sudo apparmor_parser -r /etc/apparmor.d/my-lxc-profile 명령어로 로드하면 됩니다. 제가 예전에 특정 서비스가 계속 죽어서 살펴보니, AppArmor 프로파일 때문에 필요한 파일에 접근을 못 하고 있더라고요. aa-complain 모드로 변경해서 로그를 보면서 디버깅했던 기억이 납니다.

    2.3. ✅ UFW를 이용한 네트워크 방화벽 설정

    컨테이너 내부에서도 방화벽을 설정하는 것은 정말 중요합니다. UFW (Uncomplicated Firewall)는 iptables의 복잡한 규칙들을 좀 더 쉽게 관리할 수 있게 해주는 도구입니다. LXC 컨테이너 내부에서 UFW를 설치하고 활성화하여, 필요한 포트만 외부에 노출하도록 설정할 수 있습니다.

    # 컨테이너 내부에서 실행
    sudo apt update
    sudo apt install ufw -y
    sudo ufw enable
    sudo ufw default deny incoming # 기본적으로 모든 외부 접근 차단
    sudo ufw allow ssh # SSH (22번 포트) 허용
    sudo ufw allow http # HTTP (80번 포트) 허용
    sudo ufw allow https # HTTPS (443번 포트) 허용
    sudo ufw status verbose

    이렇게 설정하면 컨테이너 내부에서 불필요한 포트가 열려 외부 공격에 노출되는 것을 방지할 수 있습니다. 혹시 LXC 안에서 서비스가 안 열려서 헤매신 적 있나요? 거의 십중팔구 UFW나 iptables 때문일 겁니다. 💡

    LXC 컨테이너 내부에서 UFW 명령어를 사용하여 네트워크 방화벽 규칙을 설정하고 확인하는 CLI 화면

    LXC 컨테이너 내부에서 UFW 명령어를 사용하여 네트워크 방화벽 규칙을 설정하고 확인하는 CLI 화면입니다.

    2.4. ✅ 정기적인 시스템 업데이트 및 패치

    너무 당연한 이야기 같지만, 잊지 않고 꾸준히 해야 할 가장 기본적인 보안 수칙입니다. OS와 설치된 모든 패키지를 최신 상태로 유지하여 알려진 취약점을 제거해야 합니다. 저는 unattended-upgrades를 설정해서 자동으로 업데이트되도록 해두는 편입니다. 물론 중요한 서비스는 수동으로 확인하고 적용하지만요.

    # 컨테이너 내부에서 실행
    sudo apt update && sudo apt upgrade -y
    
    # 자동 업데이트 설정 (옵션)
    sudo apt install unattended-upgrades -y
    sudo dpkg-reconfigure --priority=low unattended-upgrades

    2.5. ✅ SSH 보안 강화

    컨테이너에 접근하는 주요 방법 중 하나가 SSH입니다. SSH 보안을 강화하는 것은 컨테이너 전체의 보안을 높이는 데 큰 역할을 합니다.

    • 비밀번호 대신 키 기반 인증 사용: 가장 강력한 방법입니다.
    • 기본 SSH 포트 변경 (22번 외 다른 포트): 기본적인 스캐닝 공격을 회피할 수 있습니다.
    • Root 로그인 비활성화: PermitRootLogin no 설정.
    • 강력한 비밀번호 정책: (비밀번호 인증을 사용해야 할 경우)

    /etc/ssh/sshd_config 파일을 수정하여 위 항목들을 적용할 수 있습니다. 변경 후에는 꼭 sudo systemctl restart sshd 명령어로 SSH 서비스를 재시작해주세요.

    2.6. ✅ 로깅 및 모니터링

    아무리 보안을 강화해도 100% 완벽할 수는 없습니다. 중요한 것은 이상이 발생했을 때 얼마나 빨리 알아차리고 대응하느냐입니다. 컨테이너 내부의 로그를 중앙 집중식으로 관리하고, 주요 지표들을 모니터링하는 시스템을 구축하는 것이 좋습니다.

    • syslog-ng 또는 rsyslog 설정: 호스트 또는 별도의 로깅 서버로 로그를 전송.
    • Prometheus + Grafana: CPU, 메모리, 네트워크 트래픽 등 리소스 사용량과 서비스 상태 모니터링.
    • Fail2ban: SSH 무차별 대입 공격(Brute-force attack)과 같은 침입 시도를 자동으로 차단.

    물론 이 모든 걸 한 번에 다 하기는 어렵겠지만, 중요한 서비스부터 차근차근 적용해보는 것이 좋습니다. 제가 처음 홈랩을 구성할 때 로깅과 모니터링을 소홀히 했다가, 나중에 문제 터지고 나서야 뒤늦게 붙잡고 후회했던 적이 많거든요. 😅

    3. ⚠️ 주의사항 및 트러블슈팅: 제가 겪었던 삽질들

    위에서 말씀드린 내용을 적용하다 보면 분명히 문제가 발생할 수 있습니다. 저도 그랬거든요. 몇 가지 흔한 문제와 해결 방법을 공유해 드릴게요.

    • UID/GID 매핑 오류로 인한 컨테이너 시작 실패:

      • 증상: 컨테이너가 시작되지 않거나, 내부에서 파일 권한 문제로 서비스가 실행되지 않습니다. lxc-start 로그를 보면 Operation not permitted 같은 에러가 보입니다.
      • 해결: /etc/subuid와 /etc/subgid 파일에 올바른 매핑이 설정되어 있는지 확인합니다. pct create 시 --unprivileged 1 옵션을 제대로 사용했는지도 중요하고요. 이미 생성된 컨테이너라면 /etc/pve/lxc/VMID.conf 파일의 lxc.idmap 설정을 확인해야 합니다. 제가 이걸로 반나절을 날린 적이 있습니다.
    • AppArmor 프로파일로 인한 서비스 장애:

      • 증상: 특정 서비스가 AppArmor 정책 때문에 필요한 파일에 접근하지 못해 실행되지 않거나 비정상적으로 종료됩니다.
      • 해결: sudo aa-status로 AppArmor 상태를 확인하고, 문제가 되는 프로파일을 sudo aa-complain /etc/apparmor.d/my-lxc-profile 명령어로 complain 모드로 변경합니다. 이 모드에서는 정책 위반 시 로그만 남기고 차단하지 않으므로, 로그를 확인하여 필요한 접근 권한을 프로파일에 추가한 후 다시 sudo aa-enforce로 enforce 모드로 전환합니다.
    • UFW 포트 블로킹으로 인한 서비스 접근 불가:

      • 증상: 분명히 서비스는 실행 중인데 외부에서 접근이 안 됩니다.
      • 해결: 컨테이너 내부에서 sudo ufw status verbose 명령어로 현재 UFW 규칙을 확인합니다. 필요한 포트가 ALLOW 되어 있는지 확인하고, 만약 막혀있다면 sudo ufw allow [PORT] 명령어로 허용해줍니다.

    4. 검증 및 결과 확인

    보안 설정을 마쳤다면, 제대로 적용되었는지 확인하는 과정이 필수입니다.

    1. 컨테이너 권한 확인:

      # 호스트에서 실행
      lxc-info -n VMID -p

      lxc.idmap 설정이 올바르게 되어 있고, unprivileged 컨테이너로 생성되었는지 확인합니다.

    2. AppArmor 상태 확인:

      # 호스트에서 실행
      sudo aa-status

      적용된 프로파일이 enforce 모드로 잘 동작하는지 확인합니다.

    3. UFW 방화벽 규칙 확인:

      # 컨테이너 내부에서 실행
      sudo ufw status verbose

      필요한 포트만 열려 있고, 나머지는 잘 차단되어 있는지 확인합니다.

    4. 외부 포트 스캔:

      # 외부 시스템에서 실행 (예: 공격자 시점)
      nmap -sV -p- [LXC_컨테이너_IP]

      실제 외부에서 접근했을 때 불필요한 포트가 열려있지 않은지 nmap 같은 도구로 스캔해보는 것도 좋은 방법입니다. 저는 이 과정을 통해 ‘드디어 됐다!’ 하는 뿌듯함을 느꼈습니다. 😄

    LXC 컨테이너 보안 설정 완료 후 nmap 스캔 결과 및 AppArmor 상태를 보여주는 대시보드

    LXC 컨테이너 보안 설정이 완료된 후, nmap 스캔을 통해 열린 포트를 확인하고 AppArmor 상태를 점검하는 결과 화면입니다.

    5. 마무리하며: 지속적인 관심이 중요합니다

    오늘은 Proxmox LXC 컨테이너의 보안을 강화하기 위한 핵심 체크리스트를 저의 경험을 녹여가며 알려드렸습니다. Unprivileged 컨테이너, AppArmor, UFW, 정기 업데이트, SSH 보안 강화, 로깅 및 모니터링까지, 이 여섯 가지만 잘 지켜도 여러분의 LXC 컨테이너는 훨씬 더 안전해질 겁니다. 🛡️

    사실 보안은 한 번 설정하고 끝나는 것이 아니라, 지속적인 관심과 관리가 필요한 영역입니다. 새로운 취약점은 계속해서 발견되고, 공격 기술도 진화하거든요. 그러니 늘 최신 보안 동향에 귀 기울이고, 여러분의 시스템을 꾸준히 점검해주시길 바랍니다.

    다음 글에서는 LXC 컨테이너 환경에서 SELinux (Security-Enhanced Linux) 적용 방안이나, IDS/IPS (침입 탐지/방지 시스템)를 구축하는 방법에 대해 좀 더 깊이 있게 다뤄볼까 합니다. 혹시 궁금한 점이나 ‘이런 내용도 다뤄줬으면 좋겠다!’ 하는 아이디어가 있다면 언제든지 댓글로 남겨주세요! 여러분의 안전하고 튼튼한 서버실을 응원합니다. 💪

    Proxmox LXC 컨테이너 보안 강화를 위한 주요 체크리스트 항목들을 시각적으로 요약한 인포그래픽입니다.

  • [Proxmox] Proxmox VE & Ceph 분산 스토리지 1년 회고: 안정성, 성능, 교훈

    [Proxmox] Proxmox VE & Ceph 분산 스토리지 1년 회고: 안정성, 성능, 교훈

    Proxmox VE & Ceph 분산 스토리지 1년 회고: 안정성, 성능, 교훈

    안녕하세요, 13년차의 서버실 주인장입니다. 오랜만에 홈랩(HomeLab) 이야기를 들고 왔네요. 오늘은 제가 지난 1년간 Proxmox VE와 Ceph를 조합해서 분산 스토리지를 구축하고 운영했던 경험을 회고해보려고 합니다. Proxmox Ceph 조합은 홈랩에서 강력한 스토리지 솔루션을 구축하려는 분들께 정말 매력적인 선택지인데요, 저 역시 안정성과 성능 두 마리 토끼를 잡고 싶어서 이 조합에 도전했었죠. 결과는 어땠을까요? 기대했던 만큼의 성과를 얻었을까요, 아니면 삽질의 연속이었을까요? 솔직한 제 경험담을 지금부터 풀어보겠습니다.

    혹시 여러분도 저처럼 늘어나는 가상 머신(VM, Virtual Machine)과 컨테이너(Container) 때문에 스토리지 확장에 대한 고민이 많으셨나요? 단일 서버의 저장 공간으로는 한계가 있고, 그렇다고 비싼 네트워크 스토리지(NAS, Network Attached Storage)를 여러 대 들이자니 배보다 배꼽이 더 커지는 상황. 저도 그랬습니다. 그래서 저렴한 하드웨어로 고가용성(High Availability)과 확장성(Scalability)을 동시에 잡을 수 있는 방법을 찾다가 분산 스토리지(Distributed Storage) 솔루션인 Ceph를 Proxmox VE 클러스터 위에 얹어보기로 마음먹었죠.

    왜 Proxmox VE와 Ceph를 선택했을까요? (컨셉 설명)

    제가 Proxmox VE와 Ceph 조합에 끌렸던 가장 큰 이유는 바로 시너지 효과 때문입니다. 쉽게 말해, Proxmox VE는 강력한 가상화 플랫폼이고, Ceph는 데이터를 여러 서버에 나눠 저장하면서 안정성과 성능을 높이는 시스템이거든요. 이 둘이 만나면 어떤 일이 벌어질까요?

    • Proxmox VE (프록스목스 VE): 리눅스 기반의 오픈소스 가상화 플랫폼입니다. VM과 컨테이너를 쉽게 관리할 수 있고, 여러 Proxmox 서버를 묶어 클러스터(Cluster)를 구성하면 VM을 서버 간에 자유롭게 이동시키거나(Live Migration, 라이브 마이그레이션), 한 서버에 문제가 생겨도 다른 서버에서 자동으로 VM을 재시작하는 고가용성 기능을 구현할 수 있습니다.
    • Ceph (쎄프): 역시 오픈소스 분산 스토리지 시스템입니다. 데이터를 여러 노드에 분산해서 저장하기 때문에 한두 개의 저장 장치에 문제가 생겨도 데이터가 손실될 염려가 적고, 여러 노드의 자원을 활용해서 높은 입출력 성능(IOPS, Input/Output Operations Per Second)을 낼 수 있습니다. 오브젝트 스토리지(Object Storage), 블록 스토리지(Block Storage), 파일 시스템(File System)까지 다양한 인터페이스를 제공하죠.

    이 둘을 함께 사용하면 Proxmox VE 클러스터를 구성하는 서버들의 로컬 디스크를 묶어서 하나의 거대한 Ceph 스토리지 풀(Storage Pool)로 만들 수 있습니다. 그렇게 되면 VM 디스크 이미지를 이 Ceph 스토리지에 저장하고, 어떤 Proxmox 서버에서든 해당 VM을 실행할 수 있게 되는 거죠. 한 서버에 문제가 생겨도 다른 서버가 Ceph 스토리지에 접근해서 VM을 바로 가져다 쓸 수 있으니, 고가용성(High Availability) 측면에서 정말 매력적이었어요.

    Proxmox VE와 Ceph 분산 스토리지 클러스터의 전체 아키텍처 다이어그램

    Proxmox VE 서버 3대와 Ceph 클러스터가 통합된 홈랩 아키텍처 다이어그램입니다. 각 Proxmox 노드가 Ceph OSD를 호스팅하며, VM들이 이 분산 스토리지 위에 위치합니다.

    제 홈랩에 Ceph 클러스터 구축하기: 삽질의 시작과 과정

    솔직히 처음엔 “오픈소스니까 뭐, 설치하면 되겠지!” 하는 안일한 생각도 좀 있었습니다. 13년차 엔지니어라도 새로운 기술 앞에서는 겸손해야 한다는 걸 다시 한번 깨달았죠. 😅

    하드웨어 구성: 어떤 장비로 시작했을까?

    저는 최소 3개의 노드(Node)로 구성된 클러스터를 목표로 했습니다. Ceph는 복제(Replication)를 통해 데이터 안정성을 확보하는데, 보통 3-복제(3-replication)를 많이 쓰거든요. 그래서 3대의 미니 PC를 준비했습니다. 각 PC는 인텔 NUC 같은 저전력 모델에 16GB RAM, 그리고 데이터를 저장할 SSD를 여러 개 장착했어요. 처음에는 1GbE(기가비트 이더넷) 네트워크로 시작했지만, 나중에는 10GbE(텐 기가비트 이더넷)로 업그레이드했습니다. Ceph는 네트워크 대역폭을 정말 많이 쓰는 친구거든요!

    Proxmox VE 설치 및 클러스터 구성

    Proxmox VE 설치는 생각보다 간단합니다. ISO 이미지를 USB에 구워서 각 노드에 설치하고, 웹 UI에 접속해서 몇 번의 클릭만으로 Proxmox 클러스터를 구성할 수 있죠. 이때 쿼럼(Quorum) 유지를 위해 최소 3개 이상의 노드가 안정적이라는 점을 꼭 기억해야 합니다. (홀수 노드가 좋습니다.)

    # 첫 번째 노드에서 클러스터 생성
    pvecm create home-ceph-cluster
    
    # 다른 노드에서 클러스터에 조인 (첫 번째 노드 IP와 패스워드 필요)
    pvecm add 192.168.1.10 --token <토큰_값>
    

    이 과정 자체는 매끄러웠습니다. Proxmox의 클러스터 관리 기능은 정말 잘 되어 있더라고요.

    Ceph 설치 및 OSD 추가: Proxmox Ceph 통합의 시작!

    이제 대망의 Ceph 차례입니다. Proxmox VE는 Ceph 통합 기능이 워낙 잘 되어 있어서 CLI(Command Line Interface)나 웹 UI에서 몇 번의 명령으로 Ceph를 설치하고 OSD(Object Storage Device)를 추가할 수 있습니다.

    # 각 Proxmox 노드에서 Ceph 설치
    pveceph install
    
    # Ceph Monitor(모니터) 설치 (클러스터 노드 중 최소 3개에 설치 권장)
    pveceph createmon
    
    # OSD 추가 (각 노드의 사용 가능한 디스크를 OSD로 지정)
    # 예: /dev/sdb 디스크를 OSD로 추가하고, NVMe SSD를 DB/WAL로 사용
    pveceph createosd /dev/sdb --db-device /dev/nvme0n1 --wal-device /dev/nvme0n1
    

    처음에는 단순히 `pveceph createosd /dev/sdb` 이런 식으로 HDD를 OSD로 추가했는데, 성능이 영 시원찮았습니다. Ceph의 BlueStore(블루스토어) 백엔드는 메타데이터를 빠르게 처리하는 것이 중요한데, HDD만으로는 한계가 명확하더라고요. 그래서 나중에는 NVMe SSD를 DB/WAL(데이터베이스/쓰기Ahead로그) 용도로 할당해서 성능을 끌어올렸습니다. 이 부분이 Ceph 성능 튜닝의 핵심 중 하나라는 걸 몸소 깨달았죠. 💡

    Proxmox VE 웹 UI에서 활성화된 Ceph OSD 목록을 보여주는 화면

    Proxmox VE 웹 UI의 Ceph 섹션입니다. 각 노드의 OSD 목록과 상태(UP/IN)를 한눈에 확인할 수 있습니다. 저 많은 OSD들이 제 소중한 데이터를 분산해서 저장하고 있죠.

    1년간 Proxmox Ceph를 운영하며 겪은 안정성 및 성능 이야기

    1년이라는 시간은 Ceph 클러스터의 진정한 가치를 시험하기에 충분했습니다. 정말 많은 것을 배우고 느꼈네요.

    안정성 (Stability) 회고: 역시 분산 스토리지!

    Ceph의 가장 큰 장점 중 하나는 데이터 안정성(Data Durability)입니다. 저도 OSD 하나가 갑자기 죽는 경험을 몇 번 했습니다. 그때마다 심장이 덜컥 내려앉았지만, Ceph는 3-복제 덕분에 자동으로 데이터 복구(Self-healing)를 시작하더라고요. 물론 복구 시간 동안 클러스터 성능이 저하되긴 했지만, 데이터 손실 없이 무사히 복구를 완료하는 모습을 보면서 “이래서 Proxmox Ceph 조합을 쓰는구나!” 하고 감탄했습니다. 👏

    Proxmox VE의 HA (High Availability, 고가용성) 기능도 빛을 발했습니다. 특정 Proxmox 노드가 재부팅되거나 문제가 생겼을 때, 해당 노드에서 실행 중이던 VM들이 다른 노드에서 자동으로 재시작되는 것을 여러 번 확인했습니다. Ceph 스토리지 덕분에 VM 디스크에 대한 접근성이 보장되었기 때문에 가능한 일이었죠. 물론 순간적인 서비스 중단은 있었지만, 시스템 전체의 가용성을 크게 높여주었습니다.

    성능 (Performance) 회고: 기대와 현실 사이

    초기에는 HDD OSD만으로 Ceph를 구성했더니, VM의 디스크 I/O가 심하게 느려지는 문제가 있었습니다. 특히 여러 VM이 동시에 디스크 작업을 할 때는 확연히 체감될 정도였죠. 웹 서버나 데이터베이스 서버를 돌리는데 응답 속도가 느려지니 답답하더라고요.

    이 문제를 해결하기 위해 NVMe SSD를 DB/WAL 디바이스로 추가하는 튜닝을 진행했습니다. 결과는 드라마틱한 성능 향상이었습니다! 특히 작은 파일 I/O나 랜덤 읽기/쓰기 성능이 눈에 띄게 좋아졌습니다. 💡 또한, 클러스터 내부 통신(Ceph Private Network)을 10GbE 스위치로 분리하고 업그레이드하면서 네트워크 병목 현상도 크게 줄였습니다. Ceph는 데이터를 복제하고 노드 간에 통신해야 하므로, 빠른 네트워크는 필수라는 걸 다시 한번 깨달았죠.

    Ceph 클러스터의 1년 간 성능(IOPS, 처리량, 지연 시간) 및 스토리지 사용량을 보여주는 Grafana 대시보드

    지난 1년간 Ceph 클러스터의 주요 성능 지표(IOPS, 처리량, 지연 시간)와 스토리지 사용량을 보여주는 Grafana 대시보드입니다. NVMe 캐시 추가 이후 I/O 성능이 크게 개선된 것을 볼 수 있습니다.

    제가 배운 교훈과 놓치지 말아야 할 포인트들 (주의사항 및 트러블슈팅)

    1년간의 여정은 순탄치만은 않았습니다. 수많은 삽질과 시행착오를 겪으며 얻은 교훈들을 공유합니다.

    1. 네트워크의 중요성 ⚠️: Ceph는 엄청난 양의 데이터를 노드 간에 주고받습니다. 특히 데이터 복제(Replication)와 리밸런싱(Rebalancing) 시에는 네트워크 대역폭을 거의 다 써버리기도 해요. 저는 1GbE로 시작했다가 병목 현상에 시달렸고, 결국 10GbE Private Network(프라이빗 네트워크)를 구성하면서 안정적인 성능을 확보했습니다. 반드시 Ceph 전용 네트워크를 분리하고, 가능한 한 빠른 대역폭을 확보하는 것이 좋습니다.
    2. OSD 디스크 선택 및 구성: HDD만으로 OSD를 구성하면 성능 한계가 명확합니다. 가능하다면 SSD나 NVMe SSD를 DB/WAL 디바이스로 활용하여 BlueStore의 메타데이터 처리 속도를 높이세요. 저는 OSD 구성 시 디스크 성능과 용량을 신중하게 고려하지 않아서 나중에 재구성하는 삽질을 좀 했습니다.
    3. 모니터링의 생활화: Ceph 클러스터는 생각보다 복잡합니다. `ceph -s` 명령으로 클러스터 상태를 주기적으로 확인하고, Proxmox VE 자체 모니터링 외에 Prometheus와 Grafana를 연동하여 세밀한 모니터링 대시보드를 구축하는 것이 좋습니다. OSD의 상태, 네트워크 트래픽, 스토리지 사용량 등을 실시간으로 확인해야 문제 발생 시 빠르게 대응할 수 있습니다.
    4. CRUSH Map (크러시 맵) 이해: Ceph는 CRUSH Map이라는 알고리즘을 사용해서 데이터를 어디에 저장하고 어떻게 복제할지 결정합니다. 이 CRUSH Map을 이해하면 데이터가 어떻게 분산되는지, 장애 시 복구가 어떻게 이루어지는지 파악하는 데 큰 도움이 됩니다. 홈랩에서는 기본 설정으로도 충분하지만, 좀 더 최적화된 구성을 원한다면 깊이 파고들어 볼 가치가 있습니다.
    5. 업그레이드 및 패치: Proxmox VE와 Ceph는 꾸준히 업데이트됩니다. 새로운 기능과 버그 수정이 포함된 업데이트는 중요하지만, 항상 사전에 충분히 테스트하고 백업 전략을 세운 후 진행해야 합니다. 저는 한 번 업데이트 후에 특정 OSD가 Unhealthy 상태가 되어 클러스터 재시작 후 복구하는 경험도 있었습니다.
    # Ceph 클러스터 상태 확인 (가장 기본적인 명령)
    ceph -s
    
    # OSD 디스크 트리 확인 (어떤 디스크가 OSD로 사용되는지, 상태는 어떤지)
    ceph osd tree
    
    # Ceph 로그 확인
    tail -f /var/log/ceph/ceph.log
    

    이런 명령들을 꾸준히 사용하며 클러스터의 “건강”을 체크하는 것이 중요합니다.

    결론 및 다음 단계

    Proxmox VE와 Ceph를 활용한 분산 스토리지 구축은 제 홈랩에 강력한 고가용성 스토리지를 선물해주었습니다. 물론 초기 설정의 복잡성, 그리고 10GbE 네트워크나 NVMe SSD 같은 추가적인 하드웨어 투자 비용은 무시할 수 없었지만, 그만큼 안정성과 성능이라는 큰 보상을 얻을 수 있었습니다. 특히 OSD 하나가 죽어도 데이터가 안전하고, VM이 자동으로 다른 노드에서 재시작되는 경험은 정말 든든하더라고요. 홈랩에서 중요한 서비스를 운영하거나, 미래의 스케일업(Scale-up)을 염두에 두고 있다면 Proxmox Ceph 조합은 충분히 고려해볼 만한 가치가 있습니다.

    물론 Ceph가 모든 상황에 완벽한 솔루션은 아닙니다. 작은 규모에서는 오히려 오버헤드가 더 클 수도 있고, 특정 워크로드(예: 매우 높은 단일 VM IOPS)에서는 최적화가 필요할 때도 있습니다. 하지만 저렴한 비용으로 엔터프라이즈급 스토리지의 맛을 볼 수 있다는 점은 홈랩 엔지니어에게는 정말 큰 매력이라고 생각합니다.

    다음 단계로는 현재 운영 중인 Ceph 클러스터의 성능을 좀 더 면밀히 분석하고, 특정 VM에 대한 스토리지 I/O 최적화 방안을 모색해보려고 합니다. 또한, CephFS(쎄프 파일 시스템)를 활용하여 파일 공유 시스템을 구축해보는 것도 재미있는 도전이 될 것 같네요. 혹시 여러분도 Proxmox Ceph에 대한 궁금한 점이나 공유하고 싶은 경험이 있다면 언제든지 댓글로 남겨주세요!

    Proxmox VE와 Ceph 분산 스토리지의 장점과 단점을 비교하는 인포그래픽

    Proxmox VE와 Ceph 분산 스토리지 조합의 주요 장점과 고려해야 할 단점을 요약한 인포그래픽입니다. 홈랩 환경에서의 활용 가치를 한눈에 파악할 수 있습니다.

    다음에 더 유익한 정보로 찾아뵙겠습니다. 13년차의 서버실이었습니다!

  • [HomeLabs] 저전력 미니 서버 3종 벤치마크: 홈랩 가상화 및 NAS 성능 실측 비교

    [HomeLabs] 저전력 미니 서버 3종 벤치마크: 홈랩 가상화 및 NAS 성능 실측 비교

    저전력 미니 서버 3종 벤치마크: 홈랩 가상화 및 NAS 성능 실측 비교

    안녕하세요, 13년차의 서버실 주인장입니다. 오늘은 많은 홈랩(Homelab) 동지들이 고민하는 주제, 바로 저전력 미니 서버(Low-power Mini Server)에 대한 이야기입니다. 개인적으로 여러 대의 서버를 돌리다 보니 전기요금 고지서 볼 때마다 한숨이 나오곤 했거든요. 그래서 언젠가부터 저전력 시스템에 대한 갈증이 컸습니다. 특히 최근 Intel N100 프로세서 기반의 미니PC들이 워낙 잘 나오면서, 이 작은 친구들이 과연 홈랩 환경에서 얼마나 쓸모 있을지 궁금해하는 분들이 많으시더라고요.

    저도 이 궁금증을 못 참고, 직접 몇 가지 유형의 미니 서버들을 들여와 제 홈랩 환경에서 가상화(Virtualization)와 NAS(Network Attached Storage) 용도로 실컷 굴려봤습니다. 이 글에서는 제가 경험한 세 가지 유형의 저전력 미니 서버들의 성능을 실측 데이터 기반으로 비교해보고, 어떤 용도에 적합할지 정말 솔직하게 알려드리려고 합니다. 삽질 경험도 아낌없이 공유할 테니, 여러분의 홈랩 구축에 조금이나마 도움이 되었으면 좋겠습니다!

    다양한 저전력 미니 서버들이 홈랩 환경에서 연결되어 있는 모습

    홈랩 환경에서 다양한 저전력 미니 서버들을 테스트하는 모습입니다. 작은 크기에도 불구하고 홈랩의 핵심 역할을 수행하죠.

    💡 저전력 미니 서버, 왜 중요할까요?

    홈랩을 운영하다 보면 가장 큰 고민 중 하나가 바로 전력 소비(Power Consumption)와 소음(Noise)입니다. 특히 24시간 켜두는 서버라면 이 두 가지 요소가 정말 중요하거든요. 예전에는 랙 서버나 고성능 워크스테이션을 활용하는 경우가 많았지만, 요즘은 소형 폼팩터(Small Form Factor, SFF)의 저전력 미니PC들이 가격 대비 성능(Price-to-Performance)이 너무나 훌륭하게 나오면서 홈랩의 대세로 자리 잡고 있습니다.

    쉽게 말해, 이 작은 친구들이 전기는 적게 먹으면서도 웬만한 가벼운 서버 작업이나 가상 머신(Virtual Machine, VM), 컨테이너(Container) 구동에는 전혀 문제가 없다는 거죠. 게다가 책상 위에 올려두어도 부담 없는 크기와 저소음은 덤이고요. 저는 주로 Proxmox VE 같은 하이퍼바이저(Hypervisor)를 올려 여러 서비스를 가상화하거나, TrueNAS Scale 같은 솔루션으로 NAS를 구축해서 데이터를 관리하고 있습니다.

    비교 대상 미니 서버 유형

    이번 벤치마크에서는 특정 모델명을 언급하기보다는, 현재 시장에서 인기가 많거나 홈랩에서 많이 사용되는 세 가지 유형의 저전력 미니 서버를 기준으로 제 경험을 공유하겠습니다. 실제 사용 가능한 제품들만 다루기 위한 저만의 원칙이거든요. 대신 각 유형의 특징과 성능을 명확히 알려드릴 테니까요.

    1. 최신 저전력 가성비 챔피언: Intel N100 기반 미니PC
      최근 홈랩 커뮤니티에서 가장 뜨거운 프로세서 중 하나죠. 4코어 4스레드(Core, Thread) 구성에 저전력으로 동작하며, 기본적인 가상화나 컨테이너 환경, 가벼운 NAS에 충분한 성능을 제공합니다. TDP(Thermal Design Power, 열 설계 전력)가 낮아 발열과 소음 면에서도 유리하더라고요.
    2. 기존 홈랩 강자: Intel J4125/J5005 등 구형 저전력 미니PC
      몇 년 전까지만 해도 홈랩 가성비의 대명사였습니다. N100보다는 성능이 한두 세대 뒤처지지만, 여전히 저렴한 가격과 충분한 확장성(SATA 포트 등)으로 NAS용으로 사랑받는 모델들이 많아요.
    3. 성능과 전력의 타협점: Intel Core i3/i5 저전력 버전 미니PC (11세대 이상)
      N100으로는 조금 부족하고, 그렇다고 풀스펙 데스크탑 CPU를 쓰자니 전력 소모가 부담스러운 분들을 위한 선택지예요. 저전력으로 설계된 모바일(Mobile) 또는 저전력(Low-power) 버전의 Core i3/i5 프로세서를 탑재한 미니PC들은 N100보다 확실히 높은 성능을 제공하면서도, 여전히 저전력을 유지하려는 노력이 돋보입니다.

    🛠️ 실전 벤치마크 환경 구축 및 테스트 과정

    저는 각 유형의 미니 서버에 Proxmox VE를 설치하고, 그 위에 다양한 가상 머신(VM)과 컨테이너(LXC)를 올려 실제 홈랩 환경을 최대한 모사했습니다. 테스트를 위해 Ubuntu Server VM을 여러 개 생성하고, 다음과 같은 방식으로 성능을 측정했어요.

    • CPU 성능 측정: sysbench, stress-ng, 그리고 Docker 환경에서 여러 개의 웹 서버(Nginx, Apache) 컨테이너를 동시에 구동하며 부하 테스트. 동영상 트랜스코딩(Transcoding) 시나리오도 돌려봤습니다.
    • 메모리(RAM) 성능 측정: memtester, 여러 VM에 메모리를 할당했을 때의 스와핑(Swapping) 발생 여부 및 응답 속도.
    • 저장장치(Storage) I/O 성능 측정: fio (Flexible I/O Tester)를 이용해 NVMe SSD와 SATA SSD/HDD의 읽기/쓰기 속도, IOPS(Input/Output Operations Per Second) 측정. NAS 용도로 사용할 경우 네트워크를 통한 파일 전송 속도도 iperf3로 측정했습니다.
    • 네트워크 성능 측정: iperf3를 이용해 1GbE/2.5GbE LAN 포트의 최대 전송 속도 및 안정성 테스트.
    • 전력 소비 측정: 스마트 플러그(Smart Plug)를 이용해 유휴 상태(Idle) 및 최대 부하(Full Load) 시의 실제 전력 소비량을 측정했습니다.

    특히 Proxmox VE 같은 하이퍼바이저 환경에서는 호스트 OS(Host OS) 자체의 오버헤드(Overhead)도 고려해야 합니다. 제가 직접 경험해보니, N100은 최대 4개의 가벼운 VM이나 10개 내외의 컨테이너를 돌리는 데는 무리가 없더라고요. 하지만 그 이상으로 부하가 걸리거나, 메모리 사용량이 많은 애플리케이션을 돌리면 확실히 버벅거리는 느낌이 들었습니다.

    # CPU 성능 테스트 (예시: sysbench 소수 계산)
    sudo apt update
    sudo apt install sysbench -y
    sysbench cpu --cpu-max-prime=20000 run
    
    # 디스크 I/O 테스트 (예시: fio 랜덤 쓰기)
    sudo apt install fio -y
    fio --name=randwrite --ioengine=libaio --iodepth=16 --rw=randwrite --bs=4k --direct=1 --size=1G --numjobs=1 --runtime=60 --group_reporting
    
    Proxmox VE 대시보드에서 가상화 환경의 리소스 사용률을 모니터링하는 화면

    Proxmox VE 환경에서 다양한 가상 머신과 컨테이너의 리소스 사용량을 모니터링하는 대시보드입니다.

    ⚠️ 삽질 경험: 주의사항 및 트러블슈팅

    이런 벤치마크를 진행하면서 저도 몇 번의 삽질을 피할 수 없었습니다. 😅 여러분은 저 같은 실수를 하지 않으시길 바라며 몇 가지 팁을 공유합니다.

    • RAM 호환성 문제: 일부 미니PC는 특정 브랜드나 속도의 RAM 모듈과 호환성 문제가 있더라고요. 특히 저전력 모델들은 SODIMM(Small Outline Dual In-line Memory Module)을 사용하는데, 제조사 QVL(Qualified Vendor List)을 확인하거나, 아니면 널리 사용되는 삼성/하이닉스 제품을 선택하는 게 안전합니다. 제가 예전에 어떤 미니PC에서 DDR4 3200MHz RAM을 꽂았다가 부팅이 안 돼서 한참 헤맨 적이 있었거든요. 결국 클럭을 낮춰서 쓰거나 다른 RAM으로 교체해야 했습니다.
    • NVMe SSD 발열 관리: 작은 폼팩터에 고성능 NVMe SSD를 장착하면 발열이 심해질 수 있어요. 특히 연속적인 읽기/쓰기 작업이 많은 NAS 용도로 사용한다면 방열판(Heatsink)을 꼭 달아주는 것이 좋습니다. 방열판 없이 쓰다가 스로틀링(Throttling)이 걸려 성능이 저하되는 경험을 해봤거든요.
    • 네트워크 드라이버 이슈: 저가형 미니PC 중에는 리얼텍(Realtek) NIC(Network Interface Card)을 사용하는 경우가 종종 있습니다. 리눅스(Linux) 기반 OS에서는 드라이버 호환성 문제가 발생하기도 하니, 가능하면 인텔(Intel) NIC이 장착된 모델을 고르시는 게 좋아요. 특히 2.5GbE NIC에서 이런 문제가 불거지는 경우가 많더라고요.
    • BIOS(바이오스) 설정: 가상화 기능을 사용하려면 BIOS에서 VT-x (Virtualization Technology for x86) 또는 SVM(Secure Virtual Machine) 기능을 활성화해야 합니다. 이걸 깜빡하고 “왜 가상화가 안 되지?” 하며 시간을 보낸 적도 있네요. 😅

    📊 저전력 미니 서버 성능 실측 결과 및 비교

    이제 가장 중요한 벤치마크 결과입니다. 제가 측정한 데이터를 바탕으로 각 유형의 저전력 미니 서버가 어떤 성능 특성을 보였는지 정리해봤습니다. (수치 자체는 제가 직접 여러 번 테스트하고 종합한 경험적 데이터이므로, 절대적인 값이라기보다는 상대적인 성능 비교에 중점을 두었습니다.)

    구분 Intel N100 기반 Intel J4125/J5005 기반 Intel Core i3/i5 (저전력) 기반
    주요 특징 최신 아키텍처, 뛰어난 전성비, 저렴한 가격 오랜 기간 검증된 저전력, SATA 확장성 우수, 저렴 N100 대비 월등한 성능, 여전히 낮은 전력 소비
    CPU 성능 (상대적) ⭐⭐⭐ (가벼운 VM/컨테이너, 웹서버, DNS 등) ⭐⭐ (기본적인 NAS, 라우터, 모니터링) ⭐⭐⭐⭐⭐ (다수 VM, 미디어 서버, 개발 환경)
    RAM 확장성 최대 16GB (대부분 1개 슬롯) 최대 8GB (대부분 1개 슬롯) 최대 32GB/64GB (2개 슬롯)
    저장장치 확장성 NVMe 1개, SATA 1개 (일부 모델 2개) NVMe 1개, SATA 2~4개 (NAS용 강점) NVMe 1~2개, SATA 1~2개
    네트워크 1GbE 또는 2.5GbE (1~2개) 1GbE (1~2개) 2.5GbE (2개 이상)
    유휴 전력 소비 (W) 약 5~10W 약 8~15W 약 10~20W
    최대 부하 전력 소비 (W) 약 20~30W 약 25~35W 약 40~60W
    적합한 용도 가벼운 홈랩 서버, DNS, VPN, 웹 서버, Docker 호스트 저전력 NAS, pfSense/OpenWrt 라우터, CCTV NVR 고성능 NAS, 미디어 서버(Plex), 개발/테스트 VM, 다수 서비스 호스팅

    제 경험으로는 Intel N100은 정말 기대 이상이었어요. 가벼운 웹 서버 몇 개, PostgreSQL 같은 데이터베이스, 그리고 Pi-hole 같은 DNS 서버를 Docker 컨테이너로 돌리는데 전혀 문제가 없었거든요. 심지어 Plex 미디어 서버에서 가벼운 트랜스코딩 작업(720p~1080p SDR)도 무리 없이 처리하더라고요. 전성비(Performance per Watt)는 단연 최고였습니다. 하지만 동시에 여러 개의 VM을 돌리거나, 4K 트랜스코딩 같은 고부하 작업에는 한계가 명확했습니다.

    구형 J4125/J5005 기반 시스템들은 NAS 용도로는 여전히 매력적이에요. 특히 SATA 포트가 넉넉하게 제공되는 모델들이 많아서 여러 개의 HDD를 연결하기 좋거든요. 하지만 CPU 성능은 N100보다 확실히 밀리는 감이 있어서, 가상화보다는 단순 파일 서버나 라우터(Router) 같은 단일 목적 서버에 더 적합하다고 느꼈습니다.

    마지막으로 저전력 Core i3/i5 기반 미니PC는 말 그대로 “성능이 필요한데 전력도 포기 못 하는” 분들을 위한 완벽한 대안이었어요. N100으로는 부족했던 고사양 VM이나 복잡한 개발 환경, 여러 명이 동시에 접속하는 Plex 서버 등에는 이쪽이 훨씬 쾌적했거든요. 물론 N100보다는 전기를 더 먹지만, 데스크탑 CPU에 비하면 여전히 착한 수준이었습니다.

    저전력 미니 서버 3가지 유형의 성능, 전력, 확장성, 용도를 비교한 인포그래픽

    세 가지 유형의 저전력 미니 서버를 성능, 전력, 확장성, 적합한 용도 측면에서 비교한 요약 인포그래픽입니다.

    🎉 마무리: 나에게 맞는 저전력 미니 서버는?

    결론적으로, 저전력 미니 서버는 홈랩 환경에서 전력 소비와 소음 문제를 해결해 줄 수 있는 아주 훌륭한 대안입니다. 어떤 것을 선택할지는 여러분의 주요 사용 목적과 예산에 달려 있어요.

    • 가성비를 최우선으로, 가벼운 서비스 위주로 홈랩을 운영하고 싶다면?
      ✅ Intel N100 기반 미니PC를 강력 추천합니다. 대부분의 기본적인 홈랩 서비스(DNS, VPN, 웹서버, Docker 컨테이너)는 충분히 소화해낼 거예요.
    • 데이터 저장 공간을 최우선으로, 안정적인 NAS 구축이 필요하다면?
      ✅ SATA 포트 확장성이 좋은 구형 J4125/J5005 기반 저전력 미니PC나, 혹은 최근 N100 중에서도 SATA 포트가 여유로운 모델을 찾아보는 것도 좋은 방법입니다.
    • N100으로는 부족한 고성능 VM, 미디어 트랜스코딩, 개발 환경 등 다목적 활용이 필요하다면?
      ✅ 조금 더 예산을 투자해서 Intel Core i3/i5 저전력 버전 미니PC를 고려해 보세요. 만족도가 훨씬 높을 겁니다.

    저도 처음엔 “이 작은 게 얼마나 하겠어?” 싶었는데, 실제로 써보니까 요즘 미니PC들이 정말 똑똑하게 잘 나온다는 것을 느꼈어요. 여러분도 자신의 워크로드(Workload)를 잘 파악해서 현명한 선택을 하시길 바랍니다. 다음 글에서는 특정 미니 서버에 TrueNAS Scale을 설치하고 최적화하는 과정에 대해 더 자세히 다뤄보도록 하겠습니다. 기대해주세요! 궁금한 점이 있다면 언제든지 댓글로 남겨주세요. 제가 아는 선에서 성심성의껏 답변해 드리겠습니다. 😊

  • [Proxmox] Proxmox LXC 컨테이너 vs VM: 홈랩 환경 최적화 비교 분석

    [Proxmox] Proxmox LXC 컨테이너 vs VM: 홈랩 환경 최적화 비교 분석

    [Proxmox] Proxmox LXC 컨테이너 vs VM: 홈랩 환경 최적화 비교 분석

    안녕하세요, 13년차의 서버실 주인장입니다. 홈랩을 운영하면서 가장 많이 고민하는 부분 중 하나가 바로 가상화 환경 최적화일 겁니다. 특히 Proxmox VE를 사용하시는 분들이라면, LXC 컨테이너 (Linux Container)를 써야 할지, 아니면 전통적인 가상머신 (VM, Virtual Machine)을 써야 할지 많이들 헷갈리실 텐데요. 저도 처음엔 Proxmox LXC 컨테이너가 뭔지 제대로 몰라서 이것저것 다 깔아보고 삽질 좀 했습니다. 😅

    이번 글에서는 제가 직접 써보고 경험했던 Proxmox LXC 컨테이너와 VM의 차이점, 장단점, 그리고 어떤 상황에서 무엇을 선택해야 할지 자세히 비교 분석해 드릴게요. 홈랩 자원을 효율적으로 사용하고 싶은 분들에게 멘토처럼 길잡이가 되어드리겠습니다!

    Proxmox VE 환경에서 LXC 컨테이너와 VM이 동작하는 방식을 시각적으로 나타낸 다이어그램입니다.

    Proxmox VE, VM, LXC 컨테이너: 기본 개념 잡기

    본격적인 비교에 앞서, 핵심 개념들을 간단하게 짚고 넘어갈게요. 이미 잘 아시는 분들도 있겠지만, 혹시나 헷갈리실 분들을 위해 쉽게 설명해 드리겠습니다.

    • Proxmox VE (Virtual Environment): 쉽게 말해 서버 한 대를 마치 여러 대의 컴퓨터처럼 쪼개서 쓸 수 있게 해주는 운영체제입니다. KVM(Kernel-based Virtual Machine)과 LXC(Linux Containers) 기술을 기반으로 Proxmox LXC 컨테이너와 가상화 환경을 통합 관리할 수 있게 도와주죠. 웹 인터페이스가 정말 편하더라고요!

    • 가상머신 (VM, Virtual Machine): 물리적인 컴퓨터 위에 완전히 독립적인 또 다른 가상 컴퓨터를 만드는 방식입니다. 운영체제(OS)부터 커널(Kernel)까지 모두 독립적으로 가집니다. 마치 서버 안에 또 다른 서버를 통째로 심는다고 생각하시면 됩니다. 오버헤드 (Overhead)가 좀 있지만, 완벽한 격리(Isolation)와 유연성을 제공합니다.

    • LXC 컨테이너 (Linux Container): VM과 달리 호스트 운영체제의 커널을 공유합니다. 운영체제를 통째로 가상화하는 것이 아니라, 애플리케이션 실행에 필요한 환경만 격리하여 제공하는 방식이죠. Proxmox LXC 컨테이너는 VM보다 훨씬 가볍고 빠르게 시작하며, 리소스 사용 효율이 뛰어나다는 장점이 있습니다. Docker 컨테이너와 비슷하지만, LXC는 좀 더 시스템 레벨의 가상화에 가깝습니다.

    LXC 컨테이너 vs VM: 핵심 차이점 비교

    이제 두 가상화 기술의 핵심 차이점을 표로 정리해서 한눈에 비교해볼까요? 제가 홈랩에서 Proxmox LXC 컨테이너와 VM을 직접 써보면서 느꼈던 점들을 바탕으로 정리해봤습니다.

    특징 LXC 컨테이너 (Linux Container) 가상머신 (VM, Virtual Machine)
    커널 공유 여부 호스트 OS 커널 공유 독립적인 커널 사용
    자원 오버헤드 매우 낮음 (경량) 상대적으로 높음 (무겁고 완전한 가상화)
    부팅 속도 매우 빠름 (초 단위) 느림 (OS 부팅 시간 필요)
    격리 수준 낮음 (호스트 커널 공유로 인한 잠재적 보안 이슈) 높음 (완전한 격리, 보안성 우수)
    운영체제 유연성 Linux 기반 OS만 가능 (호스트와 동일한 커널) Windows, macOS, Linux 등 모든 OS 가능
    스냅샷/백업 빠르고 가벼움 상대적으로 느리고 무거움
    하드웨어 패스스루 제한적 (GPU 등) 우수 (GPU, USB 등 다양한 장치)
    사용 사례 Docker 호스팅, 웹 서버, DB, 특정 서비스 (자원 효율 중시) Windows 게스트, 복잡한 네트워크, 보안 중요 서비스, GPU 활용

    실전 구현: Proxmox에서 LXC 컨테이너 만들기

    이제 실제로 Proxmox에서 LXC 컨테이너를 한번 만들어볼까요? 웹 UI에서도 쉽게 할 수 있지만, CLI (Command Line Interface)로 하는 것도 알아두면 좋습니다. 저는 개인적으로 CLI로 Proxmox LXC 컨테이너를 익숙해지는 걸 추천합니다. 자동화할 때 훨씬 편하거든요. 💡

    1. 템플릿 다운로드: LXC는 미리 만들어진 템플릿(Template)을 사용합니다. Ubuntu 22.04 LTS 템플릿을 받아볼게요.

      pveam update
      pveam available --section system
      pveam download local ubuntu-22.04-standard_22.04-1_amd64.tar.zst

      local은 저장소 이름입니다. 여러분의 Proxmox 저장소 이름에 맞게 변경해주세요.

    2. 컨테이너 생성: 이제 다운로드한 템플릿으로 Proxmox LXC 컨테이너를 생성합니다. CT ID는 고유한 번호입니다. 저는 101번으로 지정했어요.

      pct create 101 local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst \
        --hostname my-lxc-server \
        --rootfs local-lvm:8 \
        --memory 1024 --swap 512 \
        --cores 2 \
        --net0 name=eth0,bridge=vmbr0,ip=192.168.1.101/24,gw=192.168.1.1 \
        --unprivileged 1 --onboot 1 \
        --password your_secure_password
      • local-lvm:8: local-lvm 저장소에 8GB 디스크 할당
      • vmbr0: Proxmox 기본 브릿지 네트워크
      • --unprivileged 1: 비특권 컨테이너로 생성 (보안에 유리, 강력 추천!)
    3. 컨테이너 시작: 생성 후 바로 시작합니다.

      pct start 101
    4. 컨테이너 접속: SSH나 Proxmox 콘솔로 접속해서 설정하면 됩니다.

      ssh [email protected]

    Proxmox 웹 인터페이스에서 LXC 컨테이너가 성공적으로 생성되고 실행 중인 모습을 보여주는 화면입니다.

    실전 구현: Proxmox에서 가상머신 (VM) 만들기

    이번에는 VM을 만들어볼까요? VM은 OS 이미지 (ISO 파일)를 직접 설치해야 해서 LXC 컨테이너보다 손이 좀 더 갑니다. 그래도 그만큼 유연하죠.

    1. ISO 이미지 업로드: Ubuntu Server 22.04 LTS ISO 파일을 Proxmox ISO 저장소에 업로드합니다. 웹 UI의 데이터센터 > 저장소 > local > ISO 이미지에서 할 수 있습니다.

    2. VM 생성: CLI로도 가능하지만, VM은 웹 UI에서 생성하는 게 훨씬 직관적입니다. 생성 (Create VM) 버튼을 클릭해서 아래와 같이 설정해줍니다.

      • 일반 (General): 노드, VM ID (예: 201), 이름 (예: my-vm-server)
      • OS: 아까 업로드한 Ubuntu Server 22.04 LTS ISO 선택
      • 시스템 (System): 그래픽 카드 (기본값), SCSI 컨트롤러 (VirtIO SCSI 추천)
      • 하드 디스크 (Hard Disk): 저장소, 디스크 크기 (예: 32GB), 캐시 (Write-back 추천)
      • CPU: 코어 수 (예: 4), 소켓 수 (예: 1), 타입 (host 추천)
      • 메모리 (Memory): RAM (예: 4096MB)
      • 네트워크 (Network): 브릿지 (vmbr0), 모델 (VirtIO 추천)
    3. OS 설치: 생성된 VM을 시작하고, Proxmox 콘솔에 접속해서 일반적인 OS 설치 과정처럼 Ubuntu Server를 설치합니다. 이 과정은 일반적인 물리 서버에 OS를 설치하는 것과 동일합니다.

    ⚠️ 주의사항/트러블슈팅: 삽질 기록! (네트워크 설정, 자원 관리)

    제가 홈랩에서 가장 많이 겪었던 삽질 중 하나가 바로 네트워크 설정과 자원 관리였습니다. 특히 Proxmox LXC 컨테이너에서요.

    • LXC 컨테이너 내부 Docker 문제: 처음엔 Proxmox LXC 컨테이너 안에 Docker를 설치해서 사용하려고 했어요. 근데 이게 웬걸, systemctl start docker를 하면 자꾸 에러가 나는 겁니다. 찾아보니 비특권 컨테이너 (Unprivileged Container)에서 Docker를 제대로 사용하려면 nesting 옵션을 활성화해야 하더라고요. 아니면 cgroup v2 관련 문제일 수도 있고요. 이 부분에서 꽤 많은 시간을 보냈습니다. 해결책은 컨테이너 설정 파일(/etc/pve/lxc/101.conf)에 lxc.apparmor.profile: unconfined와 lxc.cgroup.devices.allow: a *:* rwm, 그리고 features: nesting=1을 추가하는 방법이 있었습니다. 물론 보안상 권장되는 방법은 아니니 신중하게 접근해야 합니다. ✅

      # /etc/pve/lxc/101.conf 예시
      arch: amd64
      cores: 2
      hostname: my-lxc-server
      memory: 1024
      net0: name=eth0,bridge=vmbr0,ip=192.168.1.101/24,gw=192.168.1.1,type=veth
      rootfs: local-lvm:8
      swap: 512
      mp0: /dev/sdb,mp=/mnt/data,size=10G # 추가적인 마운트 포인트 예시
      # Docker in LXC를 위한 설정 (주의해서 사용)
      features: nesting=1
      # lxc.apparmor.profile: unconfined # 비특권 컨테이너에는 보통 필요 없음. 특권 컨테이너에서 사용
      # lxc.cgroup.devices.allow: a *:* rwm # 특정 시나리오에서 필요
    • 네트워크 브릿지 오설정: Proxmox의 vmbr0 같은 네트워크 브릿지를 잘못 설정하면 외부 통신이 안 되거나, LXC 컨테이너나 VM끼리 통신이 안 되는 경우가 많습니다. 특히 홈랩에서 여러 VLAN을 사용하거나, 특정 네트워크 인터페이스를 VM에 직통으로 연결(패스스루)할 때 헷갈리곤 합니다. 항상 /etc/network/interfaces 파일을 꼼꼼히 확인하고, 변경 후에는 systemctl restart networking 또는 Proxmox 호스트 재부팅을 해줘야 합니다.

    • 자원 오버커밋 (Overcommit): Proxmox LXC 컨테이너는 자원을 유연하게 쓸 수 있어서 오버커밋하기 쉽습니다. 예를 들어, 물리 RAM이 16GB인데 LXC 컨테이너들에 총 20GB를 할당하는 식이죠. 짧게는 문제가 없지만, 모든 컨테이너가 동시에 많은 자원을 사용하면 Proxmox 호스트 전체가 느려지거나 멈출 수도 있습니다. 항상 실제 사용량을 모니터링하면서 적절히 할당하는 것이 중요합니다.

    성능 및 리소스 사용량 검증

    컨테이너와 VM을 만들었다면, 실제로 얼마나 리소스를 사용하는지 확인해봐야겠죠? 저는 주로 Proxmox 웹 UI의 그래프나 SSH로 접속해서 htop, free -h, df -h 같은 명령어로 확인합니다.

    제 경험상, 동일한 워크로드(예: 웹 서버 하나)를 Proxmox LXC 컨테이너와 VM에 올려보면, LXC 컨테이너가 훨씬 적은 RAM과 CPU를 사용하더라고요. 부팅 시간은 비교할 수 없을 정도로 LXC가 압도적이고요. 이 덕분에 저는 홈랩에서 대부분의 서비스를 LXC 컨테이너로 돌리고 있습니다. 자원 효율성 정말 최고예요! 🎉

    Proxmox VE 대시보드에서 LXC 컨테이너와 VM의 CPU 및 RAM 사용량을 비교하는 시각화된 그래프입니다.

    어떤 것을 선택해야 할까? (결론 및 제언)

    자, 그럼 이제 여러분의 홈랩 환경에 어떤 가상화 기술이 더 적합할지 정리해볼 시간입니다. 제가 13년 동안 삽질하며 내린 결론은 이렇습니다.

    • Proxmox LXC 컨테이너 (추천):

      • 자원 효율성이 최우선일 때: RAM, CPU가 제한적인 홈랩 환경에서 많은 서비스를 돌리고 싶다면 LXC 컨테이너가 정답입니다.
      • 리눅스 기반 서비스 위주: 웹 서버(Nginx, Apache), 데이터베이스(MySQL, PostgreSQL), Docker 호스팅, 파이썬 스크립트 실행 등 리눅스 기반의 애플리케이션을 돌릴 때 Proxmox LXC 컨테이너는 매우 효과적입니다.
      • 빠른 배포 및 테스트 환경: 새로운 서비스를 빠르게 띄우고 테스트하고 싶을 때 LXC 컨테이너만큼 좋은 게 없더라고요.
    • 가상머신 (VM) (추천):

      • 운영체제 유연성 필요: Windows나 다른 리눅스 배포판 (Proxmox 호스트와 다른 커널 버전)이 필요한 경우.
      • 높은 보안/격리 수준 요구: 중요 서비스나 외부와 직접 통신해야 하는 서비스처럼 완벽한 격리가 필요할 때 VM이 더 안전합니다.
      • 하드웨어 패스스루: GPU, USB 컨트롤러 등 특정 물리 하드웨어를 VM에 직접 연결해야 할 때 (예: 미디어 서버, 게임 서버).
      • 레거시 시스템: 오래된 OS나 특정 하드웨어에 의존하는 시스템을 돌려야 할 때 VM이 유일한 선택일 수 있습니다.

    제 홈랩에서는 대부분의 서비스는 Proxmox LXC 컨테이너로 돌리고, Windows나 특별한 하드웨어 패스스루가 필요한 경우에만 VM을 사용합니다. 예를 들어, 저는 Plex 미디어 서버는 VM으로 돌려서 GPU 트랜스코딩을 패스스루하고, Pi-hole이나 Home Assistant 같은 서비스는 LXC 컨테이너로 돌려서 자원을 아끼고 있습니다. 이렇게 섞어서 쓰는 게 가장 효율적이더라고요! 💡

    Proxmox 환경에서 LXC와 VM을 어떤 시나리오에서 선택하는 것이 좋은지 시각적으로 요약한 인포그래픽입니다.

    마무리: 배운 점 정리 및 다음 단계 제안

    오늘은 Proxmox VE 환경에서 LXC 컨테이너와 가상머신 (VM)을 비교 분석하고, 각각의 실전 구현 방법과 제가 겪었던 삽질 경험까지 솔직하게 공유해드렸습니다. 핵심은 각 기술의 장단점을 이해하고, 여러분의 홈랩 목적과 자원 상황에 맞춰 Proxmox LXC 컨테이너와 VM을 적절히 선택하는 것입니다.

    Proxmox LXC 컨테이너는 가볍고 빠르며 자원 효율성이 뛰어나 홈랩에 최적화된 선택지가 될 수 있습니다. 반면 VM은 높은 격리 수준과 운영체제 유연성을 제공하여 특정 목적에 더욱 강력한 대안이 됩니다. 여러분의 홈랩이 더욱 강력하고 효율적으로 운영되기를 바랍니다!

    다음 글에서는 Proxmox에서 ZFS 파일 시스템을 활용하여 스냅샷과 데이터 무결성을 어떻게 관리하는지 자세히 다뤄볼 예정입니다. 기대해주세요! 😄

    Proxmox VE 로고와 함께 LXC 컨테이너 및 VM 아이콘이 조화롭게 배치된 마무리 이미지입니다.

  • [Proxmox] Proxmox Backup Server (PBS) 완벽 가이드: 설치부터 백업/복구 전략까지

    [Proxmox] Proxmox Backup Server (PBS) 완벽 가이드: 설치부터 백업/복구 전략까지

    [Proxmox] Proxmox Backup Server (PBS) 완벽 가이드: 설치부터 백업/복구 전략까지

    13년차 인프라 엔지니어의 Proxmox Backup Server (PBS) 삽질 & 활용기

    안녕하세요, 13년차 서버실 지킴이입니다. 오늘은 Proxmox Backup Server (PBS), 줄여서 PBS에 대한 이야기를 해보려고 합니다. 사실 인프라 엔지니어에게 백업(Backup)은 아무리 강조해도 지나치지 않은 핵심 업무 중 하나잖아요? 저도 수많은 시스템을 운영하면서 “아차!” 싶었던 순간이 한두 번이 아니었습니다. 특히 홈랩에서 Proxmox VE(Virtual Environment)를 쓰면서 가상 머신(VM)이나 컨테이너(Container) 백업이 늘 고민이었는데, 이 PBS를 만나고 나서 드디어 마음의 평화를 찾았지 뭐예요? 🎉

    Proxmox VE를 사용하시는 분들이라면 기본적으로 제공되는 백업 기능도 꽤 유용하다는 걸 아실 거예요. 근데 이게 스케일이 커지거나, 데이터 중복 제거(Deduplication)나 증분 백업(Incremental Backup) 같은 고급 기능이 필요해지면 한계에 부딪히거든요. 그때 PBS가 진가를 발휘합니다. 오늘은 제가 직접 PBS를 설치하고, Proxmox VE와 연동해서 백업/복구 전략까지 세워본 경험을 솔직하게 공유해 드릴게요. 삽질 과정과 해결 팁도 아낌없이 풀어놓을 테니, 끝까지 함께해 주시면 분명 큰 도움이 되실 겁니다!

    Proxmox Backup Server의 전체 아키텍처는 Proxmox VE에서 PBS로 데이터를 보내고, PBS가 중복 제거 및 압축하여 백업 스토리지에 저장하는 과정을 시각적으로 보여줍니다.

    Proxmox Backup Server (PBS)란 무엇인가요?

    Proxmox Backup Server (PBS)는 Proxmox VE 환경에 최적화된 엔터프라이즈급 백업 솔루션입니다. 쉽게 말해, Proxmox VE 위에 돌아가는 수많은 VM이나 컨테이너의 데이터를 효율적으로 저장하고 관리하기 위해 태어난 녀석이라고 보시면 됩니다. 단순히 데이터를 복사해서 저장하는 것을 넘어, 여러 가지 똑똑한 기능들을 제공하죠.

    • 데이터 중복 제거 (Deduplication): 이게 PBS의 가장 강력한 기능 중 하나인데요. 동일한 데이터 블록이 여러 백업 이미지에 존재하더라도, PBS는 딱 한 번만 저장하고 나머지는 참조만 합니다. 덕분에 저장 공간을 엄청나게 절약할 수 있어요. 제가 직접 써보니, 특히 비슷한 OS 이미지로 여러 VM을 돌릴 때 그 효과가 대단하더라고요!
    • 증분 백업 (Incremental Backup): 첫 백업 이후에는 변경된 데이터 블록만 백업합니다. 이는 백업 시간을 단축시키고, 다시 한 번 저장 공간 효율성을 높여줍니다.
    • 데이터 무결성 검증 (Data Integrity Verification): 백업된 데이터가 손상되지 않았는지 정기적으로 검사할 수 있습니다. 백업은 저장하는 것만큼 ‘제대로 저장되었는지’ 확인하는 게 중요하잖아요? 이 기능 덕분에 안심하고 데이터를 맡길 수 있습니다.
    • 클라이언트-사이드 암호화 (Client-side Encryption): 백업 데이터는 클라이언트(Proxmox VE)에서 암호화되어 PBS로 전송됩니다. 덕분에 민감한 데이터도 안전하게 보관할 수 있죠.
    • 원격 동기화 (Remote Sync): 백업 데이터를 다른 PBS 서버로 동기화할 수 있어, 재해 복구(Disaster Recovery) 전략을 수립하는 데 아주 유용합니다.

    처음엔 그냥 NAS에 백업하면 되지 않나 싶었는데, PBS의 이런 기능들을 경험하고 나니 왜 전용 백업 솔루션이 필요한지 절실히 깨달았네요. 특히 중복 제거는 진짜 혁명적입니다. 💡

    Proxmox Backup Server 설치하기

    자, 그럼 이제 본격적으로 PBS를 설치해 볼까요? 저는 별도의 물리 서버나 가상 머신에 Proxmox Backup Server ISO 파일을 이용해서 설치하는 방법을 선호합니다. 안정적이고 깔끔하거든요. 여기서는 ISO를 이용한 설치 과정을 간략하게 설명해 드릴게요. (Proxmox VE 위에 컨테이너로 설치하는 방법도 있지만, 안정성을 위해 전용 OS 설치를 추천합니다.)

    1. ISO 다운로드 및 부팅: Proxmox 공식 웹사이트에서 PBS ISO 이미지를 다운로드하고, USB에 굽거나 VM에 마운트하여 부팅합니다.
    2. 설치 마법사 진행: 부팅 후 나타나는 설치 마법사를 따라 진행합니다.
      • Target Harddisk (대상 하드디스크): PBS가 설치될 디스크를 선택합니다. 저는 보통 OS용으로 작은 SSD 하나, 백업 데이터 저장용으로 큰 HDD/SSD를 따로 구성합니다.
      • Country (국가), Time zone (시간대): 대한민국, 서울을 선택해 줍니다.
      • Root Password (루트 비밀번호) & Email address (이메일 주소): 관리자 비밀번호를 설정하고, 알림을 받을 이메일 주소를 입력합니다.
      • Management Network Configuration (네트워크 설정): IP 주소, 넷마스크, 게이트웨이, DNS 서버를 설정합니다. 나중에 Proxmox VE에서 접근해야 하니, 고정 IP로 설정하는 것이 좋습니다.
    3. 설치 완료 및 재부팅: 모든 설정이 끝나면 설치가 시작되고, 완료되면 재부팅하라는 메시지가 나옵니다. 재부팅 후에는 웹 인터페이스에 접속할 수 있습니다.

    웹 인터페이스는 https://[PBS 서버 IP]:8007로 접속할 수 있습니다. 사용자 이름은 root이고, 비밀번호는 설치 시 설정한 비밀번호를 사용하면 됩니다. 처음 접속하면 왠지 모르게 뿌듯하더라고요! 🎉

    Proxmox Backup Server 웹 인터페이스에 로그인한 후의 대시보드 화면입니다. 시스템 상태와 저장소 현황을 한눈에 확인할 수 있습니다.

    Proxmox VE와 PBS 연동하기

    PBS를 설치했으니, 이제 Proxmox VE에서 이 녀석을 백업 저장소로 추가해야겠죠? 이 과정도 정말 간단합니다.

    1. Proxmox VE 웹 인터페이스 접속: 평소처럼 Proxmox VE 웹 관리 화면에 로그인합니다.
    2. 데이터센터(Datacenter) > 스토리지(Storage) 이동: 왼쪽 메뉴에서 Datacenter를 클릭하고, 그 아래의 Storage 탭으로 이동합니다.
    3. ‘추가(Add)’ 버튼 클릭 > ‘Proxmox Backup Server’ 선택: ‘Add’ 드롭다운 메뉴에서 ‘Proxmox Backup Server’를 선택합니다.
    4. 정보 입력: 다음 정보를 입력해 줍니다.
      • ID: 이 저장소의 이름을 지정합니다. (예: pbs-backup-storage)
      • Server: PBS 서버의 IP 주소 또는 도메인 이름을 입력합니다.
      • Username: root@pam (PBS의 기본 관리자 계정)
      • Password: PBS 설치 시 설정한 root 비밀번호
      • Datastore: PBS에서 생성된 데이터스토어 이름을 입력합니다. 기본값은 datastore1입니다. (PBS 웹 인터페이스의 ‘Datastore’ 메뉴에서 확인할 수 있습니다.)
      • Fingerprint (지문): PBS 서버의 SSH 지문입니다. 처음 연결할 때 자동으로 채워지거나, PBS 웹 인터페이스에서 확인할 수 있습니다. 보안을 위해 꼭 확인해 주세요.
    5. ‘추가(Add)’ 버튼 클릭: 모든 정보를 입력하고 ‘Add’ 버튼을 누르면 끝!

    제대로 연결되었다면, Proxmox VE의 스토리지 목록에 PBS가 나타나고, ‘Status’가 ‘Active’로 표시될 거예요. 이제 Proxmox VE의 VM이나 컨테이너를 백업할 때, 대상 저장소로 PBS를 선택할 수 있게 됩니다. ✅

    Proxmox VE에 Proxmox Backup Server를 스토리지로 추가하는 설정 화면입니다. Server IP, Username, Datastore 등의 정보를 입력하는 창이 보입니다.

    백업 전략 수립 및 실행

    저장소를 연결했으니, 이제 어떤 VM을 언제, 어떻게 백업할지 전략을 세울 차례입니다. Proxmox VE에서는 백업 스케줄을 아주 유연하게 설정할 수 있습니다.

    1. Datacenter > Backup (백업) 메뉴 이동: Proxmox VE 웹 인터페이스에서 ‘Datacenter’를 클릭하고 ‘Backup’ 탭으로 이동합니다.
    2. ‘Add (추가)’ 버튼 클릭: 새로운 백업 작업을 생성합니다.
    3. 백업 작업 설정:
      • Storage (저장소): 방금 추가한 PBS 저장소를 선택합니다. (예: pbs-backup-storage)
      • Schedule (스케줄): 백업이 실행될 시간을 설정합니다. 매일 새벽 2시, 매주 일요일 자정 등 원하는 대로 설정할 수 있습니다. (예: daily, weekly)
      • VMs (VM 선택): 백업할 VM이나 컨테이너를 선택합니다. ‘All’을 선택하거나 특정 VM ID를 지정할 수 있습니다.
      • Mode (모드): Snapshot을 선택하는 것이 일반적입니다. (VM이 실행 중인 상태에서 일관성 있는 백업을 생성할 수 있습니다.)
      • Compression (압축): 백업 데이터의 압축 방식을 선택합니다. 저는 보통 Zstandard (ZSTD)를 사용합니다. 빠르고 효율적이거든요.
      • Retention (보존 정책): 백업본을 얼마나 오래 보관할지 설정합니다. 예를 들어, ‘Keep last 7’로 설정하면 최근 7개의 백업본만 유지하고 오래된 것은 자동으로 삭제됩니다. 이 정책은 데이터스토어 용량 관리에도 아주 중요합니다.
      • Email notification (이메일 알림): 백업 성공/실패 여부를 이메일로 받아볼 수 있습니다. 중요한 기능이니 꼭 설정해 두세요!
    4. ‘Create (생성)’ 버튼 클릭: 백업 작업이 생성됩니다.

    이렇게 설정해두면, 정해진 시간에 PBS로 자동 백업이 진행됩니다. PBS 웹 인터페이스의 ‘Tasks’ 메뉴나 Proxmox VE의 ‘Task Log’에서 백업 진행 상황을 확인할 수 있습니다. 처음 백업이 성공했을 때의 그 쾌감이란! 💪

    데이터 복구, 이젠 걱정 마세요!

    백업은 언제나 ‘만약의 사태’를 대비하는 것이죠. 가장 중요한 건 백업된 데이터를 성공적으로 복구(Restore)할 수 있느냐입니다. PBS는 복구 과정도 직관적이고 빠릅니다.

    1. Proxmox VE 웹 인터페이스 접속: 복구할 VM이 있던 Proxmox VE 노드에 접속합니다.
    2. VM 선택 및 ‘백업(Backup)’ 탭 이동: 복구할 VM을 선택한 다음, ‘Backup’ 탭으로 이동합니다.
    3. 복구할 백업본 선택: PBS에 저장된 백업 목록이 나타납니다. 복구하고자 하는 특정 날짜와 시간의 백업본을 선택합니다.
    4. ‘복원(Restore)’ 버튼 클릭: 복원 옵션 대화 상자가 나타납니다.
      • Storage (저장소): 복원될 VM의 디스크가 저장될 Proxmox VE 스토리지(예: local-lvm)를 선택합니다.
      • VM ID: 기존 VM ID로 복원하거나, 새로운 VM ID를 지정하여 복원할 수 있습니다. 기존 VM이 손상된 경우 같은 ID로 복원하고, 테스트 목적으로 복원할 경우 새로운 ID로 복원하는 것이 일반적입니다.
      • Overwrite (덮어쓰기): 기존 VM이 있을 경우 덮어쓸지 여부를 결정합니다. 주의해서 사용해야 합니다!
    5. ‘복원(Restore)’ 버튼 클릭: 복구가 시작됩니다.

    복구 작업이 완료되면, 해당 VM이 Proxmox VE 목록에 나타나고, 정상적으로 부팅되는 것을 확인할 수 있습니다. 제가 실제로 몇 번 복구 테스트를 해봤는데, 정말 빠르고 안정적이더라고요. 특히 중복 제거 덕분에 복구 시간도 단축되는 느낌이었습니다. 👏

    ⚠️ 삽질 경험 & 트러블슈팅 팁

    제가 PBS를 사용하면서 겪었던 몇 가지 삽질 경험과 그 해결 팁을 공유해 드릴게요. 여러분은 저처럼 고생하지 마시라고요! ㅎㅎ

    • 방화벽 문제: Proxmox VE와 PBS가 서로 통신하려면 8007번 포트가 열려있어야 합니다. PBS 서버에 UFW(Uncomplicated Firewall)나 다른 방화벽이 설치되어 있다면, 꼭 8007번 포트를 허용해 주세요.
      sudo ufw allow 8007/tcp
      sudo ufw enable
      sudo ufw status
      

      저는 처음에 포트 열어주는 걸 깜빡해서 “왜 연결이 안 되지?” 하고 한참 헤맸거든요. 😅

    • Datastore(데이터스토어) 설정 오류: PBS 설치 후 Datastore를 생성하지 않거나, Proxmox VE에서 입력하는 Datastore 이름이 PBS의 Datastore 이름과 다르면 연결이 안 됩니다. PBS 웹 인터페이스에서 ‘Datastore’ 메뉴를 확인하고 정확한 이름을 입력해야 합니다. 기본값은 datastore1이지만, 직접 이름을 바꿨다면 그 이름을 써야 해요.
    • 스토리지 용량 부족: 아무리 중복 제거가 뛰어나도 백업본이 쌓이면 결국 용량이 부족해집니다. PBS 웹 인터페이스에서 ‘Datastore’ > ‘Prune & GC’ 탭을 활용하여 가지치기(Prune)와 가비지 컬렉션(Garbage Collection) 스케줄을 설정해 주세요. Prune은 오래된 백업본을 삭제하는 정책이고, GC는 삭제된 데이터 블록을 실제로 정리해서 공간을 회수하는 작업입니다. 이걸 안 해주면 삭제된 백업본이 실제 공간을 계속 차지하고 있을 수 있습니다.
    • 네트워크 대역폭 문제: 동시에 여러 VM을 백업하거나, 대용량 VM을 백업할 경우 네트워크 대역폭이 충분하지 않으면 백업 시간이 엄청나게 길어질 수 있습니다. 1Gbps 네트워크 환경이라면 큰 문제가 없지만, 가능하다면 백업 전용 네트워크를 구성하거나 10Gbps 네트워크를 고려해볼 만합니다.

    Proxmox Backup Server의 주요 기능인 데이터 중복 제거, 압축, 암호화, 데이터 무결성 검증을 시각적으로 요약한 인포그래픽입니다.

    마무리하며: PBS, 인프라 엔지니어의 든든한 동반자

    오늘은 Proxmox Backup Server (PBS)에 대해 설치부터 Proxmox VE 연동, 백업/복구 전략, 그리고 제가 겪었던 삽질 경험까지 자세히 이야기해 드렸습니다. 13년차 인프라 엔지니어로서 여러 백업 솔루션을 경험해 봤지만, Proxmox 환경에서는 PBS만큼 효율적이고 안정적인 솔루션은 찾기 힘들다고 생각합니다.

    특히 데이터 중복 제거와 증분 백업 기능은 저장 공간을 아끼는 데 큰 도움이 되었고, 직관적인 웹 인터페이스 덕분에 관리도 정말 편했습니다. 여러분도 Proxmox VE를 사용하고 계시다면, PBS 도입을 적극적으로 고려해 보시길 강력히 추천합니다. 처음엔 좀 낯설게 느껴질 수도 있지만, 한 번 세팅해두면 든든한 백업 시스템이 될 거예요. 든든한 백업 시스템 구축으로 여러분의 소중한 데이터를 지켜내시길 바랍니다!

    다음번에는 PBS의 원격 동기화(Remote Sync) 기능을 활용한 재해 복구(DR) 전략에 대해 더 깊이 다뤄볼까 합니다. 기대해 주세요! 😉

  • [Proxmox] 스토리지 관리 완벽 가이드: ZFS, LVM, NFS, iSCSI 비교 및 최적화

    Proxmox 스토리지, 처음엔 저도 뭘 써야 할지 몰랐어요

    Proxmox VE를 처음 설치하고 VM(가상 머신)을 만들려는 순간, 스토리지 선택 화면에서 멈춰본 경험 있으신가요? ZFS, LVM, NFS, iSCSI… 이름만 봐도 머리가 살짝 아파오는 그 느낌. 저도 딱 그랬거든요. 처음 홈랩에 Proxmox를 올렸을 때, 그냥 기본값인 LVM으로 쭉 써왔는데 어느 날 VM 디스크가 꽉 차는 사고가 났고, 그때부터 스토리지 구조를 제대로 파고들기 시작했습니다.

    13년 넘게 인프라를 다루면서 느낀 건데, 스토리지 선택은 처음에 잘 해야 나중에 마이그레이션 삽질을 안 한다는 거예요. 이 글에서는 Proxmox 스토리지의 핵심 옵션인 ZFS, LVM, NFS, iSCSI를 실제 사용 경험을 바탕으로 비교해드리고, 각 상황에 맞는 최적화 팁까지 정리해보겠습니다.

    ▲ Proxmox VE의 스토리지 아키텍처 개요. 각 스토리지 타입이 VM/CT와 어떻게 연결되는지 한눈에 볼 수 있습니다.

    Proxmox 스토리지 기본 개념 이해하기

    본격적인 비교 전에 Proxmox 스토리지가 어떻게 동작하는지 간단히 짚고 넘어갈게요. 쉽게 말해서, Proxmox는 스토리지를 “어디에 VM 디스크 이미지를 저장할 것인가”의 관점으로 관리합니다.

    스토리지 타입 분류

    Proxmox의 스토리지는 크게 두 가지 방식으로 나뉩니다:

    • 로컬 스토리지 (Local Storage): 해당 Proxmox 노드에 직접 연결된 디스크. ZFS, LVM, Directory 등이 여기에 해당합니다
    • 공유 스토리지 (Shared Storage): 여러 Proxmox 노드가 동시에 접근 가능한 스토리지. NFS, iSCSI, Ceph 등이 여기에 해당하며, 클러스터 환경에서 라이브 마이그레이션(Live Migration)을 하려면 필수입니다

    이 차이가 왜 중요하냐면, 단일 노드 홈랩이냐 다중 노드 클러스터냐에 따라 선택지가 확 달라지거든요.

    ZFS (Z File System): 데이터 무결성의 끝판왕

    ZFS가 뭔가요?

    ZFS는 원래 Sun Microsystems에서 개발한 파일 시스템인데, 지금은 OpenZFS 프로젝트를 통해 Linux에서도 쓸 수 있어요. Proxmox는 ZFS를 네이티브로 지원하는 몇 안 되는 하이퍼바이저 중 하나고, 이게 Proxmox를 선택하는 이유 중 하나이기도 합니다.

    ZFS의 핵심 특징을 정리하면:

    • Copy-on-Write (CoW, 쓰기 시 복사): 데이터를 덮어쓰지 않고 새 위치에 씁니다. 덕분에 데이터 손상 위험이 확 줄어요
    • 스냅샷 (Snapshot): 거의 순간적으로 스냅샷을 생성할 수 있고, 공간도 효율적으로 씁니다
    • RAID-Z: 소프트웨어 RAID를 ZFS 레벨에서 처리. RAID-Z1(패리티 1), RAID-Z2(패리티 2) 등 선택 가능합니다
    • 데이터 체크섬 (Checksum): 모든 데이터 블록에 체크섬을 달아서 조용한 데이터 손상(Silent Corruption)을 감지하고 자동 복구합니다
    • ARC (Adaptive Replacement Cache): 메모리를 캐시로 적극 활용해서 읽기 성능을 높입니다

    Proxmox에서 ZFS 설정하기

    Proxmox 설치 시 ZFS를 선택하거나, 설치 후에도 추가할 수 있어요. 설치 후 추가하는 방법입니다:

    # ZFS 풀 생성 (미러 구성, 2개 디스크)
    zpool create -f rpool mirror /dev/sdb /dev/sdc
    
    # ZFS 풀 상태 확인
    zpool status
    
    # Proxmox에서 ZFS 스토리지 추가 (Web UI 대신 CLI로)
    pvesm add zfspool local-zfs --pool rpool --content images,rootdir
    # ZFS 성능 튜닝 - ARC 최대 크기 설정 (예: 8GB)
    echo 'options zfs zfs_arc_max=8589934592' > /etc/modprobe.d/zfs.conf
    update-initramfs -u
    
    # 현재 ARC 사용량 확인
    cat /proc/spl/kstat/zfs/arcstats | grep -E '^(size|c_max|hits|misses)'

    ZFS 사용 시 주의사항

    ⚠️ ZFS는 메모리를 많이 먹습니다. 일반적으로 스토리지 1TB당 1GB RAM이라는 가이드라인이 있는데, 홈랩 환경에서는 최소 8GB 이상 RAM을 권장해요. 저도 처음에 RAM 4GB짜리 서버에 ZFS 올렸다가 OOM(Out of Memory) 킬러가 작동하는 참사를 겪었습니다 ㅎㅎ.

    ⚠️ 절대로 ZFS 풀에 하드웨어 RAID 컨트롤러를 쓰지 마세요. ZFS는 디스크를 직접 제어해야 해서, HBA(Host Bus Adapter) 모드나 IT 모드의 컨트롤러를 써야 합니다. 하드웨어 RAID 위에 ZFS를 올리면 ZFS의 자가 복구 기능이 제대로 동작하지 않아요.

    LVM (Logical Volume Manager): 검증된 클래식

    LVM이 뭔가요?

    LVM(논리 볼륨 관리자)은 Linux에서 오랫동안 사용되어 온 스토리지 관리 방식이에요. 물리 디스크를 추상화해서 유연하게 관리할 수 있게 해줍니다. Proxmox 기본 설치 옵션이기도 하고요.

    LVM의 구조는 이렇습니다:

    • PV (Physical Volume, 물리 볼륨): 실제 디스크나 파티션
    • VG (Volume Group, 볼륨 그룹): PV를 묶은 논리적 풀
    • LV (Logical Volume, 논리 볼륨): VG에서 할당받은 실제 사용 공간

    Proxmox에서는 LVM-Thin(씬 프로비저닝)을 많이 쓰는데, 이게 핵심이에요. 씬 프로비저닝이란 VM에게 100GB를 할당했어도 실제로 데이터를 쓰는 만큼만 디스크를 사용하는 방식입니다. 공간 효율이 훨씬 좋더라고요.

    Proxmox에서 LVM-Thin 설정하기

    # 새 디스크를 PV로 초기화
    pvcreate /dev/sdb
    
    # VG 생성
    vgcreate vg-data /dev/sdb
    
    # LVM-Thin 풀 생성 (VG 용량의 95% 할당)
    lvcreate -l 95%FREE --thinpool thin-pool vg-data
    
    # Proxmox에 LVM-Thin 스토리지 추가
    pvesm add lvmthin local-lvm-thin --vgname vg-data --thinpool thin-pool --content images,rootdir
    
    # 상태 확인
    lvs -a --units g

    LVM vs LVM-Thin 차이

    항목 LVM (Thick) LVM-Thin
    공간 할당 즉시 전체 할당 사용한 만큼만 할당
    스냅샷 지원 (공간 소모 큼) 효율적 스냅샷 지원
    오버프로비저닝 불가 가능 (주의 필요)
    성능 안정적 약간의 오버헤드 있음
    복잡도 낮음 중간

    ⚠️ LVM-Thin에서 오버프로비저닝할 때는 실제 사용량을 꼭 모니터링해야 해요. 풀이 꽉 차면 VM들이 I/O 오류를 뱉으면서 난리가 납니다. 저도 이걸 한 번 경험하고 나서 Grafana로 LVM-Thin 사용량 알람을 걸어뒀거든요.

    ▲ Proxmox Web UI에서 LVM-Thin 스토리지 설정 화면. 씬 풀 사용량을 실시간으로 확인할 수 있습니다.

    NFS (Network File System): 공유 스토리지의 대명사

    NFS가 뭔가요?

    NFS(네트워크 파일 시스템)는 네트워크를 통해 파일 시스템을 공유하는 프로토콜이에요. 쉽게 말해서, NAS나 별도 서버의 디렉토리를 Proxmox에 마운트해서 스토리지로 쓰는 방식입니다.

    NFS의 장점:

    • 설정이 비교적 간단해요
    • 여러 Proxmox 노드가 동시에 접근 가능 → 라이브 마이그레이션 지원
    • 기존 NAS(Synology, QNAP 등)와 쉽게 연동됩니다
    • ISO 이미지, 백업 파일 저장에 적합합니다

    NFS의 단점:

    • 네트워크 의존성이 높음 (네트워크 장애 = 스토리지 장애)
    • 레이턴시(지연시간)가 로컬 스토리지보다 높아요
    • 고성능 VM 디스크용으로는 부적합한 경우가 많습니다

    Proxmox에서 NFS 설정하기

    # NFS 클라이언트 패키지 확인
    apt install nfs-common
    
    # NFS 마운트 테스트
    mount -t nfs 192.168.1.100:/volume1/proxmox /mnt/test-nfs
    
    # Proxmox Web UI 대신 CLI로 NFS 스토리지 추가
    pvesm add nfs nas-storage \
      --server 192.168.1.100 \
      --export /volume1/proxmox \
      --content iso,backup,images \
      --options vers=4.1
    
    # 추가된 스토리지 확인
    pvesm status

    💡 팁: NFS 버전은 가능하면 NFSv4.1을 쓰세요. NFSv3보다 안정성과 성능이 향상됐고, 특히 Proxmox 클러스터 환경에서 더 안정적으로 동작합니다.

    NFS 성능 최적화 옵션

    # /etc/fstab에 NFS 마운트 옵션 최적화
    192.168.1.100:/volume1/proxmox /mnt/nas-proxmox nfs \
      vers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 0 0
    
    # rsize/wsize: 읽기/쓰기 블록 크기 (1MB)
    # hard: 서버 응답 없으면 계속 재시도 (VM 안전을 위해 hard 권장)
    # timeo: 타임아웃 (1/10초 단위, 600 = 60초)

    iSCSI: 블록 스토리지를 네트워크로

    iSCSI가 뭔가요?

    iSCSI(아이스카시)는 SCSI 명령을 IP 네트워크를 통해 전달하는 프로토콜이에요. NFS가 “파일” 단위로 공유한다면, iSCSI는 “블록” 단위로 공유합니다. VM 입장에서 보면 마치 로컬 디스크가 연결된 것처럼 보여요.

    iSCSI 용어 정리:

    • Target (타깃): 스토리지를 제공하는 서버 (NAS, SAN 등)
    • Initiator (이니시에이터): 스토리지를 사용하는 클라이언트 (Proxmox 노드)
    • IQN (iSCSI Qualified Name): iSCSI 장치를 식별하는 고유 이름
    • LUN (Logical Unit Number): Target에서 제공하는 스토리지 단위

    Proxmox에서 iSCSI 설정하기

    # iSCSI initiator 패키지 설치
    apt install open-iscsi
    
    # iSCSI Target 검색 (NAS IP로)
    iscsiadm -m discovery -t sendtargets -p 192.168.1.100
    
    # 검색된 Target에 로그인
    iscsiadm -m node --login
    
    # 연결된 iSCSI 세션 확인
    iscsiadm -m session
    
    # Proxmox에 iSCSI 스토리지 추가
    pvesm add iscsi san-storage \
      --portal 192.168.1.100 \
      --target iqn.2023-01.com.example:storage \
      --content none
    
    # iSCSI 위에 LVM-Thin을 올려서 사용하는 게 일반적
    pvesm add lvmthin san-lvm-thin \
      --vgname san-vg \
      --thinpool san-thin-pool \
      --content images

    여기서 중요한 포인트! iSCSI는 단독으로는 Proxmox에서 VM 디스크로 직접 쓰기 어렵고, 보통 iSCSI로 블록 디바이스를 가져온 다음 그 위에 LVM이나 LVM-Thin을 올려서 사용해요. 저도 처음엔 이게 왜 이렇게 복잡한가 싶었는데, 블록 스토리지의 특성상 그렇게 써야 제대로 성능이 나오더라고요.

    4가지 스토리지 종합 비교

    항목 ZFS LVM-Thin NFS iSCSI+LVM
    유형 로컬 로컬 공유 (파일) 공유 (블록)
    스냅샷 ✅ 매우 효율적 ✅ 효율적 ⚠️ 제한적 ✅ LVM 스냅샷
    라이브 마이그레이션 ❌ 단일 노드 ❌ 단일 노드 ✅ 가능 ✅ 가능
    데이터 무결성 ✅ 최고 수준 ⚠️ 기본 수준 ⚠️ 네트워크 의존 ⚠️ 중간 수준
    성능 ✅ 높음 ✅ 높음 ⚠️ 네트워크 속도 의존 ✅ 높음
    설정 난이도 중간 낮음 낮음 높음
    RAM 요구량 높음 낮음 낮음 낮음
    추천 용도 단일 노드, 데이터 안전성 중시 단일 노드, 일반 VM ISO/백업, 소규모 클러스터 엔터프라이즈 클러스터

    ▲ Proxmox 스토리지 4종 비교 인포그래픽. 상황에 따라 적합한 스토리지 타입이 다릅니다.

    실제 구성 예시 및 최적화 팁

    홈랩 단일 노드 추천 구성

    제가 실제로 홈랩에서 쓰는 구성을 공유할게요:

    # /etc/pve/storage.cfg 예시 (실제 파일 위치)
    
    # 기본 로컬 디렉토리 (ISO, 백업용)
    dir: local
            path /var/lib/pve/local
            content iso,backup,snippets
    
    # ZFS 풀 (VM 디스크 메인)
    zfspool: local-zfs
            pool rpool/data
            content images,rootdir
            mountpoint /rpool/data
    
    # NFS (NAS 백업 및 ISO 라이브러리)
    nfs: nas-backup
            export /volume1/proxmox-backup
            path /mnt/pve/nas-backup
            server 192.168.1.100
            content backup,iso
            options vers=4.1

    ZFS 성능 최적화 핵심 설정

    # ZFS 레코드 크기 조정 (VM 디스크용 - 16K~64K 권장)
    zfs set recordsize=64K rpool/data
    
    # VM 특성에 따른 recordsize 조정
    # 데이터베이스 VM: 8K~16K
    # 일반 VM: 64K
    # 파일 서버 VM: 128K
    zfs set recordsize=16K rpool/data/vm-100-disk-0
    
    # 동기화 쓰기 설정 (성능과 안전성 트레이드오프)
    # sync=always: 가장 안전, 가장 느림
    # sync=standard: 기본값 (권장)
    # sync=disabled: 가장 빠름, 전원 손실시 데이터 손상 위험
    zfs set sync=standard rpool/data
    
    # 압축 활성화 (CPU 사용 약간 증가, 용량 절약)
    zfs set compression=lz4 rpool/data
    
    # 중복 제거 (dedup) - RAM 많이 필요, 신중하게 결정
    # 홈랩에선 웬만하면 끄는 걸 추천
    zfs set dedup=off rpool/data
    
    # ZFS 상태 및 통계 확인
    zpool status -v
    zfs list -t all
    zpool iostat -v 1

    iSCSI 멀티패스 (Multipath) 설정 — 고가용성 환경

    # multipath-tools 설치
    apt install multipath-tools
    
    # /etc/multipath.conf 기본 설정
    cat > /etc/multipath.conf << 'EOF'
    defaults {
        user_friendly_names yes
        find_multipaths yes
    }
    blacklist {
        devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
        devnode "^hd[a-z]"
    }
    EOF
    
    systemctl enable multipathd
    systemctl start multipathd
    multipath -ll  # 멀티패스 장치 확인

    트러블슈팅: 제가 겪은 문제들

    문제 1: ZFS 풀이 DEGRADED 상태

    # 증상 확인
    zpool status
    # 출력에서 state: DEGRADED 확인
    
    # 디스크 교체 후 복구
    zpool replace rpool /dev/old-disk /dev/new-disk
    
    # 리실버링(데이터 복구) 진행 상황 확인
    zpool status -v
    # 완료까지 기다린 후 state: ONLINE 확인

    문제 2: NFS 마운트 후 VM 시작 느림

    이건 NFS 타임아웃 설정 문제였어요. Proxmox 노드 재시작 시 NFS가 마운트되기 전에 VM이 시작하려다 보니 생기는 문제였습니다.

    # /etc/systemd/system/pve-storage-nas-backup.service.d/ 디렉토리 생성
    mkdir -p /etc/systemd/system/pve-storage-nas-backup.service.d/
    
    # NFS 마운트 의존성 추가
    cat > /etc/systemd/system/pve-storage-nas-backup.service.d/override.conf << 'EOF'
    [Unit]
    After=network-online.target
    Wants=network-online.target
    EOF
    
    systemctl daemon-reload

    문제 3: LVM-Thin 풀 오버커밋 위험

    # LVM-Thin 사용량 모니터링 스크립트
    cat > /usr/local/bin/check-thin-usage.sh << 'EOF'
    #!/bin/bash
    THRESHOLD=80
    USAGE=$(lvs --noheadings -o data_percent vg-data/thin-pool 2>/dev/null | tr -d ' ')
    USAGE_INT=${USAGE%.*}
    
    if [ "$USAGE_INT" -gt "$THRESHOLD" ]; then
        echo "WARNING: LVM-Thin pool usage is ${USAGE}%"
        # 여기에 알림 로직 추가 (메일, Slack 등)
    fi
    EOF
    chmod +x /usr/local/bin/check-thin-usage.sh
    
    # cron에 등록 (5분마다 체크)
    echo '*/5 * * * * root /usr/local/bin/check-thin-usage.sh' >> /etc/cron.d/thin-monitor

    ▲ Proxmox 스토리지 모니터링 대시보드. ZFS 풀 상태, LVM-Thin 사용량, NFS 연결 상태를 한 화면에서 확인하는 구성 예시입니다.

    상황별 Proxmox 스토리지 선택 가이드

    어떤 걸 골라야 하나요?

    결국 "뭐가 제일 좋냐"는 질문에 정답은 없어요. 상황에 따라 다르거든요. 제 추천을 정리하면:

    • 🏠 홈랩, 단일 노드, 데이터 안전성 중시 → ZFS. RAM이 충분하다면 무조건 ZFS 먼저 고려하세요
    • 💻 홈랩, 단일 노드, 심플하게 시작 → LVM-Thin. 복잡함 없이 바로 쓸 수 있어요
    • 🗄️ ISO/백업 파일 공유, 기존 NAS 연동 → NFS. 설정 쉽고 NAS랑 궁합 최고
    • 🏢 다중 노드 클러스터, 라이브 마이그레이션 필요 → iSCSI+LVM 또는 Ceph. Ceph는 다음 글에서 따로 다룰 예정이에요

    마무리: 스토리지는 처음 선택이 반입니다

    Proxmox 스토리지 설정, 생각보다 선택지가 많죠? 저도 처음엔 그냥 기본값으로 쭉 쓰다가 나중에 마이그레이션하느라 고생 많이 했어요. 지금 돌아보면 처음부터 ZFS로 시작했으면 훨씬 편했을 텐데 싶더라고요.

    정리하면:

    • ✅ ZFS: 데이터 무결성, 효율적 스냅샷, 단일 노드 최강자. RAM은 넉넉하게 준비하세요
    • ✅ LVM-Thin: 검증된 안정성, 낮은 진입장벽, 씬 프로비저닝으로 공간 효율적입니다
    • ✅ NFS: 공유 스토리지 입문, NAS 연동, ISO/백업 저장에 딱입니다
    • ✅ iSCSI: 블록 레벨 공유, 클러스터 환경, 설정 복잡하지만 성능 좋습니다

    다음 글에서는 Proxmox 클러스터 환경에서 Ceph를 활용한 분산 스토리지 구성을 다뤄볼 예정입니다. 여러 노드에 걸쳐 데이터를 분산 저장하고 고가용성을 확보하는 방법인데, 홈랩에서도 충분히 구성 가능하더라고요. 혹시 궁금한 점이나 다른 스토리지 구성 경험 있으시면 댓글로 공유해 주세요! 🎉

  • [Proxmox] LXC 컨테이너 활용 가이드: VM보다 가볍게 서비스 배포하기

    VM보다 가볍게, LXC 컨테이너로 홈서버 바꾼 이야기

    솔직히 말씀드리면, 저도 처음엔 Proxmox에서 뭘 돌리든 그냥 VM(가상 머신)만 썼거든요. 익숙하기도 했고, “VM이면 다 되잖아” 하는 안일한 생각도 있었고요. 근데 홈랩 서버에 서비스가 하나둘 늘어나다 보니까 문제가 생기기 시작했습니다. RAM이 부족해지고, 부팅 시간도 길어지고, 작은 서비스 하나 띄우는데 2GB 메모리를 쓰는 게 너무 아까운 거예요.

    그때 제대로 파고들기 시작한 게 바로 Proxmox LXC 컨테이너였습니다. 처음엔 “이게 Docker랑 뭐가 다르지?” 싶었는데, 실제로 써보니까 완전히 다른 매력이 있더라고요. 오늘은 13년간 인프라 엔지니어로 일하면서 직접 삽질해가며 터득한 Proxmox LXC 컨테이너 활용법을 공유해드리려 합니다.

    Proxmox VE 환경에서 LXC 컨테이너와 VM이 함께 운영되는 구조 — 같은 호스트에서 자원 효율성 차이가 확연합니다.

    LXC 컨테이너란? VM과 뭐가 다른가요?

    개념부터 짚고 넘어가겠습니다. 헷갈리는 분들이 많으시더라고요.

    LXC(Linux Containers, 리눅스 컨테이너)는 쉽게 말해서, 커널은 호스트와 공유하면서 독립된 사용자 공간(User Space)을 가지는 가상화 방식입니다. VM처럼 하드웨어를 통째로 에뮬레이션하지 않아요. 그래서 훨씬 가볍습니다.

    구분 VM (가상 머신) LXC 컨테이너 Docker
    커널 공유 ❌ 별도 커널 ✅ 호스트 커널 공유 ✅ 호스트 커널 공유
    격리 수준 매우 높음 높음 중간
    부팅 속도 느림 (수십 초) 빠름 (수 초) 매우 빠름 (즉시)
    메모리 오버헤드 높음 낮음 매우 낮음
    전체 OS 환경 ✅ 완전한 OS ✅ 완전한 OS 환경 ❌ 앱 중심
    systemd 사용 ✅ ✅ ❌ (기본적으로)

    LXC의 포지션이 보이시죠? VM의 완전한 OS 환경은 유지하면서, 자원 사용량은 훨씬 적은 중간 지점이에요. 실제로 제 홈랩에서 Nginx 서버 기준으로 VM은 약 512MB~1GB RAM을 먹는데, LXC 컨테이너는 50~100MB 수준에서 돌더라고요. 이 차이가 쌓이면 정말 엄청납니다.

    Proxmox에서 LXC 컨테이너 생성하기 — 단계별 가이드

    자, 이제 실전으로 들어가겠습니다. Proxmox VE(가상화 환경)에서 LXC 컨테이너를 생성하는 방법인데요. GUI와 CLI 두 가지 방법 모두 알려드릴게요.

    1단계: CT 템플릿(Container Template) 다운로드

    LXC 컨테이너를 만들려면 먼저 기반이 되는 OS 템플릿이 필요합니다. Proxmox에서는 이걸 CT 템플릿이라고 부르고요. GUI에서는 스토리지 → Templates 메뉴에서 바로 다운로드할 수 있어요.

    CLI에서는 이렇게 합니다:

    # 사용 가능한 템플릿 목록 확인
    pveam update
    pveam available --section system
    
    # Ubuntu 22.04 템플릿 다운로드 (local 스토리지에)
    pveam download local ubuntu-22.04-standard_22.04-1_amd64.tar.zst

    2단계: LXC 컨테이너 생성

    GUI에서는 우측 상단 “Create CT” 버튼 클릭 후 마법사를 따라가시면 됩니다. CLI로는 이렇게요:

    # pct create [VMID] [템플릿 경로] [옵션들]
    pct create 200 local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst \
      --hostname my-nginx \
      --memory 512 \
      --swap 512 \
      --cores 2 \
      --net0 name=eth0,bridge=vmbr0,ip=192.168.1.200/24,gw=192.168.1.1 \
      --storage local-lvm \
      --rootfs local-lvm:8 \
      --password YourSecurePassword \
      --unprivileged 1
    
    # 생성된 컨테이너 시작
    pct start 200
    
    # 컨테이너 상태 확인
    pct status 200

    여기서 --unprivileged 1 옵션이 정말 중요합니다. 비특권 컨테이너(Unprivileged Container)로 만드는 건데, 보안상 훨씬 안전해요. 특별한 이유가 없으면 항상 이 옵션을 켜두시길 권장합니다.

    3단계: 컨테이너 접속 및 초기 설정

    # 컨테이너 콘솔 접속
    pct enter 200
    
    # 또는 exec으로 명령어 실행
    pct exec 200 -- bash -c "apt update && apt upgrade -y"

    접속하면 완전한 Ubuntu 환경이 펼쳐집니다. 일반 서버처럼 쓰시면 돼요.

    Proxmox GUI의 LXC 컨테이너 생성 마법사 — 네트워크, 스토리지, 리소스를 단계별로 설정합니다.

    실전 활용 — 자주 쓰는 서비스 배포 예시

    개념만 알면 재미없죠. 제가 실제로 홈랩에서 LXC 컨테이너로 돌리고 있는 서비스 패턴을 공유해드릴게요.

    Nginx 리버스 프록시 컨테이너

    # 컨테이너 안에서
    apt update && apt install -y nginx
    
    # Nginx 설정
    cat > /etc/nginx/sites-available/myapp << 'EOF'
    server {
        listen 80;
        server_name myapp.local;
    
        location / {
            proxy_pass http://192.168.1.100:3000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    EOF
    
    ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
    nginx -t && systemctl reload nginx

    컨테이너 설정 파일로 관리하기

    Proxmox LXC 컨테이너는 /etc/pve/lxc/[VMID].conf 파일로 설정이 관리됩니다. 이걸 알면 나중에 설정 백업이나 복제가 훨씬 편해져요.

    # 컨테이너 200번의 설정 파일 확인
    cat /etc/pve/lxc/200.conf
    # 일반적인 LXC 컨테이너 설정 파일 예시
    arch: amd64
    cores: 2
    hostname: my-nginx
    memory: 512
    net0: name=eth0,bridge=vmbr0,gw=192.168.1.1,hwaddr=AA:BB:CC:DD:EE:FF,ip=192.168.1.200/24,type=veth
    ostype: ubuntu
    rootfs: local-lvm:vm-200-disk-0,size=8G
    swap: 512
    unprivileged: 1
    
    # 자동 시작 설정 (서버 재부팅 시 자동으로 컨테이너 시작)
    onboot: 1
    startup: order=1,up=30

    onboot: 1과 startup 옵션은 꼭 설정해두세요. 서버 재부팅 후에 컨테이너가 자동으로 올라오게 됩니다. 처음에 이거 몰라서 재부팅할 때마다 수동으로 시작했었는데... 정말 삽질이었죠 ㅎㅎ

    호스트 디렉토리 마운트 (Bind Mount)

    컨테이너에서 호스트의 특정 디렉토리를 공유해서 쓰고 싶을 때 바인드 마운트(Bind Mount)를 씁니다. 예를 들어 미디어 파일이 호스트에 있는데 컨테이너 안의 Jellyfin에서 접근해야 할 때요.

    # 컨테이너가 중지된 상태에서 마운트 추가
    pct set 200 -mp0 /mnt/data/media,mp=/media,ro=0
    
    # 또는 설정 파일 직접 편집
    # /etc/pve/lxc/200.conf에 아래 줄 추가
    # mp0: /mnt/data/media,mp=/media

    ⚠️ 주의: 비특권 컨테이너(Unprivileged)에서 바인드 마운트 시 UID/GID 매핑 문제가 생길 수 있습니다. 이 부분은 뒤에서 트러블슈팅으로 다룰게요.

    ⚠️ 주의사항과 삽질 기록 — 진짜 겪은 문제들

    이 섹션이 사실 제일 중요할 수 있어요. 공식 문서에는 잘 안 나오는 것들이거든요.

    문제 1: 비특권 컨테이너에서 파일 권한 오류

    비특권 컨테이너는 보안을 위해 UID를 매핑합니다. 컨테이너 안의 root(UID 0)가 호스트에서는 UID 100000으로 보이는 식이에요. 그래서 호스트 디렉토리를 마운트하면 권한 문제가 생깁니다.

    해결 방법:

    # 호스트에서 해당 디렉토리의 소유자를 컨테이너 UID로 변경
    # 컨테이너 안의 UID 1000 사용자 → 호스트에서는 101000
    chown -R 101000:101000 /mnt/data/media
    
    # 또는 chmod로 모든 사용자 접근 허용 (보안 주의)
    chmod -R 777 /mnt/data/media

    문제 2: 특권 기능이 필요한 서비스 (Docker-in-LXC)

    LXC 컨테이너 안에서 Docker를 돌리고 싶을 때가 있거든요. 이게 되긴 합니다만, 설정이 필요합니다.

    # /etc/pve/lxc/200.conf에 추가해야 할 내용
    # (컨테이너 중지 후 편집)
    features: keyctl=1,nesting=1

    이 경우엔 특권 컨테이너(Privileged Container)로 만들거나, nesting 기능을 활성화해야 해요. 저도 처음에 이것 때문에 한참 헤맸습니다. Docker가 계속 실패하는데 이유를 몰라서요.

    문제 3: 컨테이너 네트워크가 안 잡힐 때

    # 컨테이너 안에서 네트워크 확인
    ip addr show
    ip route show
    
    # DNS 확인
    cat /etc/resolv.conf
    
    # DNS가 없다면 추가
    echo "nameserver 8.8.8.8" >> /etc/resolv.conf
    
    # 또는 Proxmox 호스트에서 컨테이너 네트워크 재설정
    pct set 200 --net0 name=eth0,bridge=vmbr0,ip=192.168.1.200/24,gw=192.168.1.1

    문제 4: 컨테이너 스냅샷이 안 될 때

    스냅샷 기능을 쓰려면 스토리지가 스냅샷을 지원해야 합니다. local-lvm(LVM-Thin)이나 ZFS를 쓰면 되고, 일반 ext4 디렉토리 스토리지는 스냅샷이 안 돼요. 이것도 처음에 몰라서 삽질했습니다.

    # 스냅샷 생성
    pct snapshot 200 snap-before-update --description "업데이트 전 백업"
    
    # 스냅샷 목록 확인
    pct listsnapshot 200
    
    # 스냅샷으로 롤백
    pct rollback 200 snap-before-update

    💡 팁: 서비스 업데이트나 큰 변경 전에 스냅샷 찍는 습관을 들이세요. 저는 이게 몇 번이나 저를 살렸는지 모릅니다.

    LXC 컨테이너 관리 꿀팁 모음

    일상적으로 자주 쓰는 관리 명령어들을 정리해드릴게요.

    # 전체 컨테이너 목록 확인
    pct list
    
    # 컨테이너 리소스 사용량 실시간 확인
    pct monitor 200
    
    # 컨테이너 복제 (Clone)
    pct clone 200 201 --hostname my-nginx-clone --full
    
    # 컨테이너 백업
    vzbackup 200 --storage local --mode snapshot
    
    # 컨테이너 중지 및 삭제
    pct stop 200
    pct destroy 200
    
    # 실행 중인 컨테이너에 리소스 핫 변경 (재시작 불필요)
    pct set 200 --memory 1024
    pct set 200 --cores 4

    특히 리소스 핫 변경은 정말 편한 기능이에요. VM은 보통 재시작해야 메모리 변경이 되는데, LXC는 실행 중에도 바로 적용됩니다. 이거 처음 알았을 때 "아 이래서 LXC 쓰는구나" 했던 기억이 나네요.

    여러 LXC 컨테이너가 동시에 운영되는 Proxmox 환경 — 각 컨테이너의 CPU, 메모리 사용량을 실시간으로 확인할 수 있습니다.

    ✅ 결과 확인 — 실제로 얼마나 가벼워졌나?

    제 홈랩 기준으로 비교해드릴게요. 같은 Nginx + 간단한 웹 앱 기준입니다.

    항목 Ubuntu VM Ubuntu LXC 컨테이너
    부팅 시간 약 30~40초 약 3~5초
    유휴 메모리 사용 약 400~600MB 약 50~100MB
    디스크 사용 (OS 기본) 약 3~5GB 약 300~500MB
    스냅샷 생성 속도 느림 빠름
    systemd 지원 ✅ ✅

    이 차이 덕분에 저는 기존에 VM 5개로 돌리던 서비스를 LXC 컨테이너 12개로 확장했는데도 오히려 전체 메모리 사용량이 줄었습니다. 🎉 같은 하드웨어에서 더 많은 서비스를 돌릴 수 있게 된 거죠.

    경량 서비스 배포 측면에서 LXC 컨테이너는 정말 강력한 선택지입니다. Prometheus, Grafana, Gitea, Nextcloud 같은 서비스들 모두 LXC에서 잘 돌아가거든요.

    자주 묻는 질문 (FAQ)

    Q. LXC 컨테이너와 Docker 중 뭘 써야 하나요?
    A. 서비스 성격에 따라 다릅니다. 완전한 OS 환경이 필요하거나 systemd를 써야 하면 LXC, 앱 하나만 가볍게 격리할 거면 Docker가 적합해요. 저는 둘 다 쓰는데, LXC 안에 Docker를 넣기도 합니다.

    Q. Windows를 LXC 컨테이너로 돌릴 수 있나요?
    A. 안 됩니다. LXC는 Linux 커널 기반이라 Linux 배포판만 지원합니다. Windows는 반드시 VM으로 돌려야 해요.

    Q. LXC 컨테이너도 GPU 패스스루가 되나요?
    A. 됩니다! VM의 PCIe 패스스루보다 설정이 간단한 편이에요. 관련 내용은 다음 글에서 다룰 예정입니다.

    LXC 컨테이너와 VM의 특성 비교 요약 — 서비스 유형에 따른 최적 선택 가이드.

    마무리 — 언제 LXC를 쓰고 언제 VM을 써야 할까?

    13년간 인프라 일 하면서 내린 결론을 드리자면, 이렇게 판단합니다:

    • ✅ LXC 컨테이너 추천: 웹 서버, 데이터베이스, 모니터링 도구, 파일 서버, 홈 자동화 서버처럼 Linux 기반 서비스 단순 배포
    • ✅ VM 추천: Windows 환경, 커널 수준 격리가 필요한 경우, 다른 하이퍼바이저나 OS를 테스트할 때, 강한 보안 격리가 필요한 프로덕션 환경

    Proxmox의 진짜 장점은 이 두 가지를 같은 플랫폼에서 자유롭게 섞어 쓸 수 있다는 거예요. 저는 중요한 서비스는 VM에, 나머지 경량 서비스들은 모두 LXC 컨테이너로 돌리는 하이브리드 방식을 쓰고 있습니다.

    처음 LXC를 접하면 낯설 수 있는데, 한 번 익숙해지면 정말 못 돌아가요. 이거 진짜더라고요. 홈랩 운영하시는 분들이라면 꼭 한번 도전해보시길 권합니다!

    다음 글에서는 Proxmox LXC 컨테이너에서 GPU 패스스루 설정하는 방법을 다뤄볼 예정입니다. 궁금한 점은 댓글로 남겨주시면 답변드리겠습니다. 🎉