[펌] KVM 기반 가상 서버 작성하기

황선욱 2011.05.24 02:12 조회 수 : 7132

KVM 설치를 위해 찾아보았습니다.

출처 :  http://www.dbguide.net/knowledge.db?cmd=view&boardUid=148879&boardConfigUid=20&boardStep=&categoryUid=148879

 

 

KVM 기반 가상 서버 작성하기

전체 가상화를 사용하여 Linux VM 하이퍼바이저에서 가상 서버를 빌드하는 데 필요한 세 가지 단계

상대적으로 단순한 세 단계를 통해 전체 가상화를 사용하여 Linux? KVM 하이퍼바이저 호스트에서 가상 서버를 작성할 수 있습니다. KVM(Kernel-based Virtual Machine)은 하드웨어 가상화 확장(Intel VT-X 및 AMD-V)과 QEMU의 수정된 버전을 기반으로 하는 Linux용 무료 오픈 소스 가상화 소프트웨어입니다.

 

Linux KVM(Kernel-based Virtual Machine)은 Intel VT-X 및 AMD-V 하드웨어 가상화 확장과 QEMU의 수정된 버전을 기반으로 하는 Linux용 무료 오픈 소스 가상화 소프트웨어이다(필요한 변경사항을 가져오기 위한 작업이 진행 중임). KVM(kvm.ko 형식으로 되어 있으며 코어 가상화 인프라 및 프로세서 특정 모듈 kvm-intel.ko 및 kvm-amd.ko를 제공하는 로드 가능한 커널 모듈임)은 수정되지 않은 형식으로 다수의 PC 운영 체제를 부트하는 데 필요한 정도까지 전체 하드웨어 에뮬레이션을 사용할 수 있도록 설계되어 있다.

KVM을 사용하면 수정되지 않은 Linux, Windows? 또는 Mac OS? X 이미지를 실행하는 여러 가상 시스템을 실행할 수 있다. 각각의 가상 시스템에는 네트워크 카드, 디스크, 그래픽 어댑터 등과 같은 개인용 가상 하드웨어가 있다.

이 기사에서 필자는 SUSE 11이 설치된 IBM? Blade Server HS21을 운영 체제로 사용했다. HS21은 Intel VT 확장을 지원하고 SUSE 11의 커널 버전은 2.6.27.13이며 여기에는 KVM(KVM은 2.6.20 버전부터 Linux 커널에 포함되어 있음)이 이미 포함되어 있다.

가상 서버를 작동하는 데 필요한 기본적인 세 가지 단계는 다음과 같다.

1.운영 체제와 필요한 소프트웨어를 설치한다.
2.가상 서버를 작성한다.
3.가상 서버 네트워크를 구성한다.

1단계: OS와 필요한 소프트웨어 설치하기

이 섹션에서 다루는 내용은 다음과 같다.

1.운영 체제와 필요한 소프트웨어 설치하기
2.CPU가 KVM을 지원하는지 여부 판별하기
3.소프트웨어가 올바르게 설치되었는지 확인하기

운영 체제와 소프트웨어 설치하기

운영 체제를 설치한 후 다음 명령을 사용하여 설치된 Linux 커널의 버전을 찾을 수 있다.

kvm:~ # uname -a
Linux kvm 2.6.27.13-1-pae #1 SMP 2009-01-27 13:41:16 +0100 i686 i686 i386 GNU/Linux

그런 다음 kvm과 kvm-kmp-default 패키지(I/O 하드웨어 에뮬레이션용 수정된 QEMU를 이미 포함하고 있음)를 선택하여 설치한다. 그림 1과 같이 이들 패키지를 선택한 후 Accept를 클릭하여 설치한다.

그림 1. 설치된 커널 찾기

 

이제 kvm-kmp-default 버전은 78_2.6.27.13_1-11.3이다. (78은 KVM 버전이고 나머지 정보는 커널 버전을 나타낸다.)

일반적인 KVM 설치는 다음 구성 요소로 구성된다.

  - 가상화 하드웨어를 관리하는 데 필요한 장치 드라이버(이 드라이버는 문자 장치 /dev/kvm을 통해 기능을 노출함)
  - PC 하드웨어 에뮬레이션을 위한 사용자 공간 구성 요소(현재 이 구성 요소는 사용자 공간에서 처리되며 약간 수정된 QEMU 프로세스임)
  - I/O 모델(copy-on-write 디스크 이미지 및 기타 QEMU 기능에 대한 지원과 함께 QEMU의 모델에서 직접 파생됨)

CPU가 KVM을 지원하는지 여부 판별하기

KVM은 x86 가상화 확장에 의존한다. 호환성을 확인하려면 grep vmx /proc/cpuinfo(AMD의 경우에는 grep svm /proc/cpuinfo) 명령을 실행한다. 출력이 Listing 1과 비슷하면 CPU가 KVM을 지원하고 그렇지 않으면 CPU가 KVM을 지원하지 않는다.

Listing 1. CPU에서 KVM 지원 확인하기

kvm:~ # grep vmx /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc arch_perfmon pebs bts pni
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca lahf_lm
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc arch_perfmon pebs bts pni
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca lahf_lm
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc arch_perfmon pebs bts pni
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca lahf_lm
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc arch_perfmon pebs bts pni
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca lahf_lm

소프트웨어가 성공적으로 설치되었는지 판별하기

lsmod | grep kvm 명령을 실행하여 KVM 모듈이 성공적으로 설치되었는지 확인한다. 결과가 이 출력과 비슷하면 KVM 모듈이 성공적으로 설치된 것이다.

kvm:~ # lsmod | grep kvm
kvm_intel 42604 0
kvm 150264 1 kvm_intel

2단계. 가상 서버 작성하기

이 섹션에서 다루는 내용은 다음과 같다.

1.원시 디스크 이미지 작성하기
2.이 이미지에 OS 설치하기
3.가상 서버 시작하기

원시 디스크 이미지 작성하기

원시 디스크 이미지를 작성하려면 다음 명령을 사용한다.

dd if=/dev/zero of=/mnt/kvmtest.img bs=1024 count=0 seek=$[10*1024*1024]

이 명령을 사용하면 이름이 kvmtest.img인 10GB 이미지가 작성된다.

이 이미지에 운영 체제 설치하기

이 이미지에 운영 체제를 설치하려면 다음 명령을 사용한다.

/usr/bin/qemu-kvm -hda /mnt/kvmtest.img -boot d -cdrom /mnt/SLES-11-DVD-i586-RC3-DVD1.iso -m 1024

소스에서 KVM을 빌드하는 것이 아니라 KVM 패키지를 설치하는 것이기 때문에 qemu-kvm은 사용할 수 있지만 qemu-system-x86_64는 사용할 수 없다.

-boot d는 CDROM에서 가상 서버를 부팅할 것임을 의미한다. -m 1024는 가상 서버에 1GB 메모리를 지정함을 의미한다.

이 명령을 실행하고 나면 운영 체제 설치 화면은 그림 2와 비슷하게 된다.

그림 2. OS 설치 화면

 

다음으로 일반적인 방식으로 운영 체제를 설치한다.

이제 가상 서버를 시작한다.

운영 체제를 성공적으로 설치한 후 다음 명령으로 가상 서버를 시작할 수 있다.

/usr/bin/qemu-kvm -hda /mnt/kvmtest.img -m 1024

실제 하드웨어에서 실행 중인 일반적인 서버처럼 서버가 실행된다.

3단계. 가상 서버 네트워크 구성하기

가상 서버를 작성하는 방법을 살펴봤지만 가상 서버의 네트워크를 작성하는 방법은 살펴보지 않았다. 이제 가상 서버의 브릿지 네트워크를 작성하는 방법에 대해 설명한다.

1.bridge-util 패키지 설치하기
2.브릿지 네트워크 인터페이스 작성하기
3.네트워크 제어를 위한 스크립트 작성하기
4.게스트 운영 체제 네트워크 시작하기
5.게스트 운영 체제 네트워크 구성하기

bridge-util 패키지 설치

브릿지 네트워크를 작성해야 하므로 운영 체제의 소프트웨어 관리 섹션에 bridge-util 패키지를 설치해야 한다. 패키지를 선택하고 설치할 위치가 그림 3에 표시된다.

그림 3. bridge-util 패키지 설치하기

 

브릿지 네트워크 인터페이스 빌드하기

운영 체제의 네트워크 구성 화면에서 Add a new network interface를 클릭한다(그림 4 참조).

그림 4. 새 네트워크 인터페이스 추가하기

 

그림 5와 같은 Hardware Dialog가 표시된다.

그림 5. 새 네트워크 인터페이스에 대한 Hardware Dialog

 

