# 02. VM 구성 가이드 ## 아키텍처 개요 ``` Host (203.0.113.2) └── libvirt NAT 네트워크: k8s-lab (203.0.113.0/24) ├── k8s-ctrl1 203.0.113.11 (control-plane + etcd) ├── k8s-ctrl2 203.0.113.12 (control-plane + etcd) └── k8s-ctrl3 203.0.113.13 (control-plane + etcd) ``` - Host → VM: SSH, kubectl 접근 가능 (NAT 아웃바운드) - VM ↔ VM: 동일 브릿지 내 직접 통신 - 외부 → VM: Host에서 포트 포워딩 또는 `virsh console` 사용 ## 전용 libvirt 네트워크 생성 `network/k8s-lab-network.xml` 정의를 사용합니다. ```bash # 네트워크 정의 등록 virsh net-define network/k8s-lab-network.xml # 네트워크 시작 및 자동시작 설정 virsh net-start k8s-lab virsh net-autostart k8s-lab # 확인 virsh net-list --all virsh net-dumpxml k8s-lab ``` ## Cloud Image 기반 VM 생성 방식 Base Image를 공유하고 각 VM마다 overlay qcow2를 생성하는 방식을 사용합니다. (디스크 공간 절약 + 빠른 VM 생성) ``` ubuntu-22.04-server-cloudimg-amd64.img ← Base (읽기 전용) │ ├── k8s-ctrl1.qcow2 ← overlay (쓰기) ├── k8s-ctrl2.qcow2 ← overlay (쓰기) └── k8s-ctrl3.qcow2 ← overlay (쓰기) ``` ### 1) Overlay 디스크 생성 (VM당) ```bash BASE="/var/lib/libvirt/images/ubuntu-22.04-server-cloudimg-amd64.img" IMGDIR="/var/lib/libvirt/images" for i in 1 2 3; do sudo qemu-img create \ -f qcow2 \ -F qcow2 \ -b "${BASE}" \ "${IMGDIR}/k8s-ctrl${i}.qcow2" \ 40G done ``` ### 2) Cloud-init ISO 생성 (VM당) 각 VM의 hostname이 다르므로 meta-data만 다르게 생성합니다. ```bash for i in 1 2 3; do # meta-data: hostname 지정 cat > /tmp/meta-data-ctrl${i} <> ~/.ssh/config <<'EOF' Host k8s-ctrl1 HostName 203.0.113.11 User ubuntu IdentityFile ~/.ssh/k8s-lab StrictHostKeyChecking no Host k8s-ctrl2 HostName 203.0.113.12 User ubuntu IdentityFile ~/.ssh/k8s-lab StrictHostKeyChecking no Host k8s-ctrl3 HostName 203.0.113.13 User ubuntu IdentityFile ~/.ssh/k8s-lab StrictHostKeyChecking no EOF # 접속 테스트 ssh k8s-ctrl1 hostname ssh k8s-ctrl2 hostname ssh k8s-ctrl3 hostname ``` ## VM 관리 명령어 참고 ```bash # VM 시작/정지 virsh start k8s-ctrl1 virsh shutdown k8s-ctrl1 virsh destroy k8s-ctrl1 # 강제 종료 (전원 OFF) # VM 삭제 (디스크 포함) virsh undefine k8s-ctrl1 --remove-all-storage # VM 스냅샷 (실험 전 상태 보존용) virsh snapshot-create-as k8s-ctrl1 "before-experiment" "실험 전 스냅샷" virsh snapshot-list k8s-ctrl1 virsh snapshot-revert k8s-ctrl1 "before-experiment" ```