0부터 시작하는 KVM 공부 - 가상 머신 NETWORK 와 APP 성능 차이

Jaehong Lee·2022년 8월 9일
0
post-thumbnail

0. 들어가기 전에

  • kvm 1 과 kvm 2 에서 mount 정보를 확인하자. 우리는 Storage 의 cloud 디렉터리를 각 kvm 의 remote 디렉터리에 mount 해서, 생성하는 가상머신의 Disk 부분인 qcow 2 파일을 cloud 디렉터리에 저장해서 사용하고 있다. 이를 통해 우리는 각 kvm 에서 생성한 가상머신의 xml 부분과 Disk 부분을 나눠서 저장한다

    • 만약, mount 가 되지 않았다면, 위의 파일에 위의 설정을 추가해줘야 한다
  • 가상 머신의 정보를 확인할때, dumpxml 은 xml 파일을 cat 으로 여는 것과 같으며 수정이 불가능 하고, edit 는 xml 파일을 vi 로 여는 것과 같으며 수정이 가능하다

    • xml 에서는 컴퓨팅 자원을 정의한다. 여기서 Disk 정보 부분에는 사용하는 Disk 파일의 경로를 지정하고 있다
    • 위의 target 을 확인하면, scsi 를 통해 볼륨을 추가해서 가상 머신에 mount 한 것을 확인할 수 있다
    • interface 를 설정하면, 새로 생성한 네트워크인 private 1 에 연결되어 있음을 확인할 수 있다

1. Linux Bridge & OpenVSwitch

  • Linux Bridge 를 사용하게 되면, 인터넷과 직접 연결이 가능하다. 이를 통해 가상 머신에 공인 IP 를 직접 할당하여 외부와의 직접 통신이 가능해진다. 이는 L2 의 기능만을 수행한다. 이는 간단한 스위치의 기능만을 제공하므로, Vlan 구성과 Overlay network 구현이 불가능하다

  • OpenvSwitch ( OVS ) 를 사용하게 되면, Vlan 구성과 Overlay network 구현이 가능하게 된다. 또한, Software Defined Network ( SDN ) 구성이 가능하다. SDN 을 이용하면, 여러대의 VM 을 모아 한 곳에서 Control 이 가능하게 할 수 있다. Acl , Nat , QoS 도 가능하다

2. 가상 머신의 APP & Host OS의 APP

  • kvm 은 kernel 에 설치되어 물리 자원을 추상화하여 가상 머신에게 할당해준다. 이 추상화를 통해 물리 자원과 기능이 동일한 가상 자원을 생성할 수 있다

  • 베어메탈 방식으로 Host OS 위에 설치한 APP 과 가상 머신의 APP 의 성능은 1:0.7 의 차이가 난다. 이는, 가상 머신의 app 에서 자원을 요청했을때, 가상 머신의 가상 자원에 접근한다. 허나, Host OS 에서는 이 가상 머신을 하나의 APP 취급을 한다. 따라서, Host OS 의 Kernel 을 거쳐서 물리 자원에 접근해야 하기에 Kernel 을 두 번 거치게 된다. 따라서, Kernel 을 거칠때, 해당 서로 다른 Kernel 사이에 해석 작업이 필요하기에 가상 머신의 APP 은 성능 저하가 있다. 허나 Host OS 위의 APP 은 바로 Host 의 Kernel 에 접근하기에 성능 저하가 없다

3. Default Network & Virbr0

  • 기본적으로, kvm 을 설치하면, default 네트워크가 형성되며, 이 네트워크 안에 virbr0 라는 스위치가 생성된다. 가상 머신들은 이 네트워크에 포함되며, virbr0 스위치와 연결된다

  • 이 default 네트워크는 외부와는 다른 사설 네트워크를 형성한다. 따라서 이 네트워크 안의 가상 머신들은 독립적으로 외부와 통신이 불가능 하기에 virbr0 스위치의 NAT 를 통해 외부와 통신을 한다

  • 이 virbr0 는 내부에서 외부로 나가는 것은 편하지만, 외부에서 내부로 접근하는 것은 쉽지 않다. 따라서, virbr0에 정적 PAT 작업이 필요하다. 허나, 무수히 많은 가상 머신이 존재한다면, 이 정적 PAT 는 적절한 방법이 아니다. 따라서, br0 와 같은 Bridge 네트워크를 통해 가상 머신과 외부를 같은 네트워크에 두어 가상 머신이 직접 공인 IP 를 할당 받을 수 있게 하여 직접 통신이 가능하게 할 수 있다. 또한, 외부에서도 ISP 를 통해 내부로 들어올 수 있다

  • 위와 같이 Bridge 를 확인하면, br0 안에 Interface eth 0 를 포함시킨 것을 확인 가능 하다

4. 추후 할 것

  • 우리는 추후, 방화벽을 통해 nat 를 수행시킬 것 이다. 이를 aws 에서 igw 라고 한다

  • 우리는 지금까지 가상 머신을 이용한 실습을 하였다. 허나, 이는 클라우드 환경에서는 적절하지 않다. 클라우드 환경에서는 사용자가 인스턴스를 생성 요청시 필요한 볼륨 사이즈를 지정할 수 있어야 하고, 각 인스턴스 별로 별도의 Public Key 를 추가할 수 있어야 한다. 우리는 오늘 Virt-customize , Virt-builder 를 이용하여 인스턴스를 배포하는 것을 해볼 것 이다

profile
멋진 엔지니어가 될 때까지

0개의 댓글