VDI 서비스 – VM 배포 (VM Distribution)

VM 설치할 호스트 준비되어 있고, base OS 준비되어 있다면 이제 VM를 배포해봅시다.

  • Ubuntu용 base OS : base3-ubuntu20.04-500g
  • CentOS 용 base OS : base-centos7.0-500g-copy

VM 이미지 준비

qcow2 이미지는 /var/lib/libvirt/images 에 넣고  xml 파일은 로컬 디렉토리에

두고 xml이 있는 곳에서 VM을 정의합니다.

[root@myvdi1]# virsh define base3-ubuntu20.04-500g.xml
Domain base3-ubuntu20.04-500g defined from base3-ubuntu20.04-500g.xml

[root@myvdi1]# virsh define base-centos7.0-500g-copy.xml
Domain base-centos7.0-500g-copy defined from base-centos7.0-500g-copy.xml

base VM은 shutdown 상태로 둬야 합니다.

base 용 VM의 xml과 qcow2 파일은 10.1.140.113 서버의 /root/VDI 위치에 있음

IP 할당

새로운 VM이 사용할 IP를 할당하고 IP사용할 수 있도록 네트워크를 준비합니다. (스위치 설정)

clone 이용한 VM 생성

VM 이름은 가능한 유일Key (사용자 이름, ID) 와 생성 날짜를 이용하여 선정합니다.

Ubuntu의 경우

virt-clone --original base3-ubuntu20.04-500g --name <vm>-20240623 --file /var/lib/libvirt/images/<vm>-20240623.qcow2 

CentOS의 경우

virt-clone --original base-centos7.0-500g-copy --name <vm>-<creation date> --file /var/lib/libvirt/images/<vm>-<create date>.qcow2

브릿지 지정

base OS의 bridge는 lbr-mgmt.180 으로 설정되어 있으므로 clone으로 생성한 VM의 bridge는

적절한 bridge를 사용하도록 설정하도록 합니다.

virsh edit <vm name> 수행하여 mgmt 로 검색 후 적절한 bridge name으로 수정 후 저장합니다.

호스트별 10G가 2포트 할당되어 있다면 VM의 traffic 분산을 위해 VM별로 나눠서 사용하는 것이 좋습니다.

A서버의 경우 총 16개 VM을 설치한다고 할 때, 8개 VM 을 한 포트에만 할당합니다.

ex) lbr-mgmt.240    → 8개 VM연결

      lbr-mgmt.240-1  → 8개 VM연결

bridge 를 하나의 NIC 포트에 연결할 경우 traffic이 몰리면 속도 현저히 줄 수 있기 때문에

서버 셋업시 적절한 고려가 필요합니다.

호스트 재부팅시 VM 자동 살리기 설정

virsh autostart <vm name>

VM 시작

virsh start <vm name> 

VM 로그인 및 작업

virsh console <vm name> 

VM 콘솔로 로그인 하여 hostname 과 IP 를 설정합니다.

우분투 admin1 / password, CentOS  root / password

IP설정

Ubuntu에서 IP설정

다음과 같이 사용자의 IP로 수정합니다.

sudo vi /etc/netplan/01-network-manager-all.yaml 

sudo netplan apply

ip a 로 IP 변경 확인

IP 설정 후 통신 확인

CentOS7에서 nmcli 적용하는 방법

다음과 같이 사용자의 IP로 수정합니다.

nmcli con mod eth0 ipv4.addr 10.251.180.7/24 ipv4.gateway 10.251.180.1

nmcli con up eth0

ip a 로 IP변경 확인

IP 설정 후 통신확인

다음과 같이 ipv6 가 3개 설정되고 dadfailed 로 표시되는 현상이 자주 발생함

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default 
qlen 1000link/ether 52:54:00:50:1c:94 brd ff:ff:ff:ff:ff:ff    

inet 192.22.22.12/32 brd 192.22.22.12 scope global noprefixroute eth0       
valid_lft forever preferred_lft forever    

inet6 fe80::c547:ebb0:a783:66ee/64 scope link tentative noprefixroute dadfailed       
valid_lft forever preferred_lft forever    

inet6 fe80::4f66:9c98:acd6:afb5/64 scope link tentative noprefixroute dadfailed       
valid_lft forever preferred_lft forever    

inet6 fe80::242e:4a78:fd71:4185/64 scope link tentative noprefixroute dadfailed       
valid_lft forever preferred_lft forever

해결책은 nmcli 로 ipv4 주소 설정시 마지막 라인에 ipv6.method ignore 을 추가하여 설정합니다.

ex) 

nmcli con mod eth0 ipv4.addr 10.251.180.7/24 ipv4.gateway 10.251.180.1 ipv6.method ignore

VM hostname 설정

VM hostname은 사용자가 바꿀 수 있는 항목이므로 사용자가 로그인해서 본인 것이 맞는지 확인하는 용도로만

사용하므로 꼭 id 일부로 본인 것인지 알 수 있도록 하는 것이 좋습니다.

sudo hostnamectl set-hostname <id로 적절히 사용>

hostname 에는 . 을 쓰지 않는 것이 좋습니다.

admin1@keonpyo:~$ sudo vi /etc/netplan/01-network-manager-all.yaml

sudo: unable to resolve host keonpyo.kong: Temporary failure in name resolution

VM 재부팅

VM 재부팅하면 좋겠지만 호스트를 reboot 할 수 있으므로 skip 하겠습니다. (추후 단계에서 재부팅)

VM측으로 통신확인 및 사용자 VM확인

VM의 IP대역과 다른 IP 대역에서 수행할 것

(동일 IP대역 또는 동일 스위치 관리하의 host에서 수행시 외부통신이 안되는지 파악이 안될 수 있음)

ssh 로 VM에 접속하여 사용자에게 할당한 IP인지, 해당 VM이 맞는지 hostname으로 확인합니다.

여러 VM 배포 후 설정 상황 확인하고 수정

running 중인 VM에 autostart 적용되었는지 모두 확인합니다.

for i in `virsh list | egrep -Ev "Name|\-\-\-" | awk '{print $2}'` ; do echo $i; virsh dominfo $i | grep -i autostart | grep disable ; echo; done

모든 VM에 대해 virsh dumpxml 수행하여 bridge를 골고루 분배하여 가져갔는지 확인합니다.

for i in `virsh list | egrep -Ev "Name|\-\-\-" | awk '{print $2}'` ; do virsh dumpxml $i | grep -i "lbr-mgmt.240"; done

잘못된 bridge 사용하고 있는 경우 virsh edit로 수정 후 사용자에게 알리고 VM shutdown 후 start 합니다.

virsh shutdown <vm name> 

virsh start <vm name> 

VDI 서비스 – VM 배포 (VM Distribution)”의 1개의 생각

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다