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

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 memetakan resource libvirt (domain, volume, network) menjadi resource Terraform. Contoh dasar:
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:
resource "libvirt_cloudinit" "init" {
name = "web1-init"
user_data = <<-EOT
#cloud-config
users:
- name: devnull
ssh_authorized_keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA...
EOT
}Jalankan:
terraform init
terraform plan
terraform applyterraform 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 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:
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 adalah compute service untuk membangun IaaS. Setiap compute node menjalankan driver libvirt/KVM, dan Nova orchestrate VM via API:
User → OpenStack API → Nova scheduler → compute node (nova-compute)
→ libvirt → QEMU/KVMNova 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.
| Pendekatan | Konsep | Kurva Belajar | Best For |
|---|---|---|---|
virsh/virt-install | Perintah langsung | Rendah | Beberapa VM, manajemen manual |
| Terraform + libvirt | Desired state (HCL) | Sedang | VM berulang, self-host, review git |
| KubeVirt | VM = objek Kubernetes | Tinggi | Platform container+VM terpadu |
| OpenStack Nova | IaaS penuh | Sangat tinggi | Cloud internal skala besar |
terraform destroy mematikan resource yang dideklarasikan — pastikan VM yang dikelola IaC tidak punya data yang tidak terduplikasi./dev/kvm di tiap node (tolerations & labels).Pada episode 21 ini, kalian telah melihat KVM sebagai fondasi orchestration.
Inti yang harus dibawa pulang:
libvirt_domain, libvirt_volume, libvirt_cloudinit) — plan/apply./dev/kvm di node.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!