KVM 사용 정리
패키지 설치
1
2
3
4
$ yum -y install qemu-kvm libvirt virt-install bridge-utils
$ systemctl start libvirtd
$ systemctl enable libvirtd
$ systemctl status libvirtd
이미지 생성
1
2
$ mkdir -p /var/kvm/images
$ virt-install --name centos6.9 --ram 49152 --disk path=/var/kvm/images/centos6.9.img,size=30 --vcpus 32 --os-type linux --os-variant rhel6 --network bridge=**virbr0**,mac=14:02:ec:96:c6:50 --graphic none --console pty,target_type=serial --location=/var/kvm/CentOS-6.9-x86_64-minimal.iso --extra-args 'console=ttyS0,115200n8 serial'
- ram : MB
- disk : path=이미지 설치 경로, size=GB
- network
- bridge=브릿지 네트워크 카드명, 패키지 설치 시점에 카드가 자동 생성되며 해당 카드명을 입력
- mac=사용할 MAC 주소, 지정하지 않아도 상관없음
- location : iso 경로 지정 (iso 파일이 /root/ 이하에 위치하면 퍼미션 에러발생 => 적절한 위치로 이동)
위의 명령어 실행하면 console 에 OS 설치 화면이 나타남 => 설치 진행
이미지 삭제
- 이미지 목록 확인
1
$ virsh list
- 이미지 종료
1 2
$ virsh shutdown VM_NAME $ virsh destroy VM_NAME
- 이미지 스냅샷 조회 및 삭제
1 2
$ virsh snapshot-list --domain VM_NAME $ virsh snapshot-delete --domain VM_NAME --snapshotname SNAPSHOT_NAME
- 이미지 소스 파일 위치 확인
1
$ virsh dumpxml --domain VM_NAME | grep 'source file'
- 이미지 삭제
1
$ virsh undefine VM_NAME
- 이미지 소스 파일 삭제
1
$ rm -rf /.../SOURCE_FILE
이미지 실행 및 종료
- 이미지 목록 및 상태 조회
1
$ virsh list
- 이미지 시작
1
$ virsh start
- 이미지 종료
1
$ virsh shutdown
- 시작된 이미지 콘솔 접근
1
$ virsh console centos6.9
- 연결된 콘솔 종료 ctrl + ]
네트워크(브릿지) 설정
기본적으로 NAT 로 동작하지만 static IP 설정을 위해 해당 절차를 수행
목표
설정
physical server 의 네트워크 카드(eth0)를 브릿지 네트워크 카드(virbr0)로 연결 하기 위해 host OS 에서 다음을 설정함
- 외부와 연결된 네트워크 카드(eth0)의 설정 변경
모든 내용을 지우고 아래와 같이 입력, IP 설정 하지 않음1 2 3 4 5 6 7 8
$ vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=none ONBOOT=yes NAME=eth0 TYPE=Ethernet BRIDGE=virbr0
- 브릿지 네트워크 카드(virbr0)의 설정 변경
기존 eth0에 있던 IP 설정을 이곳으로 복사1 2 3 4 5 6 7 8 9 10 11 12 13
$ vi /etc/sysconfig/network-scripts/ifcfg-virbr0 DEVICE=virbr0 BOOTPROTO=none ONBOOT=yes NAME=virbr0 TYPE=Ethernet DEFROUTE=yes IPADDR=192.168.30.190 PREFIX=24 GATEWAY=192.168.30.254 DNS1=168.126.63.1 DNS2=168.126.63.2
- 브릿지 설정
3.1. ifconfig에 브릿지 네트워크 카드(virbr0)가 보이지 않는다면 다음과 같이 추가
1
$ brctl addbr virbr0
3.2. 브릿지 네트워크 카드(virbr0)를 VM1의 네트워크 카드(vnet0), VM2의 네트워크 카드(vnet1)에 연결
1 2
$ brctl addif virbr0 vnet0 $ brctl addif virbr0 vnet1
- 네트워크 서비스 재시작
1 2
$ systemctl stop NetworkManager $ systemctl restart network
- 설정 확인
eth0, virbr0 의 MAC 주소가 동일하게 됨, vnet0 의 MAC 주소는 이미지 생성할 때 결정됨1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
$ ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 14:02:ec:96:c6:14 txqueuelen 1000 (Ethernet) RX packets 2088894986 bytes 3190206625465 (2.9 TiB) RX errors 0 dropped 324 overruns 0 frame 0 TX packets 16516567259 bytes 23592774792257 (21.4 TiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 0 (Local Loopback) RX packets 187849 bytes 157015976 (149.7 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 187849 bytes 157015976 (149.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.30.201 netmask 255.255.255.0 broadcast 192.168.30.255 inet6 fe80::ac20:bdff:fe8e:2af1 prefixlen 64 scopeid 0x20<link> ether 14:02:ec:96:c6:14 txqueuelen 0 (Ethernet) RX packets 229462 bytes 41493628 (39.5 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 11383 bytes 16683211 (15.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether fe:02:ec:96:c6:50 txqueuelen 500 (Ethernet) RX packets 29741912 bytes 235124843857 (218.9 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 33193294 bytes 207648087466 (193.3 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
VM 장비에 IP를 설정하기 위해 guest OS 에서 다음을 설정함
- 외부에 연결할 네트워크 카드의 설정 변경
통상적인 방법으로 IP 설정 - 네트워크 서비스 재시작
기타
네트워크(브릿지) 설정을 다음과 같이 진행 할 수도 있음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# add bridge virbr0
$ nmcli c add type bridge autoconnect yes con-name virbr0 ifname virbr0
Connection 'virbr0' (0f4b7bc8-8c7a-461a-bff1-d516b941a6ec) successfully added.
# set IP for virbr0 -> host OS 가 사용할 아이피 설정
$ nmcli c modify virbr0 ipv4.addresses 10.0.0.30/24 ipv4.method manual
# set Gateway for virbr0
$ nmcli c modify virbr0 ipv4.gateway 10.0.0.1
# set DNS for virbr0
$ nmcli c modify virbr0 ipv4.dns 10.0.0.1
# remove the current setting
$ nmcli c delete eth0
# add an interface again as a member of virbr0
$ nmcli c add type bridge-slave autoconnect yes con-name eth0 ifname eth0 master virbr0
# restart
해당 명령어가 안된다면 NetworkManager 를 재시작
1
2
$ systemctl stop network
$ systemctl restart NetworkManager