Bridge 장치 유형을 선택한 후 Next를 클릭하여 네트워크 구성을 계속 진행한다. 그림 6과 같은 구성 화면이 표시된다.

그림 6. 네트워크 구성 화면

 

"Bridged Devices" 아래에서 eth0을 선택한 후 브릿지 인터페이스의 정적 ID를 구성한다(이 구성은 eth0의 구성과 동일함)(그림 7 참조).

그림 7. 브릿지 인터페이스의 정적 IP 구성하기

 

이 작업을 수행한 후에는 eth0 구성이 지워지므로 Next를 클릭하여 계속 진행하면 네트워크 구성 화면으로 돌아간다. 새 브릿지 네트워크 인터페이스가 적성되었고 eth0 구성이 지워진 것을 확인할 수 있다.

네트워크 제어 스크립트 빌드하기

네트워크 제어 스크립트 컨텐츠의 모양은 Listing 2와 비슷하다.

Listing 2. 네트워크 제어 스크립트

#!/bin/sh
set -x
switch=br0
if [ -n "$1" ];then
tunctl -u `whoami` -t $1
ip link set $1 up
sleep 0.5s
brctl addif $switch $1
exit 0
else
echo "Error: no interface specified"
exit 1
fi

게스트 운영 체제 시작하기

다음 명령을 사용하여 네트워크 인터페이스와 함께 운영 체제를 시작한다.

/usr/bin/qemu-kvm -hda /mnt/kvmtest.img -m 1024 -net nic,macaddr=52:54:00:12:34:56 -net tap,script=/etc/qemu-ifup

가상 서버를 시작할 때 네트워크 인터페이스를 지정한다.

게스트 운영 체제 네트워크 구성하기

게스트 운영 체제가 부트되고 나면 일반적인 방식으로 네트워크를 구성한다.

드디어 KVM에 빌드된 가상 서버를 작성했다.

 

 

필자소개

Da Shuang He는 중국 상해에 있는 IBM 중국 개발 연구소의 소프트웨어 엔지니어다. 현재 시스템 관리 소프트웨어를 개발하며 스스로 부팅할 수 있는 서버와 원격 시스템 설치, 그리고 전원 관리와 관련된 일을 한다.

출처 : 한국 IBM

제공 : DB포탈사이트 DBguide.net

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 하이퍼바이져 스터디 관련 Q&A 게시판 입니다. woos 2016.04.09 237
195 안녕하십니까,이번에 졸작으로... [1] 유형균 2011.07.08 4954
194 KGDB 디버깅 정말 열심히 했으나 결국 실패 했습니다. 용석씨 결과 좀 알려주세요~~~ [1] 김연희 2011.07.04 5805
193 7/2 스터디 약간 정리.. :) 김준엽 2011.07.03 3497
192 KGDB Debugging with USB 황선욱 2011.07.02 3443
191 Co-Designed VM에 대해서 설명좀 부탁드려요~ 노서영 2011.06.25 3203
190 금주 토요일 스터디는 정상 진행 하는것이죠? 리플 달아주세요~ [4] 김연희 2011.06.24 2779
189 이번주 일이 생겨서 스터디 불참해야 될거 같습니다. 이상철 2011.06.10 6750
188 금일은 개인 사정으로 참석 못할거 같습니다;;; 김연희 2011.05.28 2717
187 [XEN] 5/26 스터디 [2] 문대혁 2011.05.26 7012
» [펌] KVM 기반 가상 서버 작성하기 [1] 황선욱 2011.05.24 7132
185 차주 스터디 과제 [2] 황선욱 2011.05.24 2909
184 [펌] libvirt 가상화 라이브러리 분석 황선욱 2011.05.24 20835
183 안녕하세요! [1] 동선 2011.05.20 2973
182 동선님의 요청으로 [1] 최성용 2011.05.07 3229
181 [XEN]금주 스터디 참석 여부 확인 [1] 문대혁 2011.05.06 5093
180 지난 시간에 Inst -> assembly code 로 변환하는거에 대한.. [1] 구사무엘 2011.04.18 5119
179 코드의 직교성에 대해 잘 나와있는 글 [3] 동선 2011.04.16 3068
178 디버깅 n배 빠르게 하는 방법에 대한 글 동선 2011.04.16 2499
177 어드레싱 모드에 대해 잘 나와있는 글 동선 2011.04.16 3537
176 1.7 The Rest of the Book 부분 요약해봤습니다. [3] 김준엽 2011.04.11 2988
XE Login