이번에 방구석 서버를 정비하면서 윈도우 깔아서 쓰던 PC(위에 있는 은색)에 proxmox를 올렸습니다.
저는 원래 프로그래밍 과목을 하나 들을 때마다 VM을 과목당 하나씩 만들어서 과제용으로 쓰고 학기가 끝나면 지워버리는 습관이 있습니다. 윈도우 VM은 비주얼노벨 플레이나 윈도우에서 작동하는 일부 다운로더 프로그램을 사용하기 위함이구요, VM 여러개를 동시에 사용하는 일은 거의 없다시피 합니다. 동시에 과제 여러개를 할리도 없고, 과제를 하면서 게임을 하지도 않으니까요.. 그러면 사실 멀티 부팅 환경이 이상적입니다. 24시간 작동해야 하는 컨테이너나 스토리지 역할은 아래에 있는 검은색 PC가 하거든요. 가상화는 네이티브보다 어느정도 성능 하락을 감수해야 하고, 특히 윈도우 게스트는 영 이상하게 작동해서 불편한 부분이 없지 않아 있습니다.
그런데 원격지에서 컴퓨터를 켜는 것 까지는 WOL로 가능하지만, 바이오스 창을 켜서 부팅할 디스크를 선택하는건 IPMI가 없다면 불가능합니다. 그래서 WOL로 PC를 켜고 > VMM 관리페이지에 접근해서 원하는 VM을 켜고 > RDP나 SSH로 접근해서 과제나 오락을 하게 됩니다.
원래는 이 베어메탈 하이퍼바이저로 ESXi를 사용했었는데, 인텔랜 달린 슈퍼마이크로 보드에 설치할 때랑은 다르게 이번에는 일반 소비자용 시스템이다보니 그놈의 꽃게텍 랜 인식문제로 온갖 삽질을 하다가 실패하고 이번에 Proxmox VE를 처음 사용해봤습니다. ESXi와는 다르게 기본 UI가 다크테마인게 일단 합격점이구요, 오픈소스에 데비안 OS기반인 덕분에 라이선스 이슈도 없고 apt로 다양한 유틸리티를 간편하게 깔아서 쓸 수 있습니다. 특히 LXC 컨테이너 기능은 별 기대도 안하고 있었는데 의외의 사용처가 있어 맘에 쏙 들었습니다 (이건 후술하겠습니다). 다만 VirtIO 윈도우 게스트 드라이버가 이상해서 부팅 디스크로 쓸 SATA SSD를 패스스루하면 HDD로 인식해서 TRIM이 안되더라구요. 어차피 SATA SSD는 이거 하나만 물려있기 때문에 SATA 서브시스템 전체를 PCIe 패스스루해서 해결했습니다.
제가 이번학기에 가상화 시스템이라는 전공과목을 수강중인데, 여기서는 Rust로 KVM 기반의 VMM을 짜는 과제를 합니다. 당연히 이걸 VM 위에서 하려면 중첩 가상화를 사용해야 하고, 강의에서 제공하는 과제용 서버가 바로 이런 방식으로 작동하기에 성능이 많이 떨어집니다. 똑같은 전철을 밟기는 싫어서 이왕 proxmox를 설치한 김에 LXC 컨테이너로 눈을 돌렸습니다. 컨테이너 기술은 OS 가상화가 아니기 때문에 이론상 Privileged 컨테이너라면 중첩 가상화 대신 호스트의 /dev/kvm을 마운트해서 네이티브 가상화를 사용할 수 있을 거라는 계산이었고, 생각한 방법과 좀 다르긴 하지만 약간의 구글링 끝에 성공했습니다(아래에 간단하게 설정법을 남기겠습니다). 아마 앞으로도 과제용 환경은 LXC로 만들어서 쓸 것 같네요. 그냥 일기장 느낌으로 주저리주저리 쓴거라 글이 두서없어서 죄송합니다..
PVE LXC CT에서 KVM 사용하기
1. /etc/pve/lxc/{CTID}.conf 열기
2. lxc.group2.devices.allow: c 10:232 rwm 추가하기
3. 컨테이너 내에서 /dev/kvm 생성하기
이건 컨테이너 킬때마다 작업해줘야 하니 쉘스크립트로 만들어뒀습니다.