강좌
클라우드/리눅스에 관한 강좌입니다.
클라우드 분류

리눅스마스터1급 : 리눅스 기반 가상화 KVM 서비스 구축

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터1: 리눅스 기반 가상화 KVM 서비스 구축

 

 




1) KVM 구축

 

 

앞에서 설명하였듯 KVMCPU에서 가상화를 지원해야한다.

 

 

 

컴퓨터의 CPU가 가상화를 제공하는지는 CPU 제조사사이트의 CPU 스펙을 통해서 확인 할 수 있으며, 다음 리눅스 명령어를 통해서도 확인 할 수 있다.

 

 

 

 

 

 

 

 

 

[root@SULinux-Virt ~]# egrep "vmx|svm" /proc/cpuinfo

 

 

 

 

 

위 명령은 CPU정보를 담고있는 cpuinfo 파일에서 "vmx" 또는 “svm" CPU 플래그를 확인한 것이다.

 

 

 

둘 중 하나는 있어야 가상화를 지원하는 CPU라고 볼 수 있다.

 

 

 

만약 플래그가 확인 되었는데도 KVM이 작동하지 않는다면, BIOS에서 CPU 가상화 기능을 활성화 해 주어야 한다.

 

 

 

 

KVM은 대부분의 리눅스 배포판에서 배포하는 커널에 포함되어 있으며, 관련 프로그램은 패키지 형태로 제공된다.

 

 

 

패키지 관리도구인 yum을 통해 KVM과 관련 프로그램을 설치 해 보도록 하자.

 

 

 

 

 

 

[root@SULinux-Virt ~]# yum groupinstall "Virtualization" "Virtualization Client" \

"Virtualization Platform"

 

 

 

 

 

 

yum의 패키지그룹을 설치할 수 있는 기능을 이용하여 가상화 관련 패키지 그룹을 설치 한다.

 

 

 

어떤 패키지가 설치되는지 확인해 보자.

 

 

Virtualization 그룹

- qemu-kvm : KVM의 사용자 공간 구성요소

 

 

 

Virtualization Client 그룹

- python-virtinst : 가상머신을 설치하기 위한 Python 모듈 및 유틸리티- virt-manager : 가상머신 매니저 프로그램(GUI)- virt-viewer : 가상머신 뷰어- virt-top : top과 비슷한 가상머신 상태를 확인하기 위한 CUI 프로그램

 

 

 

Virtualization Platform 그룹

- libvirt : 간단한 가상화 API를 제공하기 위한 라이브러리- libvirt-client : 사용자 환경에서의 libvirt 라이브러리 및 유틸리티

 

KVM관련 패키지 설치 후 "libvirtd" 데몬을 실행시켜 준다.

 

 

 

 

 

 

 

 

 

[root@SULinux-Virt ~]# service libvirtd start

libvirtd 데몬을 시작 중: [ OK ]

 

 

 

 

 

 

 

 

네트워크 브릿지 설정

 

가상머신을 생성하고 기존 네트워크 인터페이스를 공유하는 경우가 많이 있다.

 

 

 

이러한 경우 브릿지를 생성해 주어야 한다.

 

 

 

브릿지를 생성하지 않으면 하나의 호스트 머신위에 올라가는 여러 가상머신사이의 통신이 되지 않는다.

 

 

 

물론 호스트 머신과 가상머신 사이에도 통신이 되지 않는다.

 

 

 

다음과 같이 브릿지를 생성하자.

 

 

/etc/sysconfig/network-scripts/ifcfg-br0 파일을 생성하여 다음과 같이 편집한다.

 

 

 

 

 

 

 

 

 

DEVICE=br0

ONBOOT=yes

TYPE=Bridge

IPADDR=IP주소

NETMASK=넷마스크

NETWORK=네트워크주소

GATEWAY=기본게이트웨이 주소

 

 

 

 

 

 

위에서 생성할 br0 인터페이스와 연결될 실제 인터페이스를 다음과 같이 설정하자.

 

 

/etc/sysconfig/network-scripts/ifcfg-eth1 파일을 편집하여 다음과 같이 수정한다.

 

 

 

 

 

 

 

 

 

DEVICE=eth1

ONBOOT=yes

BRIDGE=br0

 

 

 

 

 

 

위와 같이 설정하면 실제 인터페이스 eth1과 연결되는 브릿지 인터페이스 br0을 설정하는 것이다.

 

 

 

위와 같이 설정하였다면 다음과 같이 네트워크를 재시작한다.

 

 

 

 

 

 

 

 

 

[root@SULinux-Virt ~]# service network restart

인터페이스 eth1 ()를 종료 중: bridge br0 does not exist!

[ OK ]

loopback 인터페이스 종료 중: [ OK ]

loopback 인터페이스 활성화중 입니다: [ OK ]

eth1 인터페이스 활성화중 입니다: [ OK ]

br0 인터페이스 활성화중 입니다: [ OK ]

 

 

 

 

 

 

위와 같이 설치가 되었다면, KVM의 가상머신, 가상 스토리지, 가상 네트워크등 대부분의 자원 및 기능을 libvirt를 통해 관리하게 될 것이다.

 

 

 

libvirtvirt-manager에 인터페이스를 제공하게 된다.

 

 

 

우리는 virt-manager를 이용하여 편리하게 가상화를 관리할 수 있다.

 

 

 

2) 가상머신 생성 및 게스트 OS 설치

 

 

가상머신을 생성하는 방법은 여러 가지가 있지만 위에서 설치한 virt-manager를 사용하여 가상머신 생성 및 게스트 OS를 설치해 보도록 하자.

 

 

 

먼저 Xwindow 상태에서 가상머신 관리자를 실행 시켜 보도록 하자.

 

 

 

 

 

 

 

[root@SULinux-Virt ~]# virt-manager

 

 

 

 

 

 

 

이 가상머신 관리자는 libvirtAPI를 이용하여 하이퍼바이저(Xen, KVM)를 관리한다.

 

 

 

여러 하이퍼바이저에 접속할 수 있다.

 

 

 

 

26d2e055822c151092e84cbe15845354_1687159966_0114.png
 

 

 

 

위 그림은 가상머신 관리자를 실행 시킨 메인 화면이다.

 

 

 

먼저 localhost의 하이퍼바이저에 연결한다.

 

 

 

이후 새로운 가상머신을 생성하기 위해 를 클릭한다.

 

 

 

 

 

26d2e055822c151092e84cbe15845354_1687159979_7842.png
 

 

 

 

가상머신의 이름을 입력하고, 운영체제를 설치하는 방법을 선택한다.

 

 

 

운영체제를 설치하는 방법은 다음과 같다.

 

 

 

여기서는 다운로드 받아놓은 운영체제 설치CDISO이미지를 사용하기로 한다.

 

 

 

 

 

로컬설치매체 :

운영체제의 ISO이미지 또는 로컬 DVDROM을 이용한 설치

 

 

네트워크 설치 :

운영체제 설치 파일이 있는 서버에 HTTP, FTP, NFS 프로토콜을 이용하여 설치

 

 

네트워크 부트 :

PXE를 이용한 네트워크 부트

 

 

기본 디스크 이미지 :

이미 운영체제가 설치된 디스크 이미지를 불러 온다.

 

 

 

이 방법은 다음에 나오는 디스크 이미지를 생성하지 않고 기존에 사용되던 이미지를 이용하여 가상머신을 생성하는 방법

 

26d2e055822c151092e84cbe15845354_1687160000_8057.png
 

 

 

 

설치 방법을 ISO 이미지 또는 CDROM을 선택하였기 때문에 위와 같이 로컬 CDROM 또는 ISO 파일을 선택할 수 있다.

 

 

 

이미 서버에 다운로드 받아놓은 경로를 검색하여 위 그림과 같이 지정해 준다.

 

 

 

 

다음으로 운영체제 종류를 선택한다.

 

 

 

Windows, UNIX, Solaris, Linux, Others를 선택할 수 있다.

 

 

 

다음으로 각 운영체제의 버전을 선택한다.

 

 

 

운영체제의 버전까지 선택하는 이유는 운영체제의 버전에 따라 지원하는 가상장치가 다르기 때문에 최적화 시키기 위해 버전까지 선택한다.

 

 

 

만약 설치하고자 하는 운영체제의 버전이 없다면 비슷하거나 낮은 버전을 선택하면 무난하게 설치할 수 있다.

 

 

 

 

 

26d2e055822c151092e84cbe15845354_1687160024_0506.png
 

 

 

CPU와 메모리를 할당한다.

 

 

 

KVM은 호스트 머신의 CPU 및 메모리용량 보다 더 많이 가상 머신에 할당할 수 있는 오버커밋(overcommit) 기능을 제공한다.

 

 

 

KVM은 가상CPU160개 까지 할당 할 수 있다.

 

 

 

그렇지만 호스트 머신의 CPU코어 수 보다 많이 할당할 경우 성능이 저하 될 수 있다.

 

 

 

메모리의 경우도 호스트 머신의 메모리 보다 더 많은 양을 할당할 수 있으나, 메모리 부족이 발생할 수 있으니 주의한다.

 

 

 

 

26d2e055822c151092e84cbe15845354_1687160041_3881.png
 

 

 

 

가상 디스크 이미지를 생성하는 단계이다.

 

 

 

호스트 머신의 기본 저장소에 이미지를 생성할 수 있으나 다른 저장소 선택 및 가상화 이미지의 종류를 선택하기 위해 관리중이거나 기존의 저장소 선택에서 검색을 클릭 한다.

 

 

 

26d2e055822c151092e84cbe15845354_1687160057_1125.png
 

 

 

관리중인 저장소가 나타났다.

 

 

 

저장소(Storage Pool)를 추가/제거/관리 하기위해서는가상머신 관리자의 메인 화면에서 "편집“->”Connection Details"->"저장소를 선택하여 관리할 수 있다.

 

 

 

생성할 수 있는 저장소의 종류는 다음과 같다.

 

 

 

 

 

dir : 일반적인 파일시스템의 디렉토리 (기본값)

 

disk : 물리적인 디스크 드라이브

 

fs : 미리 포맷된 블록 디바이스

 

iscsi : iSCSI Taget

 

logical : LVM 로지컬 볼륨

 

mpath : 멀티페스 디바이스 에뮬레이터

 

netfs : 네트워크 디렉토리

 

scsi : 스카시 호스트 아답터

 

 

 

 

새 볼륨을 선택하여 새로운 저장소를 생성한다.

 

 

 

 

 

26d2e055822c151092e84cbe15845354_1687160075_4582.png
 

 

 

가상 디스크 이미지 파일이름을 작성하고, 이미지 형식을 설정한다.

 

 

 

virt-manager에서 선택할 수 있는 가상화 디스크 이미지 형식은 다음과 같다.

 

 

 

 

 

raw : raw 디스크 이미지 포맷(기본값), 이 포맷은 구조가 간단하여 다른 에뮬레이터에도 쉽게 적용된다.

 

 

 

대상 파일시스템이 홀(hole)들을 지원한다면(예를 들면 리눅스의 ext2, ext3 윈도우의 NTFS) 기록된 섹터들만 공간을 차지할 것이다.

 

 

 

실제로 기록된 크기를 알기 위해서는 qemu-img info 또는 "ls -ls" 명령을 사용하면 된다.

 

 

 

 

qcow2(QEMU Copy On Write) : 현재 사용되는 QEMU의 이미지 형식으로서 가장 많은 기능을 가지는 포맷이다.

 

 

 

윈도우와 같이 대상 파일시스템이 홀을 지원하지 않는 경우 더 작은 크기의 이미지를 생성하거나, 선택적인 AES 암호화, zlib 기반 압축, 다중 VM 스냅샷 생성 등의 목적으로 사용할 수 있다.

 

 

 

 

qed(QEMU Enhanced Disk) : 새로운 QEMU의 향상된 이미지 형식이다.

 

 

 

QCOW2를 비롯한 다른 가상화 디스크 포맷보다 빠르게 디자인되었다.

 

 

 

현재 버전은 완전히 비동기 I/O패스를 지원하고, 강력한 무결성을 제공한다.

 

 

 

또한 Backing 파일과 Sparse 파일을 지원한다.

 

 

 

 

가상화 디스크 이미지 형식은 현재 가장 많이 사용되는 qcow2를 선택한다.

 

 

 

가상화 이미지의 최대 용량을 설정한다.

 

 

 

qcow2는 가상머신에서 가상 디스크에 기록이 될 때 이미지용량이 증가된다.

 

 

 

그렇기 때문에 물리적인 디스크 용량을 효율적으로 사용할 수 있다.

 

 

 

 

 

26d2e055822c151092e84cbe15845354_1687160091_9547.png
 

 

 

새롭게 생성한 볼륨을 선택한다.

 

 

 

 

26d2e055822c151092e84cbe15845354_1687160104_4755.png
 

 

 

마지막 단계로 설정한 내역을 확인한다.

 

 

 

완료를 선택하게 되면, 가상머신 관리자는 가상화 디스크 이미지를 생성하고 가상머신을 설정한 다음 가상 머신을 실행시켜 앞에서 설정한 운영체제 이미지를 로드 시켜 다음과 같이 게스트 운영체제를 설치할 수 있다.

 

 

 

위와 같이 게스트 운영체제 설치 화면이 나타나면 각 게스트 운영체제의 설치 방법에 따라 설치를 진행한다.

 

 

 

 

26d2e055822c151092e84cbe15845354_1687160117_1724.png
 

 

 

가상머신이 실행되면 가상머신 관리자의 메인 화면에는 실행중인 가상머신이 위 그림과 같이 나타나게 된다.

 

 

 

 

가상머신에 대한 설정내역은 /etc/libvirt/qemu/ 디렉토리에 각 가상머신의 이름으로 설정파일이 저장되게 된다.

 

 

 

가상머신 관리자에서 지원되지 않는 고급 설정은 가상머신설정파일(*.xml)을 수정하여 설정할 수 있다.

 

 

 

 

 

 

 

 

 

[root@SULinux-Virt qemu]# ls -l /etc/libvirt/qemu/

합계 8

-rw-------. 1 root root 2431 2013-08-24 07:32 SULinux-Guest1.xml

drwx------. 3 root root 4096 2013-08-24 07:02 networks

 

 

 

 

 

 

 

기본적으로 게스트 머신의 가상화 디스크 이미지는 /var/lib/libvirt/images/ 디렉토리에 가상머신 이름으로 생성된다.

 

 

 

 

 

 

 

 

[root@SULinux-Virt qemu]# ls -lh /var/lib/libvirt/images/

합계 3.7G

-rw-------. 1 root root 3.7G 2013-08-24 07:39 SULinux-Guest1.img

 

 

 

 

 

 

 

앞에서 설명하였듯 KVM의 가상머신은 하나의 프로세스로 호스트 운영체제에 보이게 된다.

 

 

 

다음은 ps 명령어로 가상머신을 확인하였고, 상세한 옵션들을 확인할 수 있다.

 

 

 

 

 

 

 

 

 

[root@SULinux-Virt qemu]# ps -ef |grep kvm

root 6625 2 0 07:02 ? 00:00:00 [kvm-irqfd-clean]

qemu 14665 1 20 07:42 ? 00:00:00 /usr/libexec/qemu-kvm -name SULinux-Guest1 -S -M rhel6.4.0 -enable-kvm -m 1024 -smp 4,sockets=4,cores=1,threads=1 -uuid cc95de32-3abc-946e-2bc0-2e79d53793b7 -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/SULinux-Guest1.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/var/lib/libvirt/images/SULinux-Guest1.img,if=none,id=drive-ide0-0-0,format=qcow2,cache=none -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -drive if=none,media=cdrom,id=drive-ide0-1-0,readonly=on,format=raw -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -netdev tap,fd=23,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:91:f7:17,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -vnc 127.0.0.1:0 -vga cirrus -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5

 

 

 

 

 

 

 

가상머신을 관리할 수 있는 명령어인 virsh를 통해서도 가상머신의 상태를 확인할 수 있고, 상세한 설정을 할 수 있다.

 

 

 

 

 

 

 

 

 

[root@SULinux-Virt qemu]# virsh list

Id 이름 상태

----------------------------------------------------

4 SULinux-Guest1 실행중

 

 

 

 

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,803 개
  • 현재 접속자 :  89 명