기술 가이드

D. 가상화

4 min read 가상화 업데이트됨 18 Oct 2025
KVM 가상화: 네트워크·킥스타트·virt-install 가이드
KVM 가상화: 네트워크·킥스타트·virt-install 가이드

1. 가상 네트워크

다음 명령을 루트로 실행하세요:

virt-manager

Virtual Machine Manager 창이 열립니다. Domain-0(또는 호스트 도메인)과 그 리소스가 보입니다.

1.a 가상 네트워크 생성하기

  • 메뉴에서 Edit를 클릭한 다음 “Host details”를 선택하세요.
  • Host Details 창의 왼쪽 프레임에는 기본적으로 “default”만 보입니다. 아래의 “Add”를 클릭하세요.
  • “Create a new virtual network” 창이 나타나면 Forward(다음) 버튼을 클릭하세요.
  • 네트워크 이름으로 public1(따옴표 없이)를 입력하고 Forward를 클릭하세요.
  • 네트워크는 192.168.222.0/24로 설정하고 Forward를 클릭하세요.
  • DHCP 범위: Start: 192.168.222.128 End: 192.168.222.254 로 입력한 뒤 Forward를 클릭하세요.
  • Connectivity는 Isolated virtual network(격리된 가상 네트워크)로 선택하고 Forward를 누르세요.
  • 요약 화면 예시:
    • Network Name: public1
    • IPV4 network:
      • Network: 192.168.222.0/24
      • Gateway: 192.168.222.1
      • Netmask: 255.255.255.0
    • DHCP:
      • Start address: 192.168.222.128
      • End address: 192.168.222.254
    • Forwarding:
      • Connectivity: Isolated virtual network
  • Finish를 클릭하세요.

Host Details 창으로 돌아오면 public1 항목이 나타납니다. 동일한 절차로 private1 네트워크를 다음 설정으로 추가하세요:

  • Network Name: private1
  • Network: 192.168.100.0/24
  • Gateway: 192.168.100.1
  • Netmask: 255.255.255.0
  • DHCP Start: 192.168.100.128
  • DHCP End: 192.168.100.254
  • Connectivity: Isolated virtual network

생성이 끝나면 Host Details 창에서 File > Close로 돌아가고 Virtual Machine Manager에서 File > Quit로 종료하세요. 중요한 참고: Virtual Machine Manager 창을 사용하지 않을 때 그대로 열어두면 메모리를 많이 사용합니다. 필요 없을 때는 닫으세요. (메모리 과다 사용 시 Xen을 재시작해야 할 수 있습니다.)

생성 후 호스트에서 다음 명령을 실행하면 vnet0과 vnet1 인터페이스를 확인할 수 있습니다:

ifconfig

출력 예시(변경하지 마세요):

   vnet0      Link encap:Ethernet  HWaddr 00:00:00:00:00:00
              inet addr:192.168.222.1  Bcast:192.168.222.255  Mask:255.255.255.0
              inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0

              TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:0 (0.0 b)  TX bytes:7782 (7.5 KiB)
    
    vnet1      Link encap:Ethernet  HWaddr 00:00:00:00:00:00
              inet addr:192.168.100.1  Bcast:192.168.100.255  Mask:255.255.255.0
              inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:27 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:0 (0.0 b)  TX bytes:7712 (7.5 KiB)

2. 킥스타트(kickstart) 파일

아래는 node01용 킥스타트 예제입니다. node02에 사용하려면 IP 주소와 호스트명만 수정하세요.

2.a node01용 킥스타트 예제

#START of node01_ks.cfg
install
text
reboot
#uncomment the line you want to use
# for nfs
nfs --server=192.168.222.1 --dir=/var/ftp/pub/centos5u1
##url --url ftp://:@/
# this will be an anonymous ftp access
#url --url ftp://192.168.222.1/pub/centos5u1/i386
#key --skip
lang en_US.UTF-8
keyboard us
skipx
# private
network --device eth1 --bootproto static --ip 192.168.100.10 --netmask 255.255.255.0 
# public - disabled on initial install
network --device eth0 --bootproto static --ip 192.168.222.10 --netmask 255.255.255.0 --gateway 192.168.222.1 --nameserver 192.168.222.1 --hostname node01.example.com
## password is n0de01pass
rootpw --iscrypted $1$Lqk1Y$Y8TIWCMLiiPjVt1GjRS0F1
## password is n0de02pass
#rootpw --iscrypted $1$Rn47b$DDwgrOv3IFGf3HVhsxv9X0
firewall --disabled
authconfig --enableshadow --enablemd5
selinux --disabled
timezone --utc Asia/Singapore
services --disabled ipsec,iptables,bluetooth,hplip,firstboot,cups,sendmail,xfs
bootloader --location=mbr --driveorder=xvda,xvdb --append="rhgb quiet"
clearpart --all --initlabel --drives=xvda
part /boot --fstype ext3 --size=100 --ondisk=xvda
part pv.2 --size=0 --grow --ondisk=xvda
volgroup VolGroup00 --pesize=32768 pv.2
logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=1000 --grow --maxsize=1984
logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
%packages
@development-libs
@system-tools
@gnome-software-development
@text-internet
@x-software-development
@dns-server
@core
@authoring-and-publishing
@base
@ftp-server
@network-server
@legacy-software-development
@java
@legacy-software-support
@smb-server
@base-x
@web-server
@printing
@server-cfg
@sql-server
@admin-tools
@development-tools
emacs
lsscsi
gnutls-utils
hwbrowser
audit
iptraf
mesa-libGLU-devel
kexec-tools
device-mapper-multipath
vnc-server
xorg-x11-utils
xorg-x11-server-Xnest
xorg-x11-server-Xvfb
imake
iscsi-initiator-utils
ypserv
-sysreport

