KVM에 대하여

양승현·2022년 8월 1일
0

linux

목록 보기
14/20

Hyperviser

Type1(Bare metal)

  • Native 혹은 베어메탈 형 하이퍼바이저라고도 불린다.
  • Xen, KVM, XenServer(Citrix), Hyper-V(Microsoft), ESX-i(vmware) 등이 있다.
  • 성능면에서 Type1이 Type2보다 유리하다.
  • 실제 IDC를 클라우드화 시키는데 사용되는 하이퍼바이저도 모두 Type1 방식이다.

Type2(Hosted)

  • Hosted 하이퍼바이저라고 불린다.
  • 테스트환경을 구성할 때 자주 사용하는 Oracle VirtualBox나 vmware Workstation이 여기에 해당

실습

환경 구성

구분				|		KVM1				|		KVM2			|		storage			|
용도				|		compute				|		compute			|		Storage			|
CPU					|		4cores				|		4cores			|		2cores			|
RAM					|		4GB					|		4GB				|		2GB				|
외부(vmnet10)		|		211.183.3.101	    |		211.183.3.102	|		211.183.3.100	|
마이그레이션(vmnet1) |		172.16.1.101		|		172.16.1.102	|		172.16.1.100	|
storage연결(vmnet1) |							|						|						|
관리용(vmnet2)		|		172.16.2.101		|		172.16.2.102	|		172.16.2.100	|
디스크용량			|		20GB(auto)			|		20GB(auto)		|		120GB(/cloud : 100GB)(SWAP : 4GB)(/boot : 1GB)(/ : 나머지)			|
   					|		Server with GUI		|	Server with GUI		|		Minimal install			|

설치 후 확인해야 할 사항

[kvm1/kvm2]
ifconfig -> IP
ping www.google.com

[storage]
ip addr show  :   ip addr list
ping www.google.com

[kvm1]
ping 211.183.3.102 -c 3 ; ping 172.16.1.102 -c 3 ; ping 172.16.2.102 -c 3
ping 211.183.3.100 -c 3 ; ping 172.16.1.100 -c 3 ; ping 172.16.2.100 -c 3

[모든 노드에서]

1. 모든 노드에 설치

yum -y update && yum -y install net-tools curl vim git wget

2. ~/.bashrc 에 아래 내용 추가하기

alias vi='vim
  • .bashrc는 해당 계정이 처음 로그인 할때 읽어 들이는 파일이다. 만약 파일의 내용이 변경되었다면 이를 현재 환경에 적용하기 위해서는 1.재 로그인(su) 2. .bashrc(source ~/.bashrc)을 현재 환경에 적용 시키는 방법이 있다.

3. 방화벽(firewalld), 네트워크 매니저(NetworkManager), SELinux 중지, 비활성화

  • "방화벽" - 서버에서 발생한 트래픽, 서버로 들어오는 트래픽, 서버를 통과하는 트래픽에 대한 보안 설정이 가능하다(allow, deny)
  • "네트워크 매니저" - 일반적으로 워크스테이션 용 OS에서 자동으로 WIFI를 연결하거나 IP 주소를 변경했을 때 이를 설정파일에 즉시 적용하고 재활성화 시키는 기능이 포함되어 있어 일반 사용자들에게는 편리한 도구이다.
  • "SELinux" - 서버 내부 자원으로의 접근에 대한 보안 설정을 담당한다. 일반적으로 애플리케이션들의 기본 경로등을 변경하는 작업을 하지 못하도록 차단한다. KVM에서 이미지의 기본 저장경로는 /user/lib/.. 에 있다. 우리는 이를 외부에 있는 /cloud를 사용해야 하므로 별도의 디렉토리와의 마운트가 필요하다. 기본적으로 SELinux는 이를 차단한다.
systemctl stop firewalld ; systemctl disable firewalld ; systemctl stop NetworkManager ; systemctl disable NetworkManager ; setenforce 0 ; sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config 

4. (kvm 노드에서만) KVM1, KVM2 의 ens32(211.183.3.X -> 인터넷으로연결된, 공인주소가 할당된) 인터페이스 이름 변경하기
1. 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"

2. 인터페이스 수정하기

  • /etc/sysconfig/network-scripts/로 이동
cd /etc/sysconfig/network-scripts/
  • 해당 파일 목록 확인
ls ifcfg-ens*
  • 인터페이스 IP 확인
cat ifcfg-ens32 | grep IPADD
  • 인터페이스 이름 변경
mv ifcfg-ens32 ifcfg-eth0
  • 변경 확인
cat ifcfg-eth0 | grep IPADD
  • 설정 파일 변경(KVM1,2)
vi ifcfg-eth0

3. 변경된 내용을 부팅할 때 읽어들이는 커널에 적용해라

grub2-mkconfig -o /boot/grub2/grub.cfg

4. kvm1/kvm2 를 재부팅한다

init 6

5. kvm1/kvm2의 ens33과 ens34도 마찬가지로 eth1, eth2로 변경하자

kvm1/kvm2 에서 
ens33 -> eth1  ( mv ifcfg-ens33 ifcfg-eth1)
ens34 -> eth2  ( mv ifcfg-ens34 ifcfg-eth2)
[kvm1]
[root@kvm1 ~]# cd /etc/sysconfig/network-scripts/
[root@kvm1 network-scripts]# ls ifcfg-eth*
ifcfg-eth0  ifcfg-eth1  ifcfg-eth2
[root@kvm1 network-scripts]#
[root@kvm1 network-scripts]# cat ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=none
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=172.16.1.101
PREFIX=24
[root@kvm1 network-scripts]# cat ifcfg-eth2
TYPE=Ethernet
BOOTPROTO=none
NAME=eth2
DEVICE=eth2
ONBOOT=yes
IPADDR=172.16.2.101
PREFIX=24
[root@kvm1 network-scripts]# grub2-mkconfig -o /boot/grub2/grub.cfg ; reboot
  • 둘다 정상적으로 변경되었다면
grub2-mkconfig -o /boot/grub2/grub.cfg 
init 6

[KVM1/KVM2]

1. 커널 업데이트(yum 이용)
https://nirsa.tistory.com/64 참고

  • 현재 커널 버전 확인
uname -a
  • 커널 업데이트 진행
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum --enablerepo=elrepo-kernel install kernel-ml
init 6

elrepo로 진입
  • 커널 부팅 순서 변경
cat /boot/grub2/grub.cfg | grep menuentry | cut -d "'" -f2

grub2-set-default "CentOS Linux (5.4.12-1.el7.elrepo.x86_64) 7 (Core)"
grub2-editenv list

2. kvm 설치하기

yum -y install libvirt qemu-kvm virt-install virt-manager openssh-askpass libguestfs-tools 
  • "libvirt" -> KVM 데몬 (libvirtd -> systemctl start libvirtd)
  • "qemu-kvm" -> 가상머신의 커널과 호스트의 커널 사이에 배치되어 둘 사이의 코드 변화을 해 주는 모듈
  • "virt-install" -> 가상머신 설치를 위한 cli 도구 virsh virt-install (설치해!) ---> virsh ----> libvirtd 에게 전달
  • "openssh-askpass" -> 독립적인 호스트에서는 필요하지 않다. 두대 이상의 호스트가 연결되어 있고 각 호스트에 있는 가상머신을 타 호스트로 마이그레이션 하고자 하는 경우 이를 승인하기 위한 도구가 필요하다. 이를 담당하는 것이 openssh-askpass이다. 결국 vm 의 이동은 ssh 를 이용하는 것이다.
  • "libguestfs-tools" : 일반적인 iso 파일을 이용하여 가상머신을 설치하는 것이 아니라 virt-customize, virt-builder 를 이용하여 필요한 볼륨을 생성하고자 하는 경우 기본 이미지에 대한 수정이 가능해야 하는데 이를담당하는 것이 libguestfs-tools(virt-customize, virt-resize, virt-builder 와 같은 도구가 모두 포함되어 있다) 에 포함되어 있다.

storage 설정

  • 이제 storage에 있는 /cloud를 kvm1, kvm2의 /remote에서 마운트하여 사용할 예정이다.

1. storage 에서의 설정

yum -y install nfs-utils
vi /etc/hosts

2. vi /etc/hosts 에 아래 내용 추가

172.16.1.101    kvm1
172.16.1.102    kvm2
172.16.1.100    storage

3. /cloud 를 외부에 노출시키기 위한 설정

vi /etc/exports

/cloud          kvm1(rw,sync,no_root_squash)
/cloud          kvm2(rw,sync,no_root_squash)
  • host 에 Ip 주소를 등록했으므로 Ip 주소를 따로 작성하지 않아도 된다.

4. nfs-server 시작하기
systemctl enable nfs-server ; systemctl start nfs-server

5. chmod 777 /cloud 로 cloud 디렉토리에 대한 퍼미션을 조정한다.

chmod 777 /cloud

[kvm1/kvm2 가 해야할 일]

1. nfs-utils 설치하기

yum -y install nfs-utils

2. vi /etc/hosts 파일에 아래의 내용입력하기

vi /etc/hosts
172.16.1.101    kvm1
172.16.1.102    kvm2
172.16.1.100    storage

3. 로컬에 /remote 디렉토리 생성하기

mkdir /remote
cd /remote

4. mount 를 이용하여 storage:/cloud 에 있는 디렉토리를 로컬의 /remote 에 마운트 시킨다.

[root@kvm1 ~]# showmount -e storage
Export list for storage:
/cloud kvm2,kvm1
[root@kvm1 ~]# mount -t nfs storage:/cloud /remote

5. kvm1 에서 /remote 에 생성한 test.txt 파일을 kvm2 에서 ls /remote 했을 때 볼 수 있어야 한다

[root@kvm1 ~]# touch /remote/test.txt
[root@kvm1 ~]# vi /etc/fstab

storage:/cloud /remote                          nfs     defualts        0 0
  • 차례대로 마운트 해줄 곳, 마운트 할 곳, 타입, 속성, 파일 시스템 체크 여부, Dump 사용 여부 이다

6. 재부팅 이후에도 위에서 설정한 마운트 정보를 계속 유지되어야 한다!!

ls /remote/

[KVM 실행하기]

  • kvm은 root 의 권한으로 실행한다.
vi /etc/libvirt/qemu.conf

442 user = "root"
446 group = "root"

[가상머신 설치하기]

1. iso 파일로 가상머신 설치하기

cd /remote
wget http://mirror.kakao.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
  • vm 만들기
kvm1/kvm2 - yum -y install virt-manager

2. qcow2 이미지 파일을 이용하여 배포하기

[root@kvm1 remote]# virt-install --name test1 --vcpus 1 --ram 1024 --location=/remote/centos7.iso --disk /remote/test1.qcow2,size=20 --network=default --graphics vnc,port=5901 --noautoconsole

[결과]

관리를 위한 명령

    1. virsh list --all (동작중인/중지중인 모든 가상머신의 리스트를 확인할 수 있다.)
    1. virsh destroy test1 (test1을 중지시킨다.)
    1. 전체 종료
      for vm in $(virsh desrtoy $(virsh list --all --name)
      do
      virsh destroy $vm ;
      done
    1. virsh undefine test1 --remove-all-storage (삭제)
  • 실습 환경 종료하기
    kvm1 -> kvm2 -> storage

  • 실습환경 실행하기
    storage -> kvm1 -> kvm2

  • kvm1/kvm2에서 mount 정보 확인
    systemctl status libvirtd
    getenforce
    [결과]disabled 로 나와야 함


내일 공부할 내용
관리명령 -> xml 파일 구성 내용
동작중인 상태에서 추가 디스크 부착하기
동작중인 상태에서 인터페이스 추가하기 (가상 네트워크/브릿지 만들기)

0개의 댓글