이론
가상화
가상화는 서버, 스토리지, 네트워크 및 기타 물리적 시스템에 대한 가상 표현을 생성하는 데 사용할 수 있는 기술이다. 가상 소프트웨어는 물리적 하드웨어 기능을 모방하여 하나의 물리적 머신에서 여러 가상 시스템을 동시에 실행한다. (AWS 문서)
Type을 두 가지로 나눌 수 있다.
가상화한 서버를 클러스터링하면 마치 한 대의 컴퓨터인 것처럼 동작하게 할 수 있다.
kvm = hypervisor
전가상화 vs 반가상화
전가상화( Full Virtualization ) - KVM, Xen
VM의 전체(Full) 명령이 가상화 되기때문에 전가상화이다.
반드시 Host의 기술적 지원이 필요하다. (Intel VT, AMD-V)
# KVM은 전가상화에 속한다. 따라서, KVM을 통해 vm을 생성하고 싶다면 kvm호스트의 위 CPU설정이 체크가 되어있어야한다.
DOM0은 Control Domain, 최초의 VM으로써 다른 모든 VM들을 관리한다. 다른 VM들에게 리소스를 할당, 관리. VM의 명령을 호스트에 전달한다.
VM의 모든 기능에 개입=>
단점: 속도(딜레이)가 느리고, 효율도 떨어짐.
장점: HOST OS를 수정할 필요가 없고, VM에 제약이 없음(윈도우, 리눅스, IOS같이 내가 원하는 운영체제 설치 가능)
KVM ( Kernel-based Virtualization)
리눅스를 구성하는 커널은 여러개의 모듈로 구성이 되어있음. KVM도 결국 일종의 모듈.
qemu라는 하드웨어 에뮬레이션을 통해 호스트의 자원을 전가상화한다.
반가상화( Para Virtualization)
VM의 일부(Para) 명령이 가상화인 것이다.
VM이 Hypercall을 통해 직접 호스트에 명령을 전달하기때문에 Guest OS 커널의 수정이 필요하기때문에 VM의 선택의 폭이 좁다. 또한 Host OS와 호환이 되는 운영체제만 설치 가능하다. (종속)
자원의 오버헤드가 적다(속도가 빠르고, 효율이 좋다)
이제는 전가상화와 반가상화의 경계가 사라지고 있다. (양쪽에서 기능 제공 가능)
실습
kvm1 ,kvm를 4core, 4GB(Processors), 20GB(Disk Size)로 만든다. DVD iso를 사용한다. Address는 211.183.3.10, 211.183.3.20이다. Gateway는 211.183.3.2, DNS Servers는 8.8.8.8로 동일하다.
kvm3은 2core, 2GB, 100GB로 만든다. Minimal iso를 사용한다. INSTALLATION DESTINATION에서 partitioning 옵션을 선택한다. /home은 삭제하고 /(root)를 96GiB로 늘린다. Address는 211.183.3.30이다. Gateway는 211.183.3.2, DNS Servers는 8.8.8.8로 동일하다.
KVM3 실습. KVM3는 오로지 스토리지 역할만 한다.
# <KVM3>
# kvm1과 kvm2에서 동작할 VM은 모두 kvm3에 저장이 되어있어야 한다. 이를 위해 nfs 서버를 구성.
$ yum -y install nfs-utils
# 공유대상 설정
$ mkdir /shared
$ chmod 777 -R /shared
$ vi /etc/exports
/shared 211.183.3.*(rw)
/shared kvm*(rw)
# 반영
$ exportfs -r
# nfs 데몬 동작
$ systemctl restart nfs-server
$ systemctl enable nfs-server
# mount 확인
$ showmount -e
# /shared kvm*, 211.183.3.*
# 방화벽, 셀리눅스 off 후 재부팅
$ systemctl disable --now firewalld
$ sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
$ systemctl restart nfs-server
KVM1 실습
# <KVM1>
# 방화벽 off
$ systemctl disable --now firewalld
# enforcing -> disabled로 변경
$ vi /etc/selinux/config
# 백업
$ cd /etc/sysconfig/network-scripts/
$ cp ifcfg-ens32 /root/ifcfg-ens32.backup
# ens32 => eth0으로 인터페이스 변경. 파일이름 수정
$ mv /etc/sysconfig/network-scripts/ifcfg-ens32 /etc/sysconfig/network-scripts/ifcfg-eth0
# 장치 이름 변경
# 아래처럼 수정
$ vi ifcfg-eth0
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
# 부팅시 반영. 부트로더 설정을 해줘야 함.
$ vi /etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0 biosdevname=0"
# GRUB = 부트로더
# 장치의 네이밍을 어떻게 가져갈지 결정.
# 네트워크 인터페이스의 이름을 eth0과 같은 식으로 설정하겠다
$ grub2-mkconfig -o /boot/grub2/grub.cfg
# 위 설정을 반영하기 위해 재부팅
$ reboot
# 확인
$ ifconfig
# eth0: ...
$ ping 8.8.8.8
# 마운트를 위해 nfs-utils 설치.
$ yum -y install nfs-utils
# 마운트
$ showmount -e 211.183.3.30
$ mkdir /remote
$ mount -t nfs 211.183.3.30:/shared /remote
# 편집
$ vi /etc/fstab
211.183.3.30:/shared /remote nfs defaults 0 0
# kbm 관련 패키지 설치
$ yum -y install qemu-kvm libvirt virt-install virt-manager virt-viewer
# qemu-kvm : qemu는 하드웨를 에뮬레이션 하는 역할.
# qemu-kvm은 qemu의 도움을 받아 kvm이 가상화를 할때 하드웨어를 에뮬레이션할 수 있도록 도와주는 역할. vm입장에서는 자신이 vm이라는것을 인지 못함.
# libvirt : 가상화 라이브러리
# virt-install : VM을 설치하는 역할
# virt-manager : VM 관리
# virt-viewer : 콘솔을 통해 VM의 화면을 제공.
$ vi /etc/libvirt/qemu.conf
# 주석 해제 # 442번 째 줄
user = "root"
group = "root"
$ systemctl restart libvirtd
$ systemctl enable libvirtd
# 네트워크 매니저를 꺼준다.
$ systemctl disable --now NetworkManager
# Applications에서 virt-manager가 생긴 것을 확인한다.
# <KVM3>
# 공유폴더에 운영체제를 다운받는다
$ cd /shared
$ yum -y install wget
$ wget http://ftp.kaist.ac.kr/CentOS/7/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
kvm1을 물리 서버로 가정한다.
KVM1 CD/DVD를 VM 설치시 넣은 iso로 수정한다.
# <kvm3>
$ ls -alh
$ chmod 777 -R /shared
kvm에서 Application에 새로 설치한 Virtual Machine Manager를 확인한다.
QUME/KVM 을 우클릭하여 New를 만들면 Warning이 뜨는 것을 확인할 수 있따. 전가상화는 하드웨어에서 가상화를 지원해줘야 하는데, 지금 지원이 안되는 상태이다.
# <kvm3>
# shard에 있는 centos의 이름을 간단하게 변경한다.
$ cd /shared
$ mv CentOS-7-x64_64-Minimal-2009.iso centos.iso
$ ls
centos.iso
Forward를 눌러 계속 진행하고, ISO이미지는 "remote"라는 이름으로, "/remote"라는 경로에 채운다. 2% 차지한다.
"/remote" 안에는 iso 파일이 들어있다.
Memory(RAM)은 1024, CPUs는 2로 설정한다.
Forward를 눌러 계속 진행하고, custom storage를 선택한다. 새롭게 "Name: test.img", "Max Capacity: 10"으로 설정한다.
이름은 "testvm"으로 해서 New VM을 만든다.
가상머신 위에 새로운 운영체제가 새롭게 설치되는 것을 볼 수 있다.
virbr0이 설치된 것을 확인할 수 있다.
호스트(KVM1) 입장에서는 default(NAT, 192.168.122.0 /24) 라는 가상의 대역에 virbr0라는 인터페이스를 통해 속해있다.
네트워크를 추가해볼 수도 있다. (Name: kvmnet1)
이렇게 고립된 네트워크를 만들 수 있다. (vmware의 host-only와 비슷)
/etc/libvirt/qemu 디렉토리에 vm 및 network xml파일들이 보인다.
virbr1 = kvmnet1 생성으로 인해 만들어진 가상의 인터페이스( virtual bridge )이다.
kvm1에서 한 작업을 kvm2에도 똑같이 수행한다.
'🏫 Cloud Practice > 🧪 On-Premise' 카테고리의 다른 글
Wordpress를 설치하고 MariaDB(MySQL)과 연동해보자 (0) | 2023.09.26 |
---|---|
Migration이란? (0) | 2023.09.21 |
PxE 서버에 대해 알아보자 (0) | 2023.09.18 |
DNS 서버 설정을 해보자 (0) | 2023.09.08 |
웹 서버 설정은 어떻게 할까? (0) | 2023.09.07 |