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
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에 있는 /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-server5. chmod 777 /cloud 로 cloud 디렉토리에 대한 퍼미션을 조정한다.
chmod 777 /cloud
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은 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
[결과]
- virsh list --all (동작중인/중지중인 모든 가상머신의 리스트를 확인할 수 있다.)
- virsh destroy test1 (test1을 중지시킨다.)
- 전체 종료
for vm in $(virsh desrtoy $(virsh list --all --name)
do
virsh destroy $vm ;
done
- virsh undefine test1 --remove-all-storage (삭제)
실습 환경 종료하기
kvm1 -> kvm2 -> storage
실습환경 실행하기
storage -> kvm1 -> kvm2
kvm1/kvm2에서 mount 정보 확인
systemctl status libvirtd
getenforce
[결과]disabled 로 나와야 함
내일 공부할 내용
관리명령 -> xml 파일 구성 내용
동작중인 상태에서 추가 디스크 부착하기
동작중인 상태에서 인터페이스 추가하기 (가상 네트워크/브릿지 만들기)