%post
cat <> /etc/hosts
# private  or replace with nodeXY-
192.168.100.10  node01-priv
192.168.100.20  node02-priv
192.168.100.1   node00-priv

#public or replace with nodeXY
192.168.222.10 node01
192.168.222.20 node02
192.168.222.1  node00
EOT

# yum local repo
mv /etc/yum.repos.d/*.repo /tmp
cat > /etc/yum.repos.d/centos5.repo << EOF
[centos5-Server]
name=CEntos5 Server
baseurl=http://node00/centos5u1/i386
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
EOF

#change default runlevel
ed /etc/inittab << EOF

,s/id:5:initdefault:/id:3:initdefault:/g
.
w
EOF

# vncserver stuff
cat << EOT > /opt/vnc_xstartup
#!/bin/sh

# run vncserver and copy to your $HOME/.vnc/xstartup file
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup

[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 130x30+12+12 -ls -bg black -fg green -title "$VNCDESKTOP Desktop" &
mwm &
EOT
# END of nod01_ks.cfg

참고: 위 킥스타트 파일 안의 경로, 암호 해시, 저장소 URL 등은 예시입니다. 실제 환경에서는 보안과 네트워크 정책에 맞게 수정하세요.

2.b node02

node01_ks.cfg 파일을 node02_ks.cfg로 복사한 뒤 호스트명과 IP 주소만 node02에 맞게 변경하세요.

3. 게스트 시스템 설치(node01, node02)

설치는 CLI에서 virt-install을 호출하여 진행합니다.

3.a MAC 주소 생성

Red Hat Virtualization Guide에 있는 Python 스크립트를 사용해 MAC 주소를 생성합니다. (파일명, 내용은 그대로 유지)

#!/usr/bin/python
# macgen.py script to generate a MAC address for Red Hat Virtualization guests
import random
#
def randomMAC():
   mac = [ 0x00, 0x16, 0x3e,
     random.randint(0x00, 0x7f),

     random.randint(0x00, 0xff),
     random.randint(0x00, 0xff) ]
   return ':'.join(map(lambda x: "%02x" % x, mac))
#
print randomMAC()
# careful with the indention
# this is from the Virtualization guide from redhat.com
# http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.2/html/Virtualization/index.html

예시 결과:

node01 NICs  
# for eth0 . public1  
[root@node00 ~]# ./macgen.py  
00:16:3e:33:32:07  
# for eth1 . private1  
[root@ node00 ~]# ./macgen.py  
00:16:3e:55:6b:83

node02의 가상 NIC도 동일한 방식으로 MAC을 생성하세요.

3.b node01용 virt-install 명령

virt-install -p -n node01 -r 768 -f /dev/Virtual00VG/lvNODE01 -m 00:16:3e:33:32:07 \  
-w network:public1 -m 00:16:3e:55:6b:83 -w network:private1 \  
-l nfs:192.168.222.1:/var/ftp/pub/centos5u1/i386 \  
-x "ksdevice=eth0 ks=http://192.168.222.1/centos5u1/node01_ks.cfg" --vnc

주요 파라미터 설명:

  • -n node01: 게스트 이름
  • -r 768: 메모리(MB)
  • -f /dev/Virtual00VG/lvNODE01: 게스트가 사용할 디스크(논리볼륨 또는 파티션)
  • -m : 네트워크 인터페이스 MAC 주소
  • -w network:public1 / network:private1: 연결할 libvirt 네트워크
  • -l nfs:…: 설치 소스(예: NFS 경로)
  • -x “ksdevice=eth0 ks=…”: 킥스타트 파일 위치 및 설치 디바이스 지정
  • –vnc: 설치 GUI를 VNC로 표시

3.c node02용 virt-install 명령

virt-install -p -n node02 -r 768 -f /dev/Virtual00VG/lvNODE02 -m 00:16:3e:1e:05:b6 \  
-w network:public1 -m 00:16:3e:40:3d:b0 -w network:private1 \  
-l nfs:192.168.222.1:/var/ftp/pub/centos5u1/i386 \  
-x "ksdevice=eth0 ks=http://192.168.222.1/centos5u1/node02_ks.cfg" --vnc

물리 호스트에서 VNC 세션으로 virt-install을 실행하면 게스트 설치 화면이 자동으로 표시됩니다. 물리 콘솔에서 시작하면 설치는 백그라운드에서 진행되며, 설치 화면은 virt-manager로 게스트를 열어 확인할 수 있습니다.


대안 및 확장

  • 수동 설치 대신 PXE 기반 네트워크 설치를 사용하면 중앙에서 이미지/설정을 관리하기 쉽습니다. 킥스타트를 PXE 부팅 옵션과 함께 사용하면 완전 자동화 가능합니다.
  • libvirt 네트워크 대신 브리지(brigde)나 외부 물리 네트워크 브리징을 사용하면 게스트가 물리 네트워크와 직접 통신하게 할 수 있습니다.
  • 클라우드나 대규모 배포 환경에서는 Ansible, Terraform과 같은 도구로 VM 생성과 설정을 자동화하는 것이 유지보수에 유리합니다.

실패 시 점검 사항

  • 가상 네트워크가 생성되었는지: virsh net-list --all 또는 virsh net-info public1로 확인하세요.
  • NFS/HTTP 설치 소스 접근성: 호스트에서 curl 또는 mount -t nfs로 접근 가능한지 확인합니다.
  • NIC MAC 충돌: 동일 MAC이 다른 VM에 할당되어 있지 않은지 확인하세요.
  • 디스크 경로 권한: 지정한 LV나 파티션이 사용 가능한지 확인하세요.
  • 킥스타트 문법 오류: %post 블록 등에서 EOF 표기가 정확한지 확인하세요.

역할별 체크리스트

  • 인프라 엔지니어:
    • libvirt 네트워크(public1/private1) 생성 및 활성화
    • NFS/HTTP 설치 소스 준비
    • 디스크(논리볼륨) 생성
  • 시스템 관리자:
    • 킥스타트 파일 작성 및 검증
    • 호스트명/IP 매핑 확인(/etc/hosts)
  • 보안 담당자:
    • 킥스타트 파일 내 민감 정보(평문 비밀번호 등) 제거
    • 방화벽 및 네트워크 격리 검토

사실 상자

  • 권장 메모리 예시: 게스트당 768MB(테스트/경량 서비스용). 프로덕션은 워크로드에 맞게 설정하세요.
  • 네트워크 격리: Isolated virtual network는 호스트 NIC과 분리된 내부 통신 용도입니다.
  • 킥스타트 자동화: ks= URL을 통해 무인 설치가 가능합니다.

간단 용어집

  • libvirt: 리눅스 가상화 관리를 위한 오픈소스 툴킷
  • virt-install: libvirt 기반 게스트를 생성하는 CLI 도구
  • 킥스타트: Red Hat 계열 자동 설치 구성 파일

요약

이 가이드는 virt-manager로 가상 네트워크(public1, private1)를 생성하고, 킥스타트 파일을 준비한 뒤 virt-install로 node01/node02를 자동 설치하는 전체 절차를 다룹니다. 주요 점검 항목과 대안도 함께 제공하므로 환경에 맞게 적용하세요.

중요: 모든 예제는 참조용입니다. IP, 호스트명, 패스워드 해시, 저장소 URL 등은 실제 환경에서 검토하고 교체해야 합니다.

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

Google Maps에서 주차 위치 수동으로 저장하는 법
가이드

Google Maps에서 주차 위치 수동으로 저장하는 법

iPhone에서 Prime Video 앱이 작동하지 않을 때 해결방법
모바일 문제

iPhone에서 Prime Video 앱이 작동하지 않을 때 해결방법

암호화폐 차익거래와 트레이딩 봇 완전 가이드
암호화폐

암호화폐 차익거래와 트레이딩 봇 완전 가이드

영국에서 인스타그램 인플루언서 되는 법
소셜미디어

영국에서 인스타그램 인플루언서 되는 법

Android Nougat에서 플로팅 윈도우 활성화
Android 팁

Android Nougat에서 플로팅 윈도우 활성화

Ubuntu 셸 사용자 추가/삭제 가이드
시스템 관리

Ubuntu 셸 사용자 추가/삭제 가이드