인스턴스 → VM만들기

VM은 XML과 disk 부분으로 나눌 수 있는데, XML은 CPU,RAM같은 컴퓨팅 자원과 인터페이스를 제공
KVM이 CPU 물리 자원을 가져와 가상머신 xml으로 읽어옴
가상머신 migration : KVM1의 VM이 많아 CPU를 많이 사용하게 되면, KVM2로 해당 vm의 xml만을 이동하면 됨. xml에 쓰여있는 것을 보고 Storage에 Disk에 접근 할 수 있게 됨
옮길 때도 끊기지 않도록 함
Storage migration : 볼륨을 이동시킴
통신시 IP를 사용하는데, IP는 Best effort이기 때문에 혼잡 발생 시 데이터가 손실될 수 있음.
저장소가 네트워크 환경에 연결되어있는 NAS(using IP) 하지만 정말 중요한 데이터를 전달할 시에는 좋지않기때문에 SAN 이라는 방식을 사용할 수 있다.
SAN은 IP를 이용하지않고, FC(Fiber channel)방식을 이용(Word Wide Name) , FCoE,FCIP, ISCSI


Hypervisor Type1
Hypervisor Type2
| 구분 | kvm1 | kvm2 | stg |
|---|---|---|---|
| 용도 | compute | compute | storage |
| CPU | 4 cores | 4 cores | 2 cores |
| RAM | 6GB | 6GB | 2GB |
| 외부(vmnet10) | 211.183.3.101 |
DG : 211.183.3.2
DNS : 8.8.8.8 | 211.183.3.102 | 211.183.3.100 |
| 마이그레이션,스토리지 연결(vmnet1) | 172.16.1.101 | 172.16.1.102 | 172.16.1.100 |
| 관리용(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 | Minimum Install |
vmnet10 Default gateway, DNS /공인 IP로 취급
KVM1

KVM2

STORAGE

KVM1, KVM2는 Software selection Server with GUI
Storage만 installation destination I will configure partitioning

KVM1
KVM2
Storage
확인하기
[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 ; 로 서로 연결 되는 지 확인
모든 노드에서 (super putty)
yum -y install update && yum -y install net-tools curl vim git wget
.
[모든 노드에서]
.bashrc 는 해당계정이 처음 로그인 할때 읽어들이는 파일이다. 만약 파일의 내용이 변경되었다면 이를 현재 환경에 적용하기 위해서는 1. 재 로그인(su) 2. .bashrc 파일(source ~/.bashrc)을 현재 환경에 적용시키는 방법이 있다.
systemctl stop firewalld ; systemctl disable firewalld ; systemctl stop NetworkManager ; systemctl disable NetworkManager ; setenforce 0 ; sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
(kvm 노드에서만) KVM1, KVM2 의 ens32(211.183.3.X) → (인터넷으로 연결된, 공인주소가 할당된)인터페이스 이름 변경하기
파일 수정
kvm1, kvm2
vi /etc/default/grub
6번째 줄 마지막에 net_ifnames=0 biosdevname=0 추가
GRUB_CMDLINE_LINUX="...quiet net.ifnames=0 biosdevname=0"
kvm1
cd /etc/sysconfig/network-scripts/
[root@kvm1 network-scripts]# ls ifcfg-ens*
ifcfg-ens32 ifcfg-ens33 ifcfg-ens34
[root@kvm1 network-scripts]# cat ifcfg-ens32 | grep IPADD
IPADDR=211.183.3.101
[root@kvm1 network-scripts]# mv ifcfg-ens32 ifcfg-eth0
[root@kvm1 network-scripts]# cat ifcfg-eth0 | grep IPADD
IPADDR=211.183.3.101
[root@kvm1 network-scripts]# vi ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=211.183.3.101
PREFIX=24
GATEWAY=211.183.3.2
DNS1=8.8.8.8
kvm2
cd /etc/sysconfig/network-scripts/
[root@kvm2 network-scripts]# ls ifcfg-ens*
ifcfg-ens32 ifcfg-ens33 ifcfg-ens34
[root@kvm2 network-scripts]# cat ifcfg-ens32 | grep IPADD
IPADDR=211.183.3.102
[root@kvm2 network-scripts]# mv ifcfg-ens32 ifcfg-eth0
[root@kvm2 network-scripts]# cat ifcfg-eth0 | grep IPADD
IPADDR=211.183.3.102
[root@kvm2 network-scripts]# vi ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=211.183.3.102
PREFIX=24
GATEWAY=211.183.3.2
DNS1=8.8.8.8
[root@kvm1 network-scripts]# grub2-mkconfig -o /boot/grub2/grub.cfg
kvm1과 kvm2에서 ens33 → eth1, ens34 → eth2로 변경 후 둘 다 정상적으로 변경되었다면
grub2-mkconfig -o /boot/grub2/grub.cfg 이후 다시 부팅
[KVM1/KVM2]
“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에서 마운트 하여 사용할 예정
storage에서의 설정
yum -y install nfs-utils
vi /etc/hosts 아래 내용 추가
vi /etc/hosts
172.16.1.101 kvm1
172.16.1.102 kvm2
172.16.1.100 storage
/cloud를 외부에 노출하기 위한 설정
vi /etc/exports
/cloud kvm1(rw,sync,no_root_squash)
/cloud kvm2(rw,sync,no_root_squash)
추가
nfs-server 시작하기
systemctl enable nfs-server ; systemctl start nfs-server
chmod 777 /cloud
[kvm1/kvm2가 해야할 일]
nfs-utils 설치
yum -y install nfs-utils
vi /etc/hosts 파일에 아래 내용 입력
172.16.1.101 kvm1
172.16.1.102 kvm2
172.16.1.100 storage
로컬에 /remote 디렉토리 생성
mkdir /remote
mount를 이용해 storage:/cloud에 있는 디렉토리를 로컬의 /remote에 마운트 시킨다.
mount -t nfs storage:/cloud /remote
kvm1에서 /remote에 생성한 test.txt 파일을 kvm2에서 ls /remote했을 때 볼 수 있어야 함
# kvm1
[root@kvm1 ~]# cd /remote
[root@kvm1 remote]# echo "complete" > test.txt
[root@kvm1 remote]# ls
test.txt
# kvm2
[root@kvm2 ~]# ls /remote
test.txt
재부팅 이후에도 위에서 설정한 마운트 정보 계속 유지
systemctl restart nfs-server
systemctl enable nfs-server
vi /etc/fstab
-----------------------------
storage:/cloud /remote nfs defaults 0 0
추가
kvm 실행
kvm1, kvm2
루트의 권한으로 실행 & 루트 그룹 포함 실행
vi /etc/libvirt/qemu.conf
/root로 검색해
442 앞 해시, 446 앞 해시 제거
systemctl enable libvirtd
systemctl restart libvirtd
[가상머신 설치하기]
1 iso - 설치용 디스크 , 템플릿 용도로 적합 클라우드에서는 적절하지 않음
2 qcow2 - volume(디스크), os가 이미 설치되어 있음
wget http://ftp.kaist.ac.kr/CentOS/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
virt-install -n test1 \
--ram 1024 \
--vcpus 1 \
--cdrom /remote/vyos-1.1.8-amd64.iso \
--os-type linux \
--os-variant debian10 \
--network network=default \
--graphics vnc \
--hvm \
--virt-type kvm \
--disk path=/remote/test1.qcow2,size=5 \
--noautoconsole
Virtual Machne Manager를 보면 동작하고있다.
kvm1 → kvm2로 migrate하기

관리를 위한 명령어
virsh list --all
virsh destroy test1
# 전체 종료
[root@kvm2 remote]# for vm in $(virsh list --all --name)
> do virsh destroy $vm ; done
Domain test1 destroyed
전체 종료나 삭제 명령은 없다.
실습 환경 종료하기
kvm1 → kvm2 → 마지막으로 storage 종료
실습 환경 실행하기
storage → kvm2 → kvm1
kvm1,2 마운트정보확인, systemctl status libvirtd, getinforce 결과값이 disabled로 나와야함
관리명령 xml
동작중상태에서 추가디스카부착
동작중상태에서 인터페이스추가
가상네트워크브릿지만들기