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 에서 다음을 설정함

  1. 외부와 연결된 네트워크 카드(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
    
  2. 브릿지 네트워크 카드(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. 브릿지 설정 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
    
  4. 네트워크 서비스 재시작
    1
    2
    
    $ systemctl stop NetworkManager
    $ systemctl restart network
    
  5. 설정 확인
    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 에서 다음을 설정함

  1. 외부에 연결할 네트워크 카드의 설정 변경
    통상적인 방법으로 IP 설정
  2. 네트워크 서비스 재시작

기타

네트워크(브릿지) 설정을 다음과 같이 진행 할 수도 있음

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

참고

태그:

업데이트: