0부터 시작하는 KVM 공부 - 가상 머신 생성 & 가상 머신 네트워크 관리

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

0. 들어가기 전에

시작하기 전에 항상 SElinux 확인 , NFS Mount 확인 , libvirtd Status 확인을 하자

iso 이미지 & 클라우드용 이미지 다운

# iso 이미지
wget http://mirror.kakao.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso

# 클라우드 용 이미지
wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-2003.qcow2.xz
  • 위 코드를 통해 iso 이미지 ( 상단 코드 ) 와 클라우드 용 이미지 ( 하단 코드 ) 를 다운 받자. KVM 에서는 /remote 디렉터리, 즉, storage 의 cloud 디렉터리에 다운 받자

Hyper Visor 의 Type

  • Hyper Visor 의 Type 은 Hyper Visor 가 어디에 배치되는지에 따라 갈린다

  • Type 1

    • 물리 자원 바로 위에 배치되면 Type 1 이다. KVM 은 KERNEL 에 배치되므로 물리 자원 바로 위에 배치된다. 이러한 Type 1 을 Bare Metal Hyper Visor 이라고 부르며, KVM , ESX 등이 있다. 이러한 Type 1 은 직접 물리 자원에 접근하여 자원을 가상화 할 수 있다
  • Type 2

    • Host 위에 배치되면 Type 2 이다. 물리 자원 위에 OS 가 있으며, 그 위에 Hyper Visor 가 배치된다. 이는 물리 자원에 접근하기 위해선, Host OS 의 Kernel 에 접근해야 한다. 물리 자원에 직접 접속하는 Type 1 과 다르게, OS 에 한번 접근해서 물리 자원에 접속해야 하기에 한단계가 추가된다. 이러한 Type 2 를 Host Based Hyper Visor 이다. 여기에는 VM MS / Virtual Box / Virtual Pc 등이 포함된다

Migration

  • xml 영역만 migrate 하는 것을 live migration 이라고 한다. 이는 공유 storage 에 disk 를 두고 사용할 때 가능하다
  • disk 영역을 옮기는 것을 storage migration 이라고 한다. 만약, disk 를 local disk 로 사용했을 때, migration 한다면, 지연 시간 및 패키지 손실이 일어날 수 도 있다

VIRBR0 의 역활

  • VIRBR0 는 NAT 를 해준다. 이를 통해, 다수의 가상 머신이 있을 때, 이 가상 머신들이 외부와 통신을 할때, VIRBR0 를 통해 NAT 되어 ETH 0 으로 가서 외부로 나간다

실습 전 환경 확인

  • 시작할 때는 NFS 서버를 먼저 시작하고, 종료할 때는 NFS 서버를 마지막에 종료하자

  • Mount 정보를 확인 하자
  • 네트워크를 확인 하자
    • Storage 의 경우 외부 연결이 필요 없다. 따라서, 특별한 경우가 아니라면 인터넷 연결용 인터페이스는 비활성화 시켜두어야 한다

1. VM / 인스턴스 생성 방법

    1. ISO 를 이용한 방법 : ISO 이미지는 설치 파일로 안에 파일과 디렉터리가 들어있다. 이 ISO 이미지를 디스크에 집어 넣어 부팅 시키면, 설치 마법사가 시작된다. 이렇게 설치가 끝나면, 디스크에 OS 가 설치된 상태가 된다. 허나, 이 상태로는 동작할 수 없기에, 여기에 컴퓨팅 자원이 정의된 XML 영역을 붙이면 하나의 가상 머신으로 동작할 수 있다
      • 가상 머신의 디스크는 가상 머신이 보기에는 디스크지만, HOST 에서 보기에는 파일 이다. 이 파일 포멧에는 QCOW 2 , RAW , VMDK 등이 있다
      • 볼륨을 재사용하여, 컴퓨팅 자원을 import 하여 제공하는 것이 인스턴스를 배포하는 것 이다. 이는 2번 방법을 봐보자
    1. qcow 2 파일을 이용한 배포 : OS 가 설치된 디스크 파일인 qcow 2 파일을 copy 하여, 사용자가 원하는 만큼의 컴퓨팅 자원에 따라 xml 파일을 붙여서 배포할 수 있다. 이는 위의 방법보다 빠르므로, 클라우드에서는 이 방법을 사용한다
      • 허나, 이 방법은 디스크의 용량이 제한된다는 단점이 필요하다
    1. 디스크 확장을 이용한 배포 : 각 사용자 / VM / 인스턴스 별로 Key-Pair 를 만들어, 원하는 디스크 용량에 따라 확장이 가능하다. 이는 Virt-Builder 로 가능하다

2. ISO 이미지 를 이용한 인스턴스 생성

kvm 1

  • 사용할 디스크를 미리 준비하고 설치할 것 이다
  • 준비된 디스크와 컴퓨팅 자원을 이용하여 설치하기

  • 이미지의 이름을 축소 시키자
  • 디스크를 하나 생성했다
  • 10G 라고 설정했지만, 현재 -l 로 확인하면, 실제 사용하는 용량 만큼만 나타낸다. 이는 10G 까지 사용할 수 있다
  • 위와 같이 설치하자. 우리는 설치 과정을 vnc 를 통해 gui 환경에 연결하여 볼 수 있기에 이를 vmm 에 가서 확인해보자
  • vnc port 는 5900 번 이므로, port 번호가 이와 겹치면 안된다. 따라서 kvm 1 에는 5901, kvm 2 에는 5902 번 port 를 사용하자

kvm 2

  • 설치하면서 디스크 준비까지 한 번에 하기
virt-install --name centos2 --vcpus 1 --ram 1024 --network network:default --disk /remote/centos2.qcow2,size=10 --graphics vnc,port=5902 --location=/remote/CentOS7-2009.iso --noautoconsole
  • 위 코드를 사용하자
  • 미리 준비한 디스크가 없으므로, 위와 같이 disk 이름 뒤에 ,size 를 통해 최대 용량을 정해준다. 단위는 GB 이다
  • VMM 에 들어가서 더블 클릭해주자. 여기서 네트워크와 PASSWORD & USER 만 설정을 해주면 된다
  • KVM 안의 VM 의 설치가 끝나면, 재부팅 해주자

3. 가상 머신 관리하기

  • 하이퍼 바이저에서 가상 머신 리스트 확인
  • 동작중인 가상 머신을 확인하자
  • 네트워크 리스트도 확인하자
  • kvm 데몬이 재 실행 되더라도 동시에 vm 도 재 실행 되도록 하고 싶으면, auto start 를 설정 하면 된다
  • 위 와 같이 --name 을 통해 가상 머신의 이름만 출력이 가능 하다
  • 가상 머신들에게 콘솔로 접속하고 싶다면, virsh console '가상 머신 이름 ' 으로 접속하면 된다. 이는 인스턴스 생성시 console line 을 생성하지 않는다면, 연결되지 않을 수 있다. 단, 클라우드용 이미지는 이미 콘솔 라인이 생성되어 있으므로 바로 연결된다. ctrl + ] 로 빠져나오자

4. 가상 머신들의 설정값 확인

1. virsh dumpxml ' 가상 머신 이름 '

  • 설정된 가상 머신의 xml 파일을 cat 으로 열어보는 것과 동일하다
  • source file 을 보면 centos1.qcow2 를 사용하겠다고 되어 있다. 이를 바꾸면 disk 위치를 바꿀 수 있다
  • 인터페이스도 확인해보자

2. virsh edit ' 가상 머신 이름 '

  • vi 편집기로 가상 머신의 xml 파일을 여는 것과 같이 편집 모드로 들어갈 수 있다

5. 네트워크의 설정값 확인 및 수정

1. virsh net-dumpxml default : xml 파일을 cat 으로 확인하는 것과 같으며, 편집은 불가능 하다

  • 위의 nat 부분이 사라지면, host-only 와 같이 동작한다
  • dhcp 를 통해 122 대역 ip 가 가상 머신들에게 할당 된다
  • 위와 같은 구조이다

2. virsh net-edit default : vi 로 연결되어 스위치의 구성 내용을 변경할 수 있다

  • 다음과 같이 dhcp 구성을 변경해보자
  • 다음과 같이 xml 설정이 수정되었다고 나온다. 이는 바로 적용되는 것 이 아닌, 서비스를 재실행 해야 한다
  • 수정 이후에는 네트워크와 kvm 을 재실행하자
systemctl restart libvirtd  # kvm 데몬 재실행
virsh net-destroy default   # default 네트워크 중지
virsh net-start default     # default 네트워크 실행
virsh destroy centos1       # 가상머신 종료
virsh start centos1         # 가상머신 시작  

6. 가상 머신의 Ip 주소 확인

virsh domifaddr '가상 머신 이름' 으로 가상 머신의 네트워크 정보를 확인하자

  • 주소가 잘 변경 되었다

virsh domiflist '가상 머신 이름' : 가상 머신의 인터페이스 정보를 출력해준다. 이는 Ip 주소는 보여주지 않는다

7. 새로운 네트워크 만들기

  • 기존 default 네트워크를 이용하여 생성하기
  • 편집기로 들어가서 내용을 복사하자
  • 새 xml 파일을 만들어서, 다음 내용을 입력해주자. 이는 사설 구간이므로 외부와 통신을 할 필요가 없으므로 uuid 와 nat 를 없애주고, 사설 ip 를 따로 설정하였다
  • 위와 같은 구조가 만들 것 이다
  • 아직까지는 이 xml 파일은 그냥 텍스트 파일이다. 이제 이 파일을 적용시켜야 한다
  • net-define 을 통해 네트워크를 정의 시켜주자. 이제 새 네트워크가 생성되었다
    • 삭제하고 싶다면 virsh net-undefine '네트워크 이름' 으로 삭제하면 된다

네트워크 상태를 확인하고, 설정하자

  • 현재 private1 은 중지중이고, Autostart 가 아니다. 이를 실행시키고, kvm 이 실행될 때 자동으로 실행되게 Autostart 를 시켜줘야 한다
  • 위와 같이 start 와 autostart 를 해주면 된다

8. 가상 머신에 네트워크 연결

  • 스위치 이름은 virbr1 이며, 네트워크 이름은 private1 이다
  • 생성한 virbr1 을 확인하자
  • Ip 는 172.16.100.1 이며, 이 네트워크에 연결되는 가상 머신들은 172.16.100. 대역을 dhcp 를 통해 Ip 주소를 할당 받을 수 있다
  • 위 코드를 통해 연결한다. 이는 centos1 에 network 타입의 private 1 네트워크에 연결할 예정이고, lan 카드 모델은 virtio 이다. live 를 통해 가상 머신이 동작중인 상태에서 연결할 것 이고, config 를 통해 재부팅이 되더라도 설정을 계속 유지시킨다
  • kvm1 에서 virbr1 으로 통신이 잘 된다

9. 가상 머신 Migrate 해보자

  • 여기서 allow unsafe 는 무슨 모드 일까? Migrate 를 하면, 암호화가 되어 터널을 통과하여 Migration 된다. 허나, 지금 환경에서는 safe 모드가 지원되지 않으므로 unsafe 모드로 해야 한다
  • 허나, Migrate 가 오류가 난다. 이는 kvm2 에 해당 네트워크가 없기 때문이다
  • 이렇게, VM 을 Migration 하면, xml 파일에 두 개의 interface 에 대한 정보가 담겨있다. 이 중에서, virbr1 네트워크가 kvm2 에 없기에 오류가 난다
  • kvm 2 에서 다음과 같이 private1 네트워크를 활성화 해주자
  • 이제 kvm 2 에도 private 1 네트워크가 생성됬으므로, kvm 2 에 centos 1 의 xml 파일을 보냈을 때, kvm 2 에서 xml 파일 안의 private 1 네트워크를 인식할 수 있고, 이를 제공해줄 수 있다. 따라서, migration 이 된다

만약 vnc 포트 오류가 난다면

  1. virsh destroy centos1 으로 centos1 의 네트워크를 중지
  2. virsh edit centos1 을 통해 vnc port 번호를 변경
  • 이는 migrartion 했을때 centos1 과 centos2의 vnc port 번호가 동일해서 일어나는 문제다

vm ws 에서 nat 네트워크는 하나밖에 사용 못 한다. 허나, 위와 같은 네트워크를 생성하여, 여러개의 nat 네트워크를 만들어 각각 설정해줄 수 있다

클러스터를 형성하면, 다수의 서버가 자원을 공유할 수 있다. 이 클러스터와 overlay 를 구축한 환경에서는 모든 서버에 동일한 네트워크 정보가 존재하므로, vm 이 자유롭게 migration 을 할 수 있으며, 물리적으로 떨어져있는 서버의 vm 끼리 통신이 가능해진다

10. 연결된 인터페이스를 동작중인 상태에서 제거하기

  • 위와 같이 xml 파일을 보면, 두 가지 인터페이스가 정의 되어 있다
virsh detach-interface --domain centos1 --type network --mac 'mac 주소' --config
  • 위 코드를 통해 동작중인 상태의 가상 머신에 연결된 인터페이스를 제거할 수 있다

  • 이를 통해 private 1 로부터 제거해보자

  • 먼저, private 1 에 대한 MAC 주소를 확인하자
  • 위 코드를 통해 detach 시키자. config 는 재부팅 이후에도 이 설정이 유지되게 하는 옵션이다
  • 가상 머신을 껏다 키면 인터페이스가 detach 된 것을 확인할 수 있다
profile
멋진 엔지니어가 될 때까지

0개의 댓글