KVM (Kernel-based Virtual Machine) adalah modul pada kernel Linux yang memungkinkan sistem operasi bertindak sebagai hypervisor, sehingga dapat menjalankan instance atau virtual machine (VM) di dalam sistem host.
Mengecek Dukungan Virtualisasi #
Cek Dukungan CPU #
Gunakan perintah berikut untuk memeriksa apakah CPU mendukung virtualisasi hardware:
egrep -c '(vmx|svm)' /proc/cpuinfo
- Jika output bernilai 0, berarti CPU tidak mendukung virtualisasi hardware.
- Jika output bernilai > 0, maka CPU mendukung virtualisasi.
Keterangan:
- vmx = Intel VT-x
- svm = AMD-V
Cek Modul KVM #
Anda juga dapat memastikan dukungan virtualisasi melalui modul kernel KVM dengan perintah:
lsmod | grep -i kvm
Jika CPU mendukung, biasanya akan muncul salah satu output seperti berikut:
Untuk CPU Intel:
kvm_intel 368640 0
kvm 1032192 1 kvm_intel
Untuk CPU AMD:
kvm_amd 155648 0
kvm 1032192 1 kvm_amd
Jika modul kvm_intel atau kvm_amd muncul, maka dukungan virtualisasi aktif dan dapat digunakan oleh KVM.
Install KVM dan Virt-Manager #
Untuk menginstal KVM beserta paket dependensinya, jalankan perintah berikut:
apt -y install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virt-manager sasl2-bin python3-guestfs supervisor ksmtuned
Konfigurasi VNC dan SPICE #
Agar console VM dapat diakses dari luar host, Anda dapat mengatur VNC dan SPICE agar listen pada semua alamat (0.0.0.0). Edit konfigurasi qemu.conf dengan perintah berikut:
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
Setelah selesai, restart service libvirtd:
systemctl restart libvirtd
Quick Install #
Anda juga dapat menginstal KVM menggunakan script otomatis:
wget -O - https://raw.githubusercontent.com/retspen/webvirtcloud/master/dev/libvirt-bootstrap.sh | sudo sh
Create User #
Jika Anda ingin menggunakan virt-manager langsung pada server host (melalui GUI), Anda perlu membuat user khusus atau menggunakan user yang sudah ada, kemudian memberikan akses ke grup yang relevan.
Membuat User Baru (Opsional) #
Jika ingin membuat user baru untuk mengakses virt-manager:
adduser virtman
Kemudian tambahkan user tersebut ke grup kvm dan libvirt:
usermod -aG kvm,libvirt virtman
Menggunakan User yang Sedang Aktif #
Jika Anda ingin memberikan akses virt-manager kepada user yang saat ini dipakai:
sudo usermod -aG kvm,libvirt $USER
Akses Socket Libvirt (Jika diperlukan) #
Pada beberapa distro, socket libvirt sudah otomatis memiliki permission yang sesuai untuk member grup libvirt. Namun jika terjadi error akses, Anda bisa sementara memberikan permission berikut:
chmod 666 /var/run/libvirt/libvirt-sock
libvirt (seperti pada langkah sebelumnya).
Menguji Akses Virt-Manager #
Setelah konfigurasi selesai, jalankan:
virt-manager
Jika berhasil, Anda akan melihat tampilan GUI virt-manager:
Create Storage Pool #
Pada instalasi awal libvirt, biasanya sudah tersedia satu storage pool bernama default yang menunjuk ke direktori:
/var/lib/libvirt/images
Pool ini dapat langsung digunakan untuk menyimpan disk image VM.
Jika Anda ingin membuat storage pool baru—misalnya untuk menggunakan disk lain atau direktori berbeda—gunakan perintah berikut:
virsh pool-create-as --name vms --type dir --target /vms
Mengaktifkan Autostart #
Agar storage pool otomatis aktif setiap kali host direboot, jalankan:
virsh pool-autostart vms
Melihat Daftar Storage Pool #
Gunakan perintah berikut untuk menampilkan semua storage pool yang tersedia:
virsh pool-list
Contoh output:
Name State Autostart
-------------------------------
default active yes
vms active yes
Create Virtual Network #
Secara default, libvirt menyediakan virtual network berjenis NAT (biasanya bernama default).
Namun pada tutorial ini, kita akan menggunakan mode bridge agar VM mendapatkan alamat IP langsung dari router, sama seperti perangkat fisik lainnya.
Membuat Bridge br0
#
Buat interface bridge:
brctl addbr br0
Kemudian tambahkan interface fisik (yang terhubung ke router) ke dalam bridge:
brctl addif br0 enp8s0f1
Konfigurasi Netplan #
Edit file konfigurasi di /etc/netplan/*.yaml menjadi seperti berikut:
network:
ethernets:
enp2s0f1:
dhcp4: true
enp8s0f1:
dhcp4: no
bridges:
br0:
dhcp4: no
interfaces:
- enp8s0f1
version: 2
Penjelasan:
- enp2s0f1 → Interface untuk remote access (SSH).
- enp8s0f1 → Interface yang dipasangkan ke bridge.
- br0 → Bridge yang akan digunakan VM.
dhcp4: yes pada br0 dan menghapus konfigurasi DHCP dari interface fisik.
Terapkan konfigurasi:
netplan apply
Membuat File network.xml
#
Buat file network.xml dan isi dengan konfigurasi berikut:
<network>
<name>net0</name>
<forward mode='bridge'/>
<bridge name='br0'/>
</network>
Penjelasan:
- forward mode=‘bridge’ → Mode bridge murni, VM seolah-olah langsung berada di jaringan fisik.
- bridge name=‘br0’ → Mengaitkan network libvirt ke interface bridge yang telah Anda buat.
Mendaftarkan Virtual Network ke Libvirt #
Define network:
virsh net-define network.xml
Set agar aktif otomatis saat boot:
virsh net-autostart net0
Aktifkan network:
virsh net-start net0
Mengecek Virtual Network #
Lihat daftar virtual network aktif:
$ virsh net-list
Name State Autostart Persistent
-----------------------------------------
net0 active yes yes
Jika muncul seperti di atas, berarti virtual network bridge sudah berhasil dibuat.
Membuat Virtual Machine (KVM/QEMU) #
Unduh Cloud Image Rocky Linux 8 #
Gunakan cloud image resmi dari Rocky Linux.
wget -O rocky8.qcow2 https://download.rockylinux.org/pub/rocky/8.8/images/x86_64/Rocky-8-GenericCloud.latest.x86_64.qcow2
Pindahkan file ke direktori storage pool, misalnya /vms:
mv rocky8.qcow2 /vms
Generate File XML VM Menggunakan virt-install
#
Buat file XML konfigurasi VM dengan virt-install --print-xml:
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
memory, vcpus, storage, maupun network sesuai kebutuhan.
Import VM ke Libvirt #
Mendaftarkan VM dari file XML:
virsh define domain.xml
Menjalankan Virtual Machine #
Start VM:
virsh start rocky8
5. Mengakses Console VM #
Gunakan console untuk memastikan VM berjalan normal:
virsh console rocky8
Contoh output:
Connected to domain 'rocky8'
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: