Belajar KVM & QEMU - IaC: Terraform/KubeVirt & Orchestration
Episode 21 of 23

Belajar KVM & QEMU - IaC: Terraform/KubeVirt & Orchestration

Menjadikan KVM bagian dari infrastruktur terprogram: provisioning VM dengan terraform-provider-libvirt, menjalankan VM di Kubernetes lewat KubeVirt, dan peran OpenStack Nova dengan compute node KVM sebagai fondasi cloud

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Semua keterampilan episode 0-20 kini mencapai puncaknya: orchestration. VM tidak lagi diciptakan dengan mengetik perintah — ia dideklarasikan sebagai kode, direview di git, dan di-provisioning secara otomatis. Episode 21 membahas tiga jalur orchestration populer yang dibangun di atas KVM+QEMU: Terraform + provider libvirt, KubeVirt (VM di Kubernetes), dan OpenStack Nova.

Pola pikir yang sama berlaku di ketiganya: QEMU adalah compute engine, layer di atasnya menambahkan desired state — kalian mendefinisikan apa yang diinginkan, bukan cara menjalankannya.

Terraform + Provider libvirt

terraform-provider-libvirt memetakan resource libvirt (domain, volume, network) menjadi resource Terraform. Contoh dasar:

main.tf
terraform {
  required_providers {
    libvirt = {
      source = "dmacvicar/libvirt"
    }
  }
}
 
provider "libvirt" {
  uri = "qemu:///system"
}
 
resource "libvirt_volume" "web1" {
  name   = "web1"
  source = "/images/noble-server-cloudimg-amd64.img"
}
 
resource "libvirt_domain" "web1" {
  name   = "web1"
  memory = "2048"
  vcpu   = 2
 
  disk {
    volume_id = libvirt_volume.web1.id
  }
 
  network_interface {
    network_name = "default"
  }
 
  cloudinit = libvirt_cloudinit.init.id
}

cloud-init terpisah:

cloudinit.tf
resource "libvirt_cloudinit" "init" {
  name = "web1-init"
  user_data = <<-EOT
    #cloud-config
    users:
      - name: devnull
        ssh_authorized_keys:
          - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA...
  EOT
}

Jalankan:

Provision VM dengan Terraform
terraform init
terraform plan
terraform apply

terraform plan menampilkan perubahan sebelum diterapkan — inilah "review" yang membuat IaC lebih aman daripada skrip shell. Semua yang kalian pelajari (cloud-init episode 14, network episode 16, XML episode 10) menjadi field di sini.

Note

Terraform + libvirt adalah cara cepat menghadirkan VM berulang untuk lab dan self-host. Bedanya dengan Ansible: Terraform mengelola state infrastruktur (VM ada/tidak), Ansible mengelola konfigurasi di dalamnya (paket & service). Keduanya saling melengkapi.

KubeVirt: VM di Kubernetes

KubeVirt memungkinkan VM (bukan container) dijalankan sebagai objek Kubernetes. KubeVirt menambahkan Custom Resource VirtualMachine dan memanfaatkan QEMU/KVM sebagai backend — setiap VM menjadi workload di sebuah node Kubernetes.

Contoh manifest VM:

vm.yaml
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: web1
spec:
  running: true
  template:
    spec:
      domain:
        devices:
          disks:
            - name: rootdisk
              disk:
                bus: virtio
        resources:
          requests:
            memory: 2Gi
      volumes:
        - name: rootdisk
          cloudInitNoCloud:
            userData: |
              #cloud-config
              ssh_authorized_keys:
                - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA...

Kalian akan melihat pola yang sama: bus: virtio (episode 12), cloudInitNoCloud (episode 14). KubeVirt memberi keuntungan: satu platform untuk container (Pod) dan VM, dengan fitur Kubernetes (scheduling, autoscaling VM).

Karena KubeVirt menjalankan KVM, node-nya wajib punya /dev/kvm — persis verifikasi di episode 3.

OpenStack Nova: Cloud di Atas KVM

OpenStack Nova adalah compute service untuk membangun IaaS. Setiap compute node menjalankan driver libvirt/KVM, dan Nova orchestrate VM via API:

text
User → OpenStack API → Nova scheduler → compute node (nova-compute)
                                           → libvirt → QEMU/KVM

Nova memakai konsep yang kalian kenal: flavor (ukuran VM), image (cloud images), network (Neutron), dan keypair (SSH). Ini adalah versi enterprise dari yang sudah kalian rakit manual — KVM tetap menjadi fondasinya.

Bagi yang belum siap membangun OpenStack penuh, alur serupa bisa dicapai dengan kombinasi Terraform + libvirt untuk homelab, atau langsung memakai Proxmox (episode 22) yang mengemas KVM + storage + backup dalam satu produk.

Membandingkan Pendekatan

PendekatanKonsepKurva BelajarBest For
virsh/virt-installPerintah langsungRendahBeberapa VM, manajemen manual
Terraform + libvirtDesired state (HCL)SedangVM berulang, self-host, review git
KubeVirtVM = objek KubernetesTinggiPlatform container+VM terpadu
OpenStack NovaIaaS penuhSangat tinggiCloud internal skala besar

Common Pitfalls

  • Terraform menghapus VM: terraform destroy mematikan resource yang dideklarasikan — pastikan VM yang dikelola IaC tidak punya data yang tidak terduplikasi.
  • KubeVirt tanpa KVM di node: workload VM crash/antri selamanya — cek /dev/kvm di tiap node (tolerations & labels).
  • OpenStack tanpa storage bersama: live migration (episode 15) gagal tanpa shared storage — rancang cinder/ceph lebih awal.

Penutup

Pada episode 21 ini, kalian telah melihat KVM sebagai fondasi orchestration.

Inti yang harus dibawa pulang:

  • Terraform provider libvirt: VM = kode (libvirt_domain, libvirt_volume, libvirt_cloudinit) — plan/apply.
  • KubeVirt: VM sebagai objek Kubernetes, backend QEMU/KVM, butuh /dev/kvm di node.
  • OpenStack Nova: IaaS penuh di atas compute node KVM+libvirt.
  • Pola yang sama berulang: virtio, cloud-init, network bridge — hanya di-automasi.
  • Pilih pendekatan sesuai skala; jangan loncat ke OpenStack sebelum Terraform pun terasa terlalu sederhana.

Di episode 22 — episode terakhir — kita akan menutup series dengan ekosistem, alternatif & refleksi akhir: perbandingan KVM+QEMU vs Xen, VirtualBox, Proxmox, dan cloud VM, kapan memilih masing-masing, rekap seluruh materi, checklist produksi, dan arah lanjutan. Sampai jumpa di episode 22!

Belajar KVM & QEMU - IaC: Terraform/KubeVirt & Orchestration | Belajar KVM & QEMU