bxm's IT Story
Cloud #2 (KVM 3대 + 스토리지 1대, KIMCHI Project) 본문
이제 아래와 같은 Map이 완성되었다.
## 첫 번째 설정창은 그대로 놔두고, 두 번째 설정창에서 사용자명과 암호만 설정하고 설치
KVM1]
cd /etc/sysconfig/network-scripts
ls -l
vi ./ifcfg-ens32
## KVM2도 똑같이 만들기.
## KVM3 도 똑같이 만들기
## STG (SToraGe)도 만들기
1. 실습환경 준비하기
1.1 사전 안내 및 준비사항
본 랩은 클라우드 및 가상화에 입문하는 초급자용이다. 기본적인 실습환경 구성에서부터 Live Migration 및 이미지 생성 등과 같은 내용에서부터 간단한 응용 부분을 포함하고 있으며 기업의 환경에 즉시 적용할 수 있는 내용을 담기에는 한계가 있다 따라서 본 내용의 이용은 입문자들이 KVM을 이용하여 흥미를 갖을 수 있도록 하는데 목적을 두고 있다.
모든 실습은 한 대의 데스크탑에서 이루어 질 수 있도록 되어 있으며 첫 번재 실습에서부터 마지막 ㅣ실습까지 차례대로 진행해야 문제 발생 소지가 없다.
필요한 시스템 사양은 아래와 같다.
- 윈도우 10에 설치된 VMware Workstation 16 이상
- 16GB 이상의 메모리
- 4코어 이상의 CPU (VT-x/AMC-v 필수)
- 120 GB 이상의 여유 공간이 있는 HDD(SSD추천)
- 실습용 리눅스 이미지(CentOS-7-x86_64-DVD-2009.iso)
1.2 실습환경 준비하기
전체 실습을 위해서는 아래와 같이 리눅스가 설치된 4대의 가상머신이 필요하며 이 중 3대는 KVM이 설치되고 1대는 공유스토리지로 활용된다.
- 맵 그림-
host-only의 VMnet1은 호스트간 내부 통신, 관리 및 Live Migration 용도로 활용되므로 외부와 직접적인 연결이 필요하지 않다. NAT(VMnet8)은 외부 서비스를 위한 용도이므로 인터넷 연결 또는 외부와의 연결이 허용되어야 한다. 단, STG는 공유 저장소이므로 몇가지 필요한 패키지를 설치한 뒤에는 외부 연결용 인터페이스를 비활성화 해 두고 사용하는 거싱 보안사항에 부합한다고 할 수 있다.
1.2.1 vmware workstation(이하 vm) 설정하기
실행된 wmware 메뉴중 edit->virtual network edit
vmnet1 host-only host-only connected enableed 192.168.1.0
1.2.2 file->net vitual machine 에서 KVM1~STG 설치 준비
#KVM1,KVM2,KVM3
CPU 4Core // Virtualize~ 체크
Ram 4G
HDD 20G
NIC1 NAT
NIC2 VMnet1
#STG
CPU 2Core // Virtualize~ 체크
Ram 2G
HDD 120G
NIC1 NAT
NIC2 VMnet1
1.2.3 VM 설치하기
KVM 호스트 3대는 가상머신 관리를 위해 virt-manager를 사용하지 않고 kimchi(wokd)를 사용할 계획이므로 "minimal installation"으로 설치한다. STG 역시 NFS 서버로만 사용할 계획이므로 역시 "minimal installation" 으로 설치한다.
단, 설치 중에 IP 주소는 아래의 내용을 참고하여 구성한다. 테라폼이나 앤서블과 같은 자동화 도구를 사용하거나 vagrant를 통해 가상머신을 배포하는 형태가 아니라 처음 가상화를 시작하는 단계에서 하는 실습이라는 가정에서 진행하는 실습이므로 불편하지만 하나씩 직접 설치해 주어야 한다.
KVM1
ens32=>5.5.5.101/24 Gateway:5.5.5.2 DNS:8.8.8.8
ens33=>192.168.1.101/24
KVM2
ens32=>5.5.5.102/24 Gateway:5.5.5.2 DNS:8.8.8.8
ens33=>192.168.1.102/24
KVM3
ens32=>5.5.5.103/24 Gateway:5.5.5.2 DNS:8.8.8.8
ens33=>192.168.1.103/24
STG
ens32=>5.5.5.104/24 Gateway:5.5.5.2 DNS:8.8.8.8
ens33=>192.168.1.104/24
1.2.4
SecureCRT를 이용하여 호스트이 내부 관리용 주소(192.168.1.0/24)로 접속하기
새 연결 -> SSHv2 -> Port N/O 22 -> 192.168.1.10x
KVM1이 연결되는 것을 확인했다면 나머지 KVM2,3과 STG도 연결
1.2.5 인터페이스 이름 변경하기
시스템 별로 인터페이스의 이름이 다른 경우도 있으며 실습 중 인터페이스 명 입력의 편의 등을 이해, 아래와 같은 방법으로 ens32, ens33 인터페이스 이름을 변경한다. 가상머신 생성중 실수로 인해 간혹 ens32, ens34 등과 같이 다른 인터페이스 이름으로 되어 있다하더라도 상관없이 아래와 같이 eth0, eth1로 변경해 둔다.
# yum -y install vim
# echo "alias vi='vim'" >> ~/.bashrc
# yum provides ifconfig
net-tools-2.0-0.25.20131004git.el7.x86_64 : Basic networking
# yum -y install net-tools
이제 ifconfig 명령어를 쓸 수 있다.
# vi /etc/default/grub
//6행 끝부분에 net.ifnames=0 biosdevname=0 추가
# cd /etc/sysconfig/network-scripts/
# ls ifcfg-ens*
# mv ifcfg-ens32 ifcfg-eth0
# mv ifcfg-ens33 ifcfg-eth1
# vi ifcfg-eth0
NAME=eth0
DEVICE=eth0
# vi ifcfg-eth1
NAME=eth1
DEVICE=eth1
이제 DEVICE 명을 반영하기 위하여 GRUB 설정을 실행시킨다.
# grub2-mkconfig -o /boot/grub2/grub.cfg
## 3대의 KVM, 1대의 스토리지, 총 4대가 설치가 되었으면 아래와 같이 설정바꾸기 ##
KVM1]
vi /etc/sysconfig/network-scripts/ifcfg-ens32
vi /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
Host PC]
[cmd] - [ping 192.168.1.101]
## SecureCRT 접속
KVM2]
vi /etc/sysconfig/network-scripts/ifcfg-ens33
vi /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
Host PC]
KVM3]
vi /etc/sysconfig/network-scripts/ifcfg-ens32
vi /etc/sysconfig/network-scripts/ifcfg-ens32
systemctl restart network
Host PC]
STG]
vi /etc/sysconfig/network-scripts/ifcfg-ens32
vi /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
Host PC]
## 모든 세션 종류 및 제거 후
## 이제 한 화면에서 Server 4대를 한방에 운용 가능한 상태가 되었다 ##
## 접속이 모두 되는 것까지 확인하였음!!
## 인터페이스 이름 변경하기 ##
KVM1, KVM2, KVM3, STG] - 4대 다 적용시키기!! (대표 사진은 KVM1로)
yum -y install vim
echo "alias vi='vim'" >> ~/.bashrc
## bashrc라는 곳에 추가를 하면 aliac가 적용이 된다.
ifconfig
yum provides ifconfig
yum -y install net-tools
yum provides ifconfig
vi /etc/default/grub ==> 멀티부스터로더
cd /etc/sysconfig/network-scripts/
ls ifcfg-ens*
mv ifcfg-ens32 ifcfg-eth0
mv ifcfg-ens33 ifcfg-eth1
vi ifcfg-eth0
vi ifcfg-eth1
grub2-mkconfig -o /boot/grub2/grub.cfg
## 원래 랜카드 이름을 못바꿈. grub(부트매니저)이 막음.
## vi /etc/default/grub에서 이름 바꿀 수 있다고 정의해줬음.
## mv로 파일명 바꿨음.
## 이 파일명 바꾼게 grub2-mkconfig -o /boot/grub2/grub.cfg를 입력해야지 이제 적용이 되는 것임.
1.2.6 모든 노드의 방화벽 및 SELinux 비활성화
실습의 편의를 위해 방화벽과 SELinux 를 중지시킨다. 특히 VM 의 기본 디스크 저장 장소 변경등을 위해는 SELinux의 비활성화가 필요하다. 편의상 STG까지 포함한다.
KVM1, KVM2, KVM3, STG]
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/=enforcing/=disabled/' /etc/selinux/config
cat /etc/selinux/config | grep -e ^SELINUX=
1.2.7 모든 노드의 NetworkManager 비활성화
KVM1, KVM2, KVM3, STG]
systemctl stop NetworkManager
systemctl disable NetworkManager
1.2.8 4개의 모든 노드에서 아래의 내용을 /etc/hosts/ 에 등록한다.
KVM1, KVM2, KVM3, STG]
cat << EOF >> /etc/hosts
192.168.1.101 kvm1
192.168.1.102 kvm2
192.168.1.103 kvm3
192.168.1.104 stg
EOF
vi /etc/hosts
## KIMCHI 설치 ##
1.2.9 [KVM1 ~ KVM3] 호스트에 KVM, WOKD(Kimchi) 설치하기.
yum -y update
## 만약 yum이 잘 안들으면 'yum clean all' 하고 나서 해보자.
yum -y install qemu-kvm libvirt virt-install virsh openssh-askpass wget bind-utils
## 설치가 완료되었으면 아래로 들어가서 442, 446 Hash Mark 지우기. (이제 이 root 계정을 쓰겠다는 말임.)
vi /etc/libvirt/qemu.conf
## 이제 KVM 실행
systemctl start libvirtd
systemctl enable libvirtd
## KIMCHI 를 설치하려면 yum의 업그레이드 버전인 epel이 필요함.
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
## 설치가 완료된 이후, Github 설치가 필요하다.
* Git
: 형상관리 도구 중 하나로, 컴퓨터 파일의 변경 사항을 추적하고 여러명의 사용자들간에 해당 파일들의 작업을
조율하기 위한 분산 버전 관리 시스템이다. 소스코드를 따로 주고 받을 필요 없이, Git을 사용하면 하나의 프로젝트,
같은 파일을 여러 사람이 동시에 작업하는 병렬 개발이 가능하다.
* Github
: 분산 버전 관리 툴인 깃(Git)을 사용하는 프로젝트를 지원하는 웹호스팅 서비스이다. 버전 관리와 협업을 위한
코드 웹 호스팅 플랫폼으로, 언제, 어디서나 협업 프로젝트를 쉽게 진행할 수 있도록 돕는 역할을 한다.
## wok라는 rpm 파일이 필요하고,
yum -y install https://github.com/kimchi-project/kimchi/releases/download/2.5.0/wok-2.5.0-0.el7.centos.noarch.rpm
## Kimchi 다운로드
yum -y install https://github.com/kimchi-project/kimchi/releases/download/2.5.0/kimchi-2.5.0-0.el7.centos.noarch.rpm
## 데몬 리로드,
systemctl daemon-reload
systemctl restart wokd
systemctl enable wokd
reboot
## 이제 웹브라우져로 클라우드를 구성할 수 있음. virt-manager보다 훨씬 나음 ##
## 호스트 컴퓨터의 웹브라우저에서 https://192.168.1.101:8001 로 KVM1에 접근한다. (KVM2,3에도 접근한다.)
1.2.10 공유 스토리지 설정
## STG를 NFS Server로 만들기 ##
STG] - nfs(Network File Service) Server로 쓰자.
yum -y install nfs-utils
mkdir /stg
chmod 777 -R /stg ## 하위 디렉토리까지 권한 전부!
vi /etc/exports
systemctl start nfs-server
systemctl enable nfs-server
KVM1, KVM2, KVM3]
mkdir /stg
mount -t nfs stg:/kvm /stg
mount | grep stg:/kvm
echo "Hello from KVM" > /stg/test.txt ## /stg/test.txt에 출력해라.
STG] - Mount를 시켜줬기 때문에 STG Server에 저장이 된다. (Storage)
ls /stg
cat /stg/test.txt
끝 !



2. 가상머신의 기본 생성과 가상머신 관리
2.1 virt-install을 이용한 기본 설치
2.1.1 STG에서 설치용 이미지 준비
STG]
yum -y install wget ## wget(Web GET 이라는 뜻)
wget https://releases.ubuntu.com/20.04/ubuntu-20.04.3-desktop-amd64.iso
## CentOS 다운로드 (카이스트 사이트에서 받아오기)
wget https://ftp.kaist.ac.kr/CentOS/7.9.2009/isos/x86_x64/CentOS-7-x86_64-Minimal-2009.iso
또는
wget http://mirror.navercorp.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
## QEMU는 하이퍼바이저를 채용했다. 정확하게는 Type-2 하이퍼바이저이다. 이를 이용해 가상머신 여럿을
한 플랫폼으로 돌릴 수 있다. 이와 비슷한 소프트웨어로는 VMWare와 VirtualBox 등이 있다.
## libvirt가 제공하는 가상 디스크 형식
1) raw : 다른 메타 데이터 없이 원본 디스크의 정확한 바이트 대 바이트 사본
2) cloop : 압축 루프백 디스크 이미지 형식
3) cow : 사용자 모드 리눅스 디스크 이미지 형식
4) dmg : 맥 디스크 이미지 형식
5) iso(제일 유명) : CD-ROM 디스크 이미지 형식
6) qcow : QEMU v1 디스크 이미지 형식
7) qcow2 : QEMU v2 디스크 이미지 형식
8) QED : QEMU의 향상된 디스크 이미지 형식
9) VMDK : VMWare 디스크 이미지 형식
10) Virtual PC 디스크 이미지 형식
2.1.1 STG에서 설치용 이미지 준비
KVM1]
qemu-img create -f qcow2 /stg/centos01.qcow2 10G
virt-install --name centos01 --ram 1024 --disk /stg/centos01.qcow2,format=qcow2 --network network=default --graphics vnc,port=5901 --location=/stg/CentOS-7-x86_64-Minimal-2009.iso --noautoconsole
STG]
cd /
ls /kvm
cp /root/CentOS-7-x86_64-Minimal-2009.i ubuntu-20.04.3-desktop-amd64.i /kvm
Host PC]
https://192.168.1.101:8001
## Virtualization 들어가면 centos01이 새로 뜸.
## 오른쪽에 조치 눌러서 들어가면 CentOS 설치 가능함. 아래 Ubuntu까지 깔고 설정할 것임.
## 두 번째 centos 설치 ##
KVM1]
virt-install --name centos02 --ram --disk /stg/centos02.qcow2,format=qcow2,size=10 --network network=default --graphics vnc,port=5902 --location=/stg/CentOS-7-x86_64-Minimal-2009.iso --noautoconsole
## centos02도 마찬가지
## Ubuntu 설치 ##
KVM1]
virt-install --connect qemu:///system --name ubuntu01 --vcpus 1 --ram 1024 --disk path=/stg/ubuntu01.qcow2,size=10 --network network=default --graphics vnc,port=5903 --cdrom /stg/ubuntu-20.04.3-desktop-amd64.iso --noautoconsole
KVM1]
virsh list
## 이름만 보고 싶다면, 아래와 같이 명령어를 작성하면 된다.
virsh list --all
virsh list --all --name
2.2.2 가상머신의 세부 내용 확인하기와 편집하기
KVM1]
virsh dumpxml centos01 | head
2.2.3 호스트 실행시 자동 실행 가능하도록 autostart 설정하기
KVM1]
for as in $(virsh list --all --name)
>do
>virsh autostart "$as" ; done
virsh list --all --autostart
## for문
for 변수 in [범위](리스트 또는 배열, 묶음 등)
do
반복할 작업
done
2.2.4 도메인별 인터페이스와 IP 주소 간단히 확인하기
KVM1]
virsh domiflist centos01
2.2.5 디스크 생성과 추가하기
KVM1]
virsh pool-list --all
virsh vol-create-as stg volume1 1G
virsh attach-disk centos01 /stg/volume1 --target sdb --persistent --live
Kimchi-centos01]
ls /dev/sd*
KVM1]
virsh detach-disk centos01 sdb
virsh vol-list stg
virsh vol-delete volume1 stg
## 강제종료 시키기.
KVM1]
virsh destroy ubuntu01 ## Ubuntu 강제종료
virsh destroy centos02 ## centos02 강제종료
## VM 시작
virsh start ubuntu01
## VM 재부팅
virsh reboot ubuntu01
## VM 삭제 (이건 따라하지말기 !!)
virsh undefine ubuntu01 --remove-all-storage
2.3 기본 네트워크와 가상 브릿지 생성하기
2.3.1 초기에 생성되는 default 네트워크의 설정확인
virsh net-list --all
## 이제 KIMCHI로 가기 전에 마지막 확인!!
virsh net-dumpxml default

Kimchi-centos01]
ip addr
yum -y install net-tools ## 이걸 까는 순간 인터넷이 되는것도 확인 가능해지는 것이다 ㅎㅎ.
2.3.2 내부 사설 네트워크 구성을 위한 xml 파일 작성하기
KVM1]
vi private1.xml
2.3.3 작성된 파일을 이용한 네트워크 구성과 동작 확인.
KVM1]
virsh net-define private1.xml
mv private1.xml / ## xml은 특수한 파일이기 때문에 루트 디렉토리에서만 가능함!!
cd /
virsh net-define private1.xml
virsh net-list
## 동작을 안하기에 안 나올 것임.
virsh net-list --all
virsh net-start private01
virsh net-list
## 자동시작도 설정해놓자.
virsh net-autostart private01
virsh net-list
virsh net-dumpxml private01
2.3.4 생성된 사설 네트워크를 centos01, centos02에 연결해보자.
virsh list -all
virsh attach-interface --domain centos01 --type network --source private01 --model virtio --config --live
## centos01을 private01에 집어넣겠다. 라는 뜻임.
virsh domiflist centos01
virsh domifaddr centos01
## 똑같은 방법으로 centos02에도 집어넣어보기!!
virsh start centos02
virsh attach-interface --domain centos02 --type network --source private01 --model virtio --config --live
virsh domiflist centos02
virsh domifaddr centos02
## 현재 centos01 : 172.16.1.179
centos02 : 172.16.1.147 을 할당받았음. centos01과 centos02에서 서로 통신이 되는지 확인해보자.
## 또한 외부로도 ping이 잘 가는지 확인해보자.
Kimchi-centos01]
ping 172.16.1.147
ping 10.0.0.1
ping 168.126.63.1
Kimchi-centos02]
ping 172.16.1.179
ping 10.0.0.1
ping 168.126.63.1
2.3.5 kvm호스트가 가상머신의 트래픽을 외부로 포워딩 할 수 있도록 하기 위한 설정. 포워딩 설정은 모든 kvm
호스트에 설정해 두는 것이 좋다.
KVM1]
## ip_forward 값이 1이면 라우팅이 가능하다.
## 0이면 라우팅이 불가하다.
echo "1" > /proc/sys/net/ipv4/ip_forward
vi /proc/sys/net/ipv4/ip_forward
Kimchi-centos01]
ping -c 1 www.google.com
2.3.6 인터페이스 제거하기
KVM1]
virsh domiflist centos01
## private01 랜카드를 제거해보자.
virsh detach-interface --domain centos01 --type network --mac 52:54:00:a6:78:5e
## 만약 인터페이스 탈착 이후에도 계속 연결되어 있는 것으로 확인된다면
'virsh edit 도메인 이름'에서 해당 인터페이스 부분을 제거해 주어야 한다.
일반적으로 해당 가상머신을 destroy(종료) > start(실행)하면 된다.
## centos02도 똑같이 날려보자.
virsh domiflist centos02
virsh detach-interface --domain centos02 --type network --mac

2.4 스냅샷
2.4.1 centos01에서 스냅샷 생성과 리스트 확인
KVM1]
virsh snapshot-list centos01
## 스냅샷 생성
virsh snapshot-create-as centos01 --name "centos-2021-08-31"
virsh snapshot-list centos01
## 2번째 스냅샷 생성 (atomic 옵션은 성공/실패 여부 확인을 보장해 준다.)
virsh snapshot-create-as centos01 --name "centos-2021-08-31-02" --description "second ss-default" --atomic
## 누구로부터 파생되었는지(부모가 누군지) 확인할 수 있다.
virsh snapshot-list centos01 --parent
## 트리 모양으로 보여준다.
virsh snapshot-list centos01 --tree
2.4.1 스냅샷을 통해 복구가능 여부를 확인하기 위하여 동작중인 centos01을 중지시킨 뒤, 동작중인 상태에서 작성된
스냅샷 "centos-2021-08-31"로 되돌린다.
KVM1]
virsh destroy centos01
virsh list --state-shutoff
virsh snapshot-list centos01
virsh snapshot-revert centos01 --snapshotname "centos-2021-08-31"
virsh list
2.4.3 snapshot-dumpxml을 통해 스냅샷 설정 내용을 확인할 수 있으며 snapshot-edit를 통해 수정이 가능하다.
KVM1]
virsh snapshot-dumpxml --snapshotname centos-2021-08-31 centos01
virsh snapshot-edit --snapshotname centos-2021-08-31 centos01
2.4.4 스냅샷 삭제
KVM1]
virsh snapshot-list centos01
virsh snapshot-delete centos01 centos-2021-08-31-02
virsh snapshot-list centos01




'가상화 > KVM' 카테고리의 다른 글
Cloud #3 (KVM Final-Migration, Cirros, Overlay Network) (0) | 2021.09.01 |
---|---|
Cloud #1 (KVM-Linux의 가상머신) (2) | 2021.08.24 |