[클라우드 With리눅스/KVM1,KVM2,Storage 실습]

SooYeon Yeon·2022년 8월 30일

클라우드 With리눅스

목록 보기
37/39

인스턴스 → VM만들기

  • Virt-customize (디스크 공간확장불가)
  • Virt-builder (확장 가능)

실습 환경 그림

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

Hypervisor Type1

  • Bare Metal
  • 물리자원 바로위에 배치
  • KVM, ESXi 등

Hypervisor Type2

  • Host Based
  • VMWorkstation, VirtualBox, VirtualPC
  • 메모리 가상화를 통해 flexable하게, 겹쳐서 들어오진 않도록 함
  • VT-X, AMD-V같은 CPU 가상화 기능이 커널에 포함되어 있어야 CPU를 가상화할 수 있다.

실습

실습 환경

구분kvm1kvm2stg
용도computecomputestorage
CPU4 cores4 cores2 cores
RAM6GB6GB2GB
외부(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

  • Ethernet(ens32) 인터넷 연결용
    • IPv4 Settings - Manual로 변경- 211.183.3.101 / 24 / 211.183.3.2 / 8.8.8.8
  • Ethernet(ens33) 스토리지 연결,마이그레이션
    • IPv4 Settings - Manual로 변경- 172.16.1.101 / 24 , 나머지는 입력 X
  • Ethernet(ens34) 관리용(ssh연결)
    • IPv4 Settings - Manual로 변경- 172.16.2.101 / 24 나머지는 입력X

KVM2

  • Ethernet(ens32)
    • IPv4 Settings - Manual로 변경- 211.183.3.102 / 24 / 211.183.3.2 / 8.8.8.8
  • Ethernet(ens33)
    • IPv4 Settings - Manual로 변경- 172.16.1.102 / 24 , 나머지는 입력 X
  • Ethernet(ens34)
    • IPv4 Settings - Manual로 변경- 172.16.2.102 / 24 나머지는 입력X

Storage

  • Ethernet(ens32)
    • IPv4 Settings - Manual로 변경- 211.183.3.100 / 24 / 211.183.3.2 / 8.8.8.8
  • Ethernet(ens33)
    • IPv4 Settings - Manual로 변경- 172.16.1.100 / 24 , 나머지는 입력 X
  • Ethernet(ens34)
    • IPv4 Settings - Manual로 변경- 172.16.2.100 / 24 나머지는 입력X

확인하기

[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

.

[모든 노드에서]

  1. yum -y update && yum -y install net-tools curl vim git wget
  2. ~/.bashrc 에 아래 내용 추가하기
    vim ~/.bashrc
    alias vi='vim'

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

  1. 방화벽(firewalld), 네트워크 매니저(NetworkManager), SELinux 중지, 비활성화
    "방화벽" : 서버에서 발생한 트래픽, 서버로 들어오는 트래픽, 서버를 통과하는 트래픽에 대한 보안설정이가능하다. (allow, deny)
    "네트워크 매니저" : 일반적으로 워크스테이션 용 OS 에서 자동으로 wifi 를 연결하거나 IP 주소를 변경했을 때 이를 설정파일에 즉시 적용하고 재 활성화 시키는 기능이 포함되어 있어 일반 사용자들에게는 편리한 도구이다.
    "SELinux" : 서버 내부 자원으로의 접근에 대한 보안설정을 담당한다. 일반적으로 애플리케이션들의 기본 경로등을 변경하는 작업을 하지 못하도록 차단한다. KVM 에서 이미지의 기본 저장경로는/usr/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
  1. (kvm 노드에서만) KVM1, KVM2 의 ens32(211.183.3.X) → (인터넷으로 연결된, 공인주소가 할당된)인터페이스 이름 변경하기

  2. 파일 수정

kvm1, kvm2

vi /etc/default/grub

6번째 줄 마지막에 net_ifnames=0 biosdevname=0 추가

GRUB_CMDLINE_LINUX="...quiet net.ifnames=0 biosdevname=0"
  1. 인터페이스 수정하기

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
  1. 변경된 내용을 부팅할 때 읽어들이는 커널에 적용 (kvm1,kvm2)
[root@kvm1 network-scripts]# grub2-mkconfig -o /boot/grub2/grub.cfg
  1. kvm1/kvm2를 재부팅 (init6)

kvm1과 kvm2에서 ens33 → eth1, ens34 → eth2로 변경 후 둘 다 정상적으로 변경되었다면

grub2-mkconfig -o /boot/grub2/grub.cfg 이후 다시 부팅

[KVM1/KVM2]

  1. 커널업데이트(yum 이용) -> https://nirsa.tistory.com/64
  2. kvm 설치하기

“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
    
  2. vi /etc/hosts 아래 내용 추가

    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)

    추가

  1. nfs-server 시작하기

    systemctl enable nfs-server ; systemctl start nfs-server
  1. chmod 777 /cloud로 cloud 디렉토리에 대한 퍼미션 조정
chmod 777 /cloud

[kvm1/kvm2가 해야할 일]

  1. nfs-utils 설치

    yum -y install nfs-utils
  2. vi /etc/hosts 파일에 아래 내용 입력

    172.16.1.101 kvm1
    172.16.1.102 kvm2
    172.16.1.100 storage

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

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

    mount -t nfs storage:/cloud /remote
  5. 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
  6. 재부팅 이후에도 위에서 설정한 마운트 정보 계속 유지

    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가 이미 설치되어 있음

  1. iso 파일로 가상머신 설치하기
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하기

관리를 위한 명령어

  1. 동작 중인/중지 중인 모든 가상머신 리스트 확인
virsh list --all
  1. test1을 중지
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

동작중상태에서 추가디스카부착

동작중상태에서 인터페이스추가

가상네트워크브릿지만들기

  1. vm 만들기

0개의 댓글