systemd-nspawn으로 경량 리눅스 컨테이너 직접 만들기
패키지 설치 스크립트를 깨끗한 배포판에서 검증하거나, systemd 유닛이 여러 개 도는 환경을 통째로 재현해야 할 때가 있다. 도커는 컨테이너당 프로세스 하나를 전제로 설계돼 있어 systemd를 PID 1로 올리려면 우회가 필요하고,…
패키지 설치 스크립트를 깨끗한 배포판에서 검증하거나, systemd 유닛이 여러 개 도는 환경을 통째로 재현해야 할 때가 있다. 도커는 컨테이너당 프로세스 하나를 전제로 설계돼 있어 systemd를 PID 1로 올리려면 우회가 필요하고,…
LXC(Linux Containers)는 리눅스 커널의 컨트롤 그룹(cgroup)과 네임스페이스만으로 격리된 실행 환경을 만드는 컨테이너 기술로, Docker가 내부적으로 쓰던 기반 기술이기도 하다. Docker처럼 이미지 레이어나 오케스트레이션 기능은 없지만, 그만큼 가볍고 VM에 가까운 방식으로…
KVM은 커널에 이미 내장된 모듈이라 별도 하이퍼바이저를 설치할 필요는 없지만, 막상 "이 머신에서 KVM이 되는지"를 확인하려고 하면 CPU 플래그, 커널 모듈, /dev/kvm 권한이 뒤섞여 헷갈리기 쉽다. 특히 클라우드 인스턴스나 중첩…
virsh 명령을 손으로 하나씩 치면서 VM을 만들고 지우는 건 한두 대일 때는 괜찮지만, 스토리지 풀 준비·도메인 정의·스냅샷·정리까지 반복해야 하는 상황이라면 스크립트로 묶는 게 낫다. 이 글에서는 virt-install로 도메인 XML을 자동…
QEMU/KVM 게스트의 기본 에뮬레이트 NIC(e1000, rtl8139 등)은 물리 NIC 레지스터를 소프트웨어로 그대로 흉내 내, 패킷 하나마다 MMIO/PIO 접근이 VM Exit로 호스트에 트랩된다. 이 트랩 비용 때문에 처리량이 물리 NIC 대비…
하이퍼바이저 호스트를 재부팅해야 할 때, VM을 끄고 다른 호스트에서 다시 켜는 cold migration은 서비스가 몇 분씩 죽는다. QEMU/KVM의 live migration은 VM을 실행 상태 그대로 유지하며 메모리/디바이스 상태를 다른 호스트로 옮기고…
"컨테이너는 가벼운 VM이다"라는 말을 흔히 듣는다. 틀린 말은 아니지만, 이 표현만 믿고 컨테이너에 VM 수준의 격리를 기대하면 곤란해진다. 신뢰할 수 없는 멀티테넌트 워크로드를 컨테이너 하나로 묶어뒀다가 커널 취약점 하나로 전체가…