#21 [학습서] ARM기반 가상화(KVM) 실습
Tasks
ARM기반 가상화(KVM) 실습#
1. Kernel-based Virtual Machine(KVM)#
- KVM은 KVM 커널 모듈을 통해, 리눅스 커널을 하이퍼바이저로 변환한다.
- QEMU는 하드웨어를 에뮬레이트하는 기능이며, KVM에 QEMU가 포함된다.
- 커널수준의 하이퍼바이저이기에 Type1에 해당되지만, KVM환경에서 Host OS가 완전히 동작하기에 Type2로 분류된다.
1.1. KVM 지원 시스템#
- 일반적은 AMD-V와 Intel VT 등의 x86에서는 가상화 확장(virtualization extensions)을 지원한다. 이는 KVM이 x86에서 전가상화 솔루션으로 사용가능하다는 의미이다. 따라서, 메인 Linux커널에는 KVM이 포홤되고 KVM에는 QEMU를 포함한다.
#x86기반 가상화지원 확인 lscpu | grep Virtualization # 결과> # Virtualization: VT-x # KVM 모듈 확인 (x86) lsmod | grep kvm # 결과> # kvm_intel 294912 0 # kvm 819200 1 kvm_intel # 모듈 확인이 안될경우 아래 사용 modprobe kvm_intel modprobe kvm_amd # CPU가 하드웨어 가상화 지원하는 여부 확인 grep -E -c "vmx|svm" /proc/cpuinfo # 결과> # 0 보다 클경우 하드웨어 가상화를 지원한다. # VMX나 SVM을 포함하지 않을 경우 CPU 가상화는 지원되지 않는다.
- 위의 내용은 일반 x86을 기반 하드웨어 가속을 확인하는 방법이다. 현재까지 파악한 바로는 ARM에서 하드웨어 가속을 직접적으로 확인하는 명령어는 찾지 못했다. 다만 커널 메시지 또는 패키지를 통해서 KVM 지원 여부를 파악할 수 있다.
# 커널 메시지를 통해 kvm 사용 확인 dmesg | grep -i kvm # 결과 > # [ 3.255834] kvm [1]: IPA Size Limit: 40 bits # [ 3.261646] kvm [1]: vgic-v2@2c020000 # [ 3.265346] kvm [1]: GIC system register CPU interface enabled # [ 3.271804] kvm [1]: vgic interrupt IRQ1 # [ 3.276390] kvm [1]: Hyp mode initialized successfully # 패키지를 통해 kvm 지원 확인 sudo apt install -y cpu-checker kvm-ok # 결과 > # INFO: /dev/kvm exists # KVM acceleration can be used
1.2. KVM 패키지 설치#
- 설치 패키지
sudo apt install -y qemu-kvm libvirt-daemon libvirt-clients bridge-utils virtinst virt-manager # --------------------------------------------------------------------- # # KVM에뮬레이터 제공하는 VM관리 패키지 sudo apt install -y qemu-kvm # 가상화 지원하는 libvirtd 데몬 패키지 sudo apt install -y libvirt-daemon # 가상화 플랫폼을 관리하기위한 소프트웨어 sudo apt install -y libvirt-clients # 이더넷 브리지를 구성하기위한 명령 줄 도구 세트 sudo apt install -y bridge-utils # 가상 머신을 만들기위한 명령 줄 도구 집합 sudo apt install -y virtinst # libvirt기반 VM 관리 GUI 인터페이스 도구 sudo apt install -y virt-manager
- 설치확인
- x86의 경우
lsmod | grep -i kvm
- ARM의 경우
# libvirtd 설치 확인 sudo systemctl is-active libvirtd # 사용자 그룹 추가 sudo usermod -aG libvirt $USER sudo usermod -aG kvm $USER # libvirtd 서비스 확인 sudo systemctl enable libvirtd --now sudo systemctl status libvirtd.service
- x86의 경우
1.3. KVM 실행#
기본 KVM 네트워크 설정
# 네트워크 확인 sudo virsh net-list # 위에 default가 없으면 실행 sudo virsh net-start default
UI 실행
# virt GUI 실행 virt-manager
- 실행화면
- 실행화면
CLI 실행
# 이미지 다운로드 wget https://cdimage.ubuntu.com/releases/20.04/release/ubuntu-20.04.5-live-server-arm64.iso # VM 생성 실행 sudo virt-install --name=test-vm \ --vcpus=2 \ --memory=2024 \ --cdrom=./ubuntu-20.04.5-live-server-arm64.iso \ --disk size=10
옵션
--name VM에 부여하는 이름 --description VM에 대한 간단한 설명 --ram VM에 할당하려는 RAM의 양 --vcpus VM에 할당하려는 가상 CPU 수 --disk 디스크에서 VM의 위치(존재하지 않는 qcow2 디스크 파일을 지정하면 자동으로 생성됨) --cdrom 다운로드한 ISO 파일의 위치 --graphics 표시 유형을 지정합니다 실행화면
VM 생성 확인
virsh list # 결과 > # Id Name State # ------------------------- # 5 test-vm running virsh net-list # 결과 > # Name State Autostart Persistent #-------------------------------------------- # default active no yes virsh net-info default # 결과 > # Name: default # UUID: 0b28ad19-a402-4f9f-96f3-44fc37e0cb2a # Active: yes # Persistent: yes # Autostart: no # Bridge: virbr0 virsh net-dhcp-leases default # 결과 > # Expiry Time MAC address Protocol IP address Hostname Client ID or DUID # ------------------------------------------------------------------------------------------------------------------------------------------------ # 2022-11-03 10:07:40 52:54:00:99:90:74 ipv4 192.168.122.138/24 vraptor ff:56:50:4d:98:00:02:00:00:ab:11:24:40:3e:78:e9:3e:a3:99
netbooting 실행 (옵션)
sudo virt-install --name ubuntu-guest --os-variant ubuntu20.04 --vcpus 2 --ram 2048 --location http://ports.ubuntu.com/ubuntu-ports/dists/focal/main/installer-arm64/ --network bridge=virbr0,model=virtio --graphics none --extra-args='console=ttyS0,115200n8 serial'
- 실행화면
- 실행화면
1.4. KVM 네트워크 설정 (옵션)#
- 참고
- 네트워크 브리지 설정
# 가상 브리지 "virbr0"은 KVM 자동 생성되며, 테스트 목적으로 사용된다. # 네트워크 브리지 사용은 아래와 같이 편집해야 한다. sudo vi /etc/netplan/00-installer-config.yaml > ... # 추가 bridges: br0: interfaces: [eth0] addresses: [172.20.10.9/28] gateway4: 172.20.10.1 nameservers: addresses: [4.2.2.2, 8.8.8.8] # 확인 sudo netplan apply sudo networkctl status br0 sudo networkctl -a sudo networkctl list
1.5. 디스크 이미지 생성#
- qcow2(QEMU Copy-On-Write2) 파일생성
- QEMU에서 이용되는 디스크 이미지 파일 포맷
- 해당 파일 포맷의 이미지는 가상 Storage의 저장 용량을 할당한다.
- 동적 블록 할당(실제 데이터 크기는 논리적보다 작다), 오버레이 방식(백업 이미지에서 추가 변경사항만 작성), 스냅샷 생성(이미지 이전 내용 복구 가능)
- qcow2 파일 생성
20GB까지 용량을 확보가능한 파일 포맷을 생성
OS를 담고 있지 않은 비어 있는 파일, OS를 설치할 가상 디스크 역할
qemu-img create -f qcow2 ubuntu20_base.qcow2 20G
1.6. OpenStack : QEMU-KVM 설치 (옵션)#
ARM기반 오픈스택에서는 Compute노드의 하이퍼바이저를 이용하여 인스턴스를 생성한다. OS환경이 Ubuntu일때 가상화를 위해 사용하는 도구는 QEMU이다.
- ARM ubuntu 20.04
apt-get install qemu-kvm -y apt-get install virtinst -y apt-get install bridge-utils -y apt-get install cpu-checker -y apt-get install virt-manager -y apt-get install qemu-efi -y apt-get install -y qemu-kvm virtinst bridge-utils cpu-checker virt-manager qemu-efi sudo adduser $USER kvm
Comment 0
Add a comment