#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
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