본문 바로가기
AWS Cloud School 8기/서버가상화_클라우드 이미지

KVM(Kernel-Based Virtual Machine)/ kvmnet

by YUNZEE 2025. 2. 20.
728x90

 

📌 하이퍼바이저(Hypervisor)란?

하이퍼바이저(Hypervisor)는 하나의 컴퓨터에서 여러 개의 가상 머신(VM)을 실행할 수 있도록 해주는 소프트웨어 또는 시스템.

✔️ 쉽게 말해서, 컴퓨터 안에 여러 개의 가상 컴퓨터를 만들고 운영할 수 있도록 해주는 기술

 

📌호스트 운영체제(Host OS) (Type 2 하이퍼바이저에서만 존재)

    • 물리 서버에서 실행되는 기본 운영체제.
  • Type 1 하이퍼바이저(VMware ESXi, Hyper-V, KVM)에서는 필요 없음.  (기업에서 많이 사용)
    • VMware ESXi → 데이터센터에서 서버를 가상화할 때 사용
    • Microsoft Hyper-V → 윈도우 서버에서 사용
    • KVM (Linux Kernel-based Virtual Machine) → 리눅스 기반 서버에서 사용 
  • Type 2 하이퍼바이저(VirtualBox, VMware Workstation)에서는 필수. (일반 사용자용)
    • Oracle VirtualBox → 개인이 PC에서 가상 머신 실행할 때 사용
    • VMware Workstation → 개발자가 테스트용으로 사용

📌 KVM(Kernel-Based Virtual Machine)

KVM (Kernel-Based Virtual Machine)은 Type 1 하이퍼바이저이지만 Type 2처럼 동작할 수도 있음

  • 원래는 Type 2처럼 보임
    • KVM은 리눅스 커널의 일부이므로, 리눅스가 기본적으로 실행된 상태에서 KVM이 작동함
    • 즉, 리눅스가 실행된 상태에서 KVM을 활성화하면 가상 머신을 운영할 수 있어
    • 그래서 겉으로 보면 VirtualBox처럼 Type 2 하이퍼바이저처럼 보일 수도 있음
  • 실제로는 Type 1 하이퍼바이저
    • KVM을 활성화하면 리눅스 커널이 하이퍼바이저로 전환
    • 즉, 리눅스 자체가 하이퍼바이저 역할을 수행하면서 VM을 직접 관리
    • 따라서 하드웨어 가상화 기능(Intel VT-x, AMD-V)을 활용해서 성능이 높고 효율적

요약

  • KVM은 리눅스 커널을 하이퍼바이저로 변환하는 Type 1 하이퍼바이저
  • 하지만 리눅스 위에서 실행되므로 Type 2처럼 보일 수도 있음
  • KVM을 활성화하면 리눅스 자체가 하이퍼바이저로 동작하며, 각 VM을 프로세스로 관리함
  • Intel VT-x, AMD-V 같은 하드웨어 가상화 기술을 사용하여 높은 성능을 제공

📌 컨테이너 가상화( Docker & Kubernetes )

가상화에는 두 가지 주요 방식이 있음
1️⃣ 하이퍼바이저 기반 가상화 → KVM, VMware, VirtualBox 등
2️⃣ 컨테이너 기반 가상화 → Docker, Kubernetes

Docker란?

Docker는 컨테이너를 쉽게 생성하고 관리할 수 있도록 도와주는 플랫폼

  • 기존 VM처럼 OS 전체를 가상화하지 않고, 하나의 OS 커널을 공유하면서 독립적인 실행 환경 제공
    • OS 커널: OS의 핵심은 하드웨어와 소프트웨어를 관리함.
  • 컨테이너 단위로 애플리케이션을 패키징하여 배포, 실행, 확장을 간편하게 함
  • "이미지(Image)"를 사용해 동일한 환경을 어디서든 실행 가능

Kubernetes란?

Docker로 컨테이너를 만들고 실행할 수 있지만, 여러 개의 컨테이너를 효과적으로 관리하려면 Kubernetes가 필요

🎯 Kubernetes(K8s)는 컨테이너 오케스트레이션 툴임

  • 여러 개의 컨테이너를 자동으로 배포, 확장, 로드 밸런싱, 복구 등을 수행
  • 대규모 시스템에서 Docker 컨테이너를 효율적으로 운영 가능

🚀 Kubernetes 주요 개념

  • Pod: 가장 작은 배포 단위 (컨테이너 1개 이상을 포함)
  • Node: 컨테이너를 실행하는 서버
  • Cluster: 여러 개의 노드가 모여 있는 환경
  • Deployment: 애플리케이션을 배포하는 설정
  • Service: 컨테이너 간 네트워크 연결 및 로드 밸런싱 관리

컨테이너 가상화는 기존의 가상 머신(VM) 방식과는 다르게, OS 커널을 공유하며 독립적인 환경을 제공하는 가상화 방식임.

- guest os에 linux를 설치해 주면 kvm이 같이 설치가 됨

 

실습

서버 구성

더보기

- 2x2 core 8GB, 50GB, IP 211.183.3.50 /24

- GUI 환경으로 구성하기 위해 minimal 말고 DVD로

- 물리서버(host machine)로 가정

  • 노트북 위에 vmware workstation이라는 일종의 하이퍼바이저가 설치되어있고, 이 프로그램을 통해 이미 kvm이라는 이름의 vm을 생성함
  • 앞으로 이 kvm이라는 이름의 서버위에 가상화앱을 설치를 할 예정임. 결론적으로 가상화 위에 가상화가 되어있긴 하지만, 우리는 kvm이라는 이름의 vm을 ‘물리서버’라고 가정하고있음. 

- root로 로그인

- 절전모드나 화면보호기 비활성화

- 호스트의 가상화 기술(intel-VT)

- 체크가 되어있어야 가상화가 잘 실행됨.

- 2분이면 끝날 설치가 안된다면 그건 내가 체크 안 했을 경우가 있음 

- 호스트머신의 지원이 필요

 

# kvm서버에는 반드시 저게 활성화되어 있는지 확인

- 방화벽과 셀리눅스를 끄고 레포 수정함

- 네트워크 매니저

- 네트워크를 수정하는 방법

1. 네트워크 스크립트 파일을 수정하는 방법(ifcfg파일)

2. nmtui

3. NetworkManager

=> 1-3이 충돌 나기 때문에 우리는 NetworkManager를 비활성화해야 함.

[root@KVM1 ~]# systemctl stop NetworkManager
[root@KVM1 ~]# systemctl disable NetworkManager

- 없어진 걸 확인할 수 있음

- NIC의 이름을(ens32) eth0으로 수정

- 인터페이스 이름을 통일시키고 싶기도 하고, br0라는 가상의 인터페이스를 만들어서 vmware-workstation의 브릿지 같은 대역을 만들 예정

인터페이스 이름 수정

NIC의 이름(ens32)을 eth0으로 수정해 보자.

- 인터페이스 이름을 통일시키고 싶기도 하고, br0라는 가상의 인터페이스를 만들어서 vmware-workstation의 브릿지 같은 대역을 만들고 싶기 때문임

더보기

[root@KVM1 ~]# cd /etc/sysconfig/network-scripts/
[root@KVM1 network-scripts]# ls | grep ifcfg
ifcfg-ens32 # 전에 것을 지우고 -> ifcfg-eth0
ifcfg-lo

 

# centos에선 장치(ens32, lo)에 해당하는 설정파일이 존재함.


[root@KVM1 network-scripts]# mv ifcfg-ens32 ifcfg-eth0

[root@KVM1 network-scripts]# vi ifcfg-eth0 

- 불필요한 부분은 삭제하고 위와 같이 구성함

- NM_CONTROLLED=no , 네트워크매니저의 영향을 받지 않겠다.

 

 [root@KVM1 network-scripts]# vi /etc/default/grub 

- 부트로더(grub)에서 장치 네이밍 방식 변경


[root@KVM1 network-scripts]# grub2-mkconfig -o /boot/grub2/grub.cfg

- 수정한 내용을 반영 후, 재부팅 후에 반영됨

[root@KVM1 network-scripts]# init 0

- kvm이라는 하이퍼바이저가 호스트의 자원을 끌어다 쓸 수 있게 도와주는 '가상화 기술'을 활성화

- kvm이라는 하이퍼바이저가 호스트의 자원을 잘 끌어다 쓸 수 있게 도와주는 '가상화 기술'을 활성화

- eth0으로 이름이 바뀌었는지도 확인해 줘야 됨 

KVM

더보기

[root@KVM1 ~]# yum install -y qemu-kvm libvirt virt-install virt-manager virt-viewer

# KVM 관련 패키지 설치.

# qemu = 하드웨어 자원을 에뮬레이션 하여 가상화를 지원

# libvirt = kvm앱

# virt-install = VM 설치하는 기능.

# virt-manager = VM관리자(프로그램)

# virt-viewer = 콘솔화면제공(vmware workstation에서 vm을 만들면 화면이 보이는 것처럼)

 

[root@KVM1 ~]# vi /etc/libvirt/qemu.conf

 - set nu 하면 번호 나오고

- shift + ; 하고 원하는 줄 번호를 치면 그 줄로 넘어감

 

[root@KVM1 ~]# systemctl restart libvirtd
[root@KVM1 ~]# systemctl enable libvirtd

 - virt-manager

= vmware workstation이랑 비슷

VM 생성

더보기

wget https://ftp.yz.yamagata-u.ac.jp/pub/vyos/iso/release/1.1.7/vyos-1.1.7-amd64.iso

- VM을 생성해 보기 위해 상대적으로 가벼운 vyos.iso파일을 다운로드하기

- 설치할 운영체제 설치 파일(iso)의 위치

[root@KVM1 ~]# mv vyos-1.1.7-amd64.iso /var/lib/libvirt/images/vyos.iso

- 이미지 이름 변경 및 이동

 

- iso파일의 위치

- vmware workstation은 폴더를 따로 만들어서 그 안에 다양한 파일들로 vm을 구성하는데, 그 다양한 파일들을 모아서 vm을 구성함. 그 다양한 파일들을 모아서 qcow2 파일로 압축해 놨다고 생각하면 좋음.

 

- kvm의 NAT대역을 구성 = 192.168.122.0/24

- kvm에서 vm을 생성하면서 대역을 NAT로 두면 그 vm은 192.168.122.0/24 대역의 아이피를 부여받을 것임

 

- virt-viewer

- 워크스테이션의 버추얼 네트워크에디터랑 비슷함

 

KVM이  Type1인 이유

- kernel = 하드웨어를 제어하기 위한 다양한 모듈들의 모임.

- virtual machine manager가 마치 하이퍼바이저처럼 보이지만, kvm을 관리하기 위한 다양한 도구 중 하나일 뿐임

- 어떤 호스트에 존재하는 VM인지를 잘 보시는 게 좋음

- NIC를 어떤 스위치에 연결할 것인지 선택. vmware와 똑같음.

- VM 매니저의 에딧 - 커넥션 디테일

실습
1-1. 언젠가는 KVM1과 KVM2에 존재하는 네트워크들도 서로 오버레이네트워크로 구성될 것이다. 그렇다면 VPN의 오버레이 네트워크와의 차이는 무엇일까?

1-2. kvm1에 있는 vyos를 브리지대역에 두고 8.8.8.8로 통신이 되도록 만들어보세요. 그전에 것을 수정해도 괜찮습니다.  

kvm1에서 브릿지 대역 구성

브릿지를 구성하기 위한 패키지 설치

가상의 NIC를 생성 => 네트워크스크립트 파일 생성(ifcfg-br0) = IP설정

더보기

1-1

[root@KVM1 ~]# yum install -y bridge-utils

- 브릿지 구성을 위한 패키지 설치

[root@KVM1 ~]# cd /etc/sysconfig/network-scripts/
[root@KVM1 network-scripts]# mv ifcfg-eth0 ifcfg-br0

[root@kvm network-scripts]# vi ifcfg-br0

[root@kvm network-scripts]# vi ifcfg-eth0

[root@kvm network-scripts]# systemctl restart network

- eth0이 하던 일을 논리적으로 br0가 대신함. 실질적인 트래픽은 어쨌든 eth0을 타고 가긴 함.

1-2

VMM 재시작

- vyos의 NIC를 default(NAT)에서 br0로 변경

- install image

- kvm2에서 kvm1 ip를 핑 쳐보니 잘 가는 것을 확인할 수 있음

- kvm2 도 동일하게 br0 생성 후 vyos과 vyos2가 서로 통신되게 해 보자

- kvm2에도 위에 했던 방법대로 똑같이 세팅해 주기

 

KVM2에서 브릿지 대역 구성

kvmnet1 추가

더보기

- kvm1이랑 kvm2 핑이 가는 걸 볼 수 있음

- 가상 네트워크를 한 개 추가해 주기

- 넘기기 -> finsh

 

- 때로는 호스트 문제가 발생하여 다운되는 경우가 생기는데, 이런 경우 CPU와 RAM 같은 컴퓨팅 파워는 다른 호스트에서 제공을 해주면 되지만, VM에 저장되는 데이터나 운영체제 정보, 장치 관련 정보들은 복원이 불가능하며, 복사를 미리 해둔다고 하더라도 동기화하기가 쉽지 않음. 또한 이후의 변경사항이 발생했을 때도 스토리가 각각 존재한다면, 이 둘을 이후에 동기화시키기도 어려움. 따라서 디스크만 따로 공유 스토리지에 저장해 둔다면 vm의 호스트 이동이 용이해짐

스토리지 용도의 KVM3 설치

더보기

 

2 core 2GB 100GB, 미니멀

 

IP : 211.183.3.70 /24

인터페이스 변경이나 하이퍼바이저 설치가 필요하지 않다.

NFS구성만 하면 됨

- 다른 건 다 똑같이 하되, /etc/exports 만 no_root_squash 옵션을 추가해 줌

kvm3

[root@kvm3 ~]# yum install -y nfs-utils

[root@kvm3 ~]# mkdir /shared
[root@kvm3 ~]# chmod -R 777 /shared
[root@kvm3 ~]# vi /etc/exports
[root@kvm3 ~]# exportfs -r

[root@kvm3 ~]# cd /shared/
[root@kvm3 shared]# mkdir /shared/vm
[root@kvm3 shared]# pwd
/shared
[root@kvm3 shared]# ls
os  test.txt  vm

# 두 개의 경로 생성, os폴더에는 iso파일을 두고 vm 폴더는 디스크파일을 둘 것 임

 

kvm1

[root@KVM1 ~]# 18 yum install -y nfs-utils

[root@KVM1 ~]# mkdir /remote
[root@KVM1 ~]# mount -t nfs 211.183.3.70:/shared /remote
[root@KVM1 ~]# ls /remote
[root@KVM1 ~]# touch /remote/test.txt
[root@KVM1 ~]# echo 'testfile' > /remote/test.txt
[root@KVM1 ~]# cat /remote/test.txt
testfile
[root@KVM1 ~]# vi /etc/fstab 

 

kvm2

[root@kvm3 ~]# yum install -y nfs-utils

[root@kvm2 ~]# mkdir /remote
[root@kvm2 ~]# mount -t nfs 211.183.3.70:/shared /remote
[root@kvm2 ~]# touch /remote/test.txtls


[root@kvm2 ~]# echo 'testfile' > /remote/test.txt
[root@kvm2 ~]# cat /remote/test.txt
testfile
[root@kvm2 ~]# vi /etc/fstab 


[root@kvm11 images]# cp vyos.iso /remote/os
[root@kvm11 images]# pwd
/var/lib/libvirt/images
[root@kvm11 images]# cd /remote/os
[root@kvm11 os]# ls
vyos.iso

 

 

1. 아예 설치단계에서 파티션을 잘 잡거나(나머지 공간을 전부 ‘/’ 할당)

2. /dev/mapper/centos-home (/home)의 마운트를 풀고 lvremove 후 /dev/mapper/centos-root를 lvextend -l +100% FREE 후 xfs_growfs로 파일시스템을 늘려주면 된다.

migration

- kvm1에 존재하는 vm을 kvm2로 옮겨 보자.

 

되도록이면 그리고 이 kvm에서는 특히 무조건, 두 호스트의 환경을 동일하게 구성해 주는 게 좋다.

 

vyosrm.img 가 존재하는 디렉터리( /remote/vm )

네트워크(kvmnet1)

 

이런 것들을 일치시켜 주자는 뜻.

더보기

 

- 원격지의 하이퍼바이저에 connection 하겠다는 뜻.

- ssh 방식으로 원격지의 하이퍼바이저를 추가하려면 openssh-askpass라는 패키지가 필요.

[root@kvm images]# yum install -y openssh openssh-askpass

- 설치 후 yes

- allow unsafe :  안전하지 않아도 허용한다는 의미= VM 동작중일 때 이동을 하면 VM파일이 깨지거나 할 수도 있는데 괜찮냐?

- kvm2라는 서버에는 kvmnet1 이 존재하지 않아서 migration이 안 됨

- kvm2 호스트에도 kvmnet1이라는 네트워크를 만들어주자.

- kvm1 호스트에서 kvm2 호스트로 마이그레이션

- 각 호스트가 스토리지를 공유하면 VM의 이동성(migration)이 보장된다.

- cpu나 ram 은 어차피 이동한 호스트가 제공을 해주니까

실습) kvm2를 설정하여 kvm2에서 kvm1로 vyosrm을 마이그레이션 해보세요!

더보기

[root@kvm22 qemu]# yum install -y openssh openssh-askpass

- 위의 사진을 가져와서 ip가 변경 안된 상태임. 

- ip는 kvm1의 ip를 넣어줘야 됨

- 설치 후 yes

- test123

 

728x90