본문 바로가기

Engineering/Redhat Linux

[Redhat Linux] KVM을 이용하여 가상화 환경 구축하기

 

 

KVM

Kernel-based Virtual Machine의 약어로, 오픈소스 가상화 기술이다. 리눅스를 하이퍼바이저로써 이용할 수 있게 해주는 솔루션이다. KVM은 리눅스 커널의 일부이기 때문에 리눅스 커널 자원을 공유하고, 이를 본인의 리소스로써 활용할 수 있다.


구축

 

Preliminary Enviroment

  • BIOS > Virtualization technology - on
  • OS: Rocky 8.8
  • 하나 이상의 Routed port

네트워크 

 

위 그림과 같이 kvm에서 관리하는 vm들이 호스트 서버와 네트워크 자원을 공유하여 사용할 수 있게끔, bridge interface를 생성한다.

 

[기존 인터페이스]

$ cat /etc/sysconfig/network-scripts/ifcfg-eno1

TYPE=Ethernet
DEFROUTE=yes
NAME=eno1
DEVICE=eno1
ONBOOT=yes
BRIDGE=br0

 

기존 인터페이스에는 IP 설정 정보가 포함되지 않는다. BRIDGE 옵션을 추가하여 브릿지 인터페이스 명을 명시해준다.

 

[브릿지 인터페이스]

$ cat ifcfg-br0
TYPE=Bridge
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=172.16.22.132
NETMASK=255.255.0.0
GATEWAY=172.16.0.1
BOOTPROTO=static

 

TYPE을 Bridge로 명시하고, 브릿지 인터페이스에 IP 설정 정보를 포함한다.


KVM 설치

 

kvm 관련 rpm 다운로드

$ yum install -y qemu-kvm libvirt @virt virt-install virt-manager libvirt-devel

 

libvirtd 구동

$ systemctl enable libvirtd
$ systemctl start libvirtd

vnc 관련 rpm 다운로드

$ yum install -y tiger-vncserver

$ yum groupinstall -y "Server with GUI"

 

vncserver passwd 설정

 

tiger-vncserver 설치 후 최초에 'vncserver' 를 입력하여 vnc client가 vnc server에 접근 시 입력할 패스워드를 설정한다.

$ vncserver

WARNING: vncserver has been replaced by a systemd unit and is now considered deprecated and removed in upstream.
Please read /usr/share/doc/tigervnc/HOWTO.md for more information.

You will require a password to access your desktops.

Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used

 

vncserver 구동

vncserver 구동 후, vnc client가 접근할 포트 확인

$ vncserver :1 -geometry 1680x1050

$ ps -ef | grep Xvnc
root     1617241       1  0 Sep30 ?        00:02:34 /usr/bin/Xvnc :1 -auth /root/.Xauthority -desktop Rocky-UEFI:1 (root) -fp catalogue:/etc/X11/fontpath.d -geometry 1024x768 -pn -rfbauth /root/.vnc/passwd -rfbport 5901
root     1617248       1  0 Sep30 ?        00:00:00 /bin/sh /root/.vnc/xstartup

$ netstat -anp | grep 1617241
tcp        0      0 0.0.0.0:5901            0.0.0.0:*               LISTEN      1617241/Xvnc

 

 


vncviewer 다운로드

하기 웹 페이지에서 vnc server에 접근할 vnc client 툴 다운로드

https://www.realvnc.com/en/connect/download/viewer/

 

vncserver 접근

vncserver의 ip와 port를 입력하여 접근한다.

 

 

GUI 화면 기본 설정을 마친 후 마무리.

 


VM 생성

 

1) VM 생성을 하기 위해 'virt-manager'를 실행

$ virt-manager

 

 

2) New Virtual Machine

 

3) 설치에 사용할 iso 이미지를 호스트 서버에 올리고 선택

4) 메모리와 CPU 자원 할당

5) 스토리지 볼륨 생성 후 할당

 

5) VM 이름 지정 + 네트워크 인터페이스 할당 후 생성을 마친다

 

6) customize configuration을 본인 환경에 알맞게 설정 후 종료

 


Appendix

 

  • KVM 위에 동작 중인 VM 확인
$ virsh list

 Id   Name           State
------------------------------
 1    test1        running
 2    test2        running
 3    test3        running

virsh list --all 명령어로는 기동 중이지 않은 vm까지 확인 가능

 

 

  • vncserver 기동 및 정지
$ vncserver :1

$ vncserver -kill :1

콜론(:) 다음에 오는 번호는 vncserver를 reflect할 디스플레이 번호임. -geometry 옵션을 사용하면 디스플레이 배율 조정 가능

 

 

  • vncserver 구동 포트 변경

나의 경우, vncserver default 포트와 kvm의 default 포트가 겹치므로, vncserver 구동 포트를 바꿔줘야 했다.

$ cat /usr/bin/vncserver | grep vncPort

$vncPort = 5900 + $displayNumber;

/usr/bin/vncserver에서 '$vncPort'의 값을 변경

 

 

  • vm cpu pinning 설정

KVM은 기본적으로 커널 자원을 공유한다. 그러므로 CPU 자원도 다른 모든 프로세스와 공유한다. vm이 특정 cpu 만 사용하도록 cpu pinning 설정을 할 수 있다.

#Before
$ cat /etc/libvirt/qemu/test1.xml | grep vcpu

   <vcpu placement='static'>4</vcpu>
   
 #After  
  $ cat /etc/libvirt/qemu/test1.xml | grep vcpu
  
   <vcpu placement='static' cpuset='0-3'>4</vcpu>
   
  $ systemctl restart libvirtd

xml 형식으로 작성된 vm의 설정 정보를 편집기를 열어 수정한다.

 

#Before
$ virsh vcpupin 1

 VCPU   CPU Affinity
----------------------
 0      0-39
 1      0-39
 2      0-39
 3      0-39
 
 #After
 $ virsh vcpupin 1
 VCPU   CPU Affinity
----------------------
 0      0-3
 1      0-3
 2      0-3
 3      0-3

0번부터 39번 cpu를 공유하여 사용하던 vm의 cpu 점유 정보가 변경된 것을 확인할 수 있다.