
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 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>
h8nvpc