KVM atau Kernel Virtual Machine merupakan modul dari kernel linux agar memungkinkan sistem operasi bertindak sebagai hypervisor. Sehingga dapat menjalankan instance atau virtual machine di dalam sistem host.
Check Virtualization Support #
Periksa apakah CPU Anda mendukung virtualisasi dengan perintah.
egrep -c '(vmx|svm)' /proc/cpuinfo
Jika output yang tampil adalah 0
maka CPU Anda belum support virtualisasi, sedangkan jika output yang tampil adalah nilai lain maka dapat dipastikan CPU
Anda telah support virtualisasi.
Atau bisa juga menggunakan lsmod
untuk mengecek modul kvm.
lsmod | grep -i kvm
Apabila output seperti salah satu contoh dibawah ini maka CPU Anda mendukung virtualisasi.
kvm_intel 368640 0
kvm 1032192 1 kvm_intel
kvm_amd 155648 0
kvm 1032192 1 kvm_amd
Install KVM dan Virt-Manager #
Untuk menginstall KVM berserta paket dependensinya.
apt -y install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virt-manager sasl2-bin python3-guestfs supervisor
Konfigurasikan vnc dan spice agar listen ke semua address (0.0.0.0). Ini akan membantu apabila ingin mengakses console VM dari luar server host.
sed -i 's/#[ ]*vnc_listen.*/vnc_listen = "0.0.0.0"/g' /etc/libvirt/qemu.conf
sed -i 's/#[ ]*spice_listen.*/spice_listen = "0.0.0.0"/g' /etc/libvirt/qemu.conf
Restart service libvirtd.
systemctl restart libvirtd
Quick Install #
Install KVM dengan script installer.
wget -O - https://bit.ly/36baWUu | sudo sh
Create User #
Jika Anda ingin memakai virt-manager di server host, maka Anda perlu membuat user agar dapat membuka GUI pada virt-manager lalu membuat VM.
adduser virtman
Lalu tambahkan user virtman
ke grup kvm
usermod -aG kvm virtman
chmod 666 /var/run/libvirt/libvirt-sock
Atau jika ingin menambahkan user yang saat ini digunakan.
sudo usermod -aG kvm $USER
Test akses virt-manager.
Create Storage Pool #
Sejak awal instalasi libvirt, terdapat storage pool ke tujuan path /var/lib/libvirt/images
dengan nama pool default
yang dapat digunakan.
Namun jika Anda ingin membuatnya lagi misal ketujuan disk atau path lain gunakan perintah
virsh pool-create-as --name vms --type dir --target /vms
Setting autostart agar pool dapat otomatis aktif jika host di reboot.
virsh pool-autostart vms
List pool yang tersedia.
$ virsh pool-list
Name State Autostart
-------------------------------
default active yes
vms active yes
Create Virtual Network #
Terdapat juga virtual network dengan mode NAT
yang dapat Anda gunakan setelah instalasi libvirt. Namun tutorial kali ini akan menggunakan mode bridge
sehingga VM
mendapatkan alamat IP dari router.

Buat bridge dengan nama br0
brctl addbr br0
Selanjutnya tambahkan interface yang mengarah ke router ke dalam bridge.
brctl addif br0 enp8s0f1
Edit konfigurasi network yang ada di /etc/netplan/
.
network:
ethernets:
enp2s0f1:
dhcp4: true
enp8s0f1:
dhcp4: no
bridges:
br0:
dhcp4: no
interfaces:
- enp8s0f1
version: 2
dhcp4
pada interface bridge.
Selanjutnya buat file network.xml lalu edit seperti berikut.
<network>
<name>net0</name>
<forward mode='bridge'/>
<bridge name='br0'/>
</network>
Buat virtual network dari file network.xml.
virsh net-define network.xml
Lalu setting agar otomatis aktif saat host server di reboot.
virsh net-autostart net0
Aktifkan virtual network.
virsh net-start net0
List network.
$ virsh net-list
Name State Autostart Persistent
-----------------------------------------
net0 active yes yes
Create Virtual Machine #
Download cloud image Rocky 8
wget -O rocky8.qcow2 https://download.rockylinux.org/pub/rocky/8.8/images/x86_64/Rocky-8-GenericCloud.latest.x86_64.qcow2
Lalu pindahkan file ke /vms
untuk menambahkan ke pool vms
mv rocky8.qcow2 /vms
Buat file XML untuk membuat VM dengan virt-install
.
virt-install --print-xml -n rocky8 --os-variant rocky8 \
--memory 2048 --vcpus 2 \
--disk /vms/rocky8.qcow2,cache=none \
--network network=net0,model=virtio \
--graphics vnc > domain.xml
Resource seperti memory
dan vcpus
dapat Anda sesuaikan.
Lalu buat VM dari output file XML.
virsh define domain.xml
Start VM.
virsh start rocky8
Akses console untuk memastikan VM sudah running.
virsh console rocky8
Connected to domain 'rocky-basic'
Escape character is ^] (Ctrl + ])
Rocky Linux 8.8 (Green Obsidian)
Kernel 4.18.0-477.10.1.el8_8.x86_64 on an x86_64
Activate the web console with: systemctl enable --now cockpit.socket
localhost login: