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 kvmJika CPU mendukung, biasanya akan muncul salah satu output seperti berikut:
Untuk CPU Intel:
kvm_intel 368640 0
kvm 1032192 1 kvm_intelUntuk CPU AMD:
kvm_amd 155648 0
kvm 1032192 1 kvm_amdJika 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 ksmtunedKonfigurasi 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.confSetelah selesai, restart service libvirtd:
systemctl restart libvirtdQuick Install #
Anda juga dapat menginstal KVM menggunakan script otomatis:
wget -O - https://raw.githubusercontent.com/retspen/webvirtcloud/master/dev/libvirt-bootstrap.sh | sudo shCreate 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 virtmanKemudian tambahkan user tersebut ke grup kvm dan libvirt:
usermod -aG kvm,libvirt virtmanMenggunakan User yang Sedang Aktif #
Jika Anda ingin memberikan akses virt-manager kepada user yang saat ini dipakai:
sudo usermod -aG kvm,libvirt $USERAkses 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-socklibvirt (seperti pada langkah sebelumnya).
Menguji Akses Virt-Manager #
Setelah konfigurasi selesai, jalankan:
virt-managerJika 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/imagesPool 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 /vmsMengaktifkan Autostart #
Agar storage pool otomatis aktif setiap kali host direboot, jalankan:
virsh pool-autostart vmsMelihat Daftar Storage Pool #
Gunakan perintah berikut untuk menampilkan semua storage pool yang tersedia:
virsh pool-listContoh output:
Name State Autostart
-------------------------------
default active yes
vms active yesCreate 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 br0Kemudian tambahkan interface fisik (yang terhubung ke router) ke dalam bridge:
brctl addif br0 enp8s0f1Konfigurasi 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: 2Penjelasan:
- 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 applyMembuat 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.xmlSet agar aktif otomatis saat boot:
virsh net-autostart net0Aktifkan network:
virsh net-start net0Mengecek Virtual Network #
Lihat daftar virtual network aktif:
$ virsh net-list
Name State Autostart Persistent
-----------------------------------------
net0 active yes yesJika 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.qcow2Pindahkan file ke direktori storage pool, misalnya /vms:
mv rocky8.qcow2 /vmsGenerate 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.xmlmemory, vcpus, storage, maupun network sesuai kebutuhan.
Import VM ke Libvirt #
Mendaftarkan VM dari file XML:
virsh define domain.xmlMenjalankan Virtual Machine #
Start VM:
virsh start rocky85. Mengakses Console VM #
Gunakan console untuk memastikan VM berjalan normal:
virsh console rocky8Contoh 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: