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 커널에 포함되어 있음)이 이미 포함되어 있다.
가상 서버를 작동하는 데 필요한 기본적인 세 가지 단계는 다음과 같다.
- 운영 체제와 필요한 소프트웨어를 설치한다.
- 가상 서버를 작성한다.
- 가상 서버 네트워크를 구성한다.
이 섹션에서 다루는 내용은 다음과 같다.
- 운영 체제와 필요한 소프트웨어 설치하기
- CPU가 KVM을 지원하는지 여부 판별하기
- 소프트웨어가 올바르게 설치되었는지 확인하기
운영 체제를 설치한 후 다음 명령을 사용하여 설치된 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의 모델에서 직접 파생됨)
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 |
이 섹션에서 다루는 내용은 다음과 같다.
- 원시 디스크 이미지 작성하기
- 이 이미지에 OS 설치하기
- 가상 서버 시작하기
원시 디스크 이미지를 작성하려면 다음 명령을 사용한다.
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
실제 하드웨어에서 실행 중인 일반적인 서버처럼 서버가 실행된다.
가상 서버를 작성하는 방법을 살펴봤지만 가상 서버의 네트워크를 작성하는 방법은 살펴보지 않았다. 이제 가상 서버의 브릿지 네트워크를 작성하는 방법에 대해 설명한다.
- 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에 빌드된 가상 서버를 작성했다.
교육
- 일반적인 오픈 소스 시스템 에뮬레이터이자
가상화 프로그램인 QEMU에 대해
자세히 살펴보자.
- KVM에서도
자세한 내용을 살펴보자.
- developerWorks 팟캐스트
"Linux KVM을 사용한 환경 빌드에 대한 David Ashley의 팟캐스트"
(developerWorks, 2009년 7월)에서는 유연한 KVM을 사용하여 온디멘드 소프트웨어 빌드 서비스를
만드는 것에 대해 설명한다.
- KVM 아키텍처와 KVM 아키텍처가 커널과
통합되면 Linux 사용 방식에 어떤 변화가 있는지에 대해 설명하는
"리눅스 커널 가상 기계 탐험"
(developerWorks, 2007년 4월)과 KVM을 사용하여 빌드 시스템을 빌드하는
방법을 보여 주는 실습인 "Create an ooRexx build environment on Linux KVM"
(developerWorks, 2009년 7월)(이전 참고자료에서 언급한 팟캐스트와 같은 맥락임)은
KVM 사용에 대한 두 가지 좋은 자료이다.
- developerWorks
Linux 영역에서는 Linux 개발자에게 도움이 되는 여러 가지 리소스를 제공하고 있으며
가장 인기 있는 기사와 튜토리얼도 볼 수 있다.
- developerWorks에 있는
Linux 기사와
Linux 튜토리얼을
모두 볼 수 있다.
- developerWorks 기술 행사 및 웹 캐스트를 통해 최신 정보를 얻을 수 있다.
제품 및 기술 얻기
- IBM은 BladeCenter 서버에
대한 수많은 문서와 지원을 제공한다.
- developerWorks에서 직접 다운로드할 수 있는 IBM
시험판 소프트웨어를 사용하여 Linux와 관련된 후속 개발 프로젝트를 구현해 볼 수 있다.
토론
- developerWorks community에 참여하자.
개발자 중심 블로그, 포럼, 그룹 및 Wiki 검색 중에 다른 developerWorks
사용자와 의견을 교환해 보자.