Mengintegrasikan Proxmox VE dengan Apache CloudStack 4.22.1.1

Apache CloudStack dapat mengelola VM di Proxmox VE melalui Proxmox Orchestrator Extension. Setelah terintegrasi, proses deploy, start, stop, reboot, delete, snapshot, konfigurasi VLAN, dan akses console dapat dilakukan dari CloudStack.

Panduan ini menggunakan konfigurasi lab yang sudah berhasil menjalankan Ubuntu 24.04 dari template Proxmox.

Topologi dan kondisi awal

KomponenKonfigurasi
CloudStack Management Servercsmgmt-kvm.lab.local — 192.168.14.135
Versi CloudStack4.22.1.1
Proxmox nodepvecs1.lab.local — 192.168.14.136
Proxmox APIhttps://192.168.14.136:8006
Proxmox node namepvecs1
Storage Proxmoxlocal-lvm
Guest bridgevmbr1
Template ProxmoxUbuntu Server 24.04, VMID 9000
Disk template20 GiB
Guest networkguest-isolated-01
Guest CIDR10.1.1.0/24
Guest gateway10.1.1.1
Guest VLAN319

Sebelum integrasi dilakukan, kondisi berikut sudah tersedia:

  • CloudStack Management Server dan zone sudah aktif.
  • Proxmox VE dapat diakses dari Management Server melalui TCP 8006.
  • Proxmox dan host tempat CloudStack Virtual Router berjalan terhubung ke jaringan VLAN trunk yang sama.
  • Bridge vmbr1 sudah VLAN-aware dan terhubung ke uplink guest network.
  • Template Ubuntu 24.04 VMID 9000 sudah dibuat di Proxmox.
  • API token khusus CloudStack sudah tersedia.

Dokumentasi resmi menjelaskan bahwa extension Proxmox berkomunikasi dengan Proxmox VE API melalui HTTPS. CloudStack kemudian meneruskan MAC address dan VLAN ID VM ke Proxmox saat deployment. Lihat Proxmox Orchestrator Extension.

1. Menyiapkan template Proxmox

Template pada lab menggunakan Ubuntu 24.04 cloud image dengan VMID 9000. Seluruh pengaturan pada bagian ini dilakukan melalui Proxmox GUI.

Buka:

pvecs1 > VM 9000 > Hardware

Atur hardware template sebagai berikut:

HardwareNilai
Processors2 cores
Memory2048 MiB
SCSI ControllerVirtIO SCSI single
Hard Diskscsi0, storage local-lvm, size 20 GiB
CloudInit DriveStorage local-lvm
Network DeviceModel VirtIO, Bridge vmbr1
DisplayStandard VGA
Serial Portsocket — opsional

Pastikan VirtIO SCSI single dipilih pada bagian SCSI Controller, bukan Display. Display menggunakan Standard VGA agar console VM dapat ditampilkan melalui CloudStack.

Jika disk masih mengikuti ukuran awal Ubuntu cloud image, pilih:

VM 9000 > Hardware > Hard Disk (scsi0) > Disk Action > Resize

Tambahkan kapasitas sampai total disk menjadi 20 GiB. Proxmox menggunakan nilai penambahan saat melakukan resize, sehingga periksa ukuran saat ini sebelum mengisi kolom Size Increment.

Selanjutnya buka:

VM 9000 > Options

Atur:

OptionNilai
Boot OrderAktifkan scsi0 sebagai urutan pertama
QEMU Guest AgentEnabled

Kemudian buka:

VM 9000 > Cloud-Init

Isi konfigurasi berikut:

Cloud-InitNilai
Userubuntu
PasswordPassword sementara khusus lab
SSH Public KeyPublic key administrator
IP ConfigDHCP

Gunakan SSH key untuk produksi dan hindari password tetap yang sama pada seluruh hasil clone.

Setelah konfigurasi selesai, matikan VM kemudian klik kanan VM 9000 dan pilih Convert to template. VMID 9000 selanjutnya digunakan sebagai template_id di CloudStack.

2. Memastikan jaringan guest siap

Bridge vmbr1 harus membawa VLAN guest dari Proxmox menuju jaringan CloudStack. Buka:

pvecs1 > System > Network

Jika vmbr1 belum tersedia, pilih Create > Linux Bridge, kemudian isi:

FieldNilai
Namevmbr1
IPv4/CIDRKosong
Gateway (IPv4)Kosong
Bridge portsInterface atau bond untuk trunk guest
VLAN awareAktif
AutostartAktif

Klik Create, lalu Apply Configuration. Jika vmbr1 sudah tersedia, pilih bridge tersebut dan klik Edit untuk memastikan VLAN aware sudah aktif.

VLAN 319 harus diizinkan pada switch fisik, uplink Proxmox, dan host CloudStack yang menjalankan Virtual Router. Pastikan perubahan bridge dilakukan melalui interface management yang berbeda agar akses ke Proxmox tidak terputus.

3. Membuat API token Proxmox

Buka Proxmox UI, lalu masuk ke:

Datacenter > Permissions > API Tokens

Buat token khusus untuk CloudStack. Simpan tiga informasi berikut:

FieldContoh
Usercloudstack@pve
Token IDcloudstack
Secret<PROXMOX_API_SECRET>

Untuk lab, Privilege Separation dapat dinonaktifkan. Untuk produksi, aktifkan pemisahan privilege dan berikan role yang diperlukan pada path /vms, /storage, dan /sdn.

Uji token dari CloudStack Management Server:

export PVE_TOKEN='cloudstack@pve!cloudstack=<PROXMOX_API_SECRET>'

curl -sk \
  -H "Authorization: PVEAPIToken=$PVE_TOKEN" \
  https://192.168.14.136:8006/api2/json/version | jq

unset PVE_TOKEN

Respons yang benar berisi informasi versi Proxmox pada objek data.

4. Menyiapkan Proxmox Extension di Management Server

Extension bawaan berada pada direktori berikut:

script=/usr/share/cloudstack-management/extensions/Proxmox/proxmox.sh

test -x "$script"
bash -n "$script"

Penyesuaian kompatibilitas pada instalasi lab

Skrip yang digunakan pada lab dinormalisasi agar dapat membaca detail resource dari payload CloudStack 4.22.1.1 dan menggunakan URL Proxmox dalam format lengkap.

Backup skrip terlebih dahulu:

cp -a "$script" "${script}.before-integration"

Pada fungsi parse_json(), detail host dibuat menerima nilai dari host maupun resourcemap, termasuk variasi nama objek externaldetails dan externalDetails. Pola hasil akhirnya sebagai berikut:

"host_url": (
  .externaldetails.host.url //
  .externaldetails.resourcemap.url //
  .externalDetails.host.url //
  .externalDetails.resourcemap.url // ""
),
"host_user": (
  .externaldetails.host.user //
  .externaldetails.resourcemap.user //
  .externalDetails.host.user //
  .externalDetails.resourcemap.user // ""
),
"host_token": (
  .externaldetails.host.token //
  .externaldetails.resourcemap.token //
  .externalDetails.host.token //
  .externalDetails.resourcemap.token // ""
),
"host_secret": (
  .externaldetails.host.secret //
  .externaldetails.resourcemap.secret //
  .externalDetails.host.secret //
  .externalDetails.resourcemap.secret // ""
),
"node": (
  .externaldetails.host.node //
  .externaldetails.resourcemap.node //
  .externalDetails.host.node //
  .externalDetails.resourcemap.node // ""
),
"network_bridge": (
  .externaldetails.host.network_bridge //
  .externaldetails.resourcemap.network_bridge //
  .externalDetails.host.network_bridge //
  .externalDetails.resourcemap.network_bridge // ""
),
"verify_tls_certificate": (
  .externaldetails.host.verify_tls_certificate //
  .externaldetails.resourcemap.verify_tls_certificate //
  .externalDetails.host.verify_tls_certificate //
  .externalDetails.resourcemap.verify_tls_certificate // "true"
),

Pada fungsi call_proxmox_api(), URL API menggunakan nilai url secara langsung:

response=$(curl "${curl_opts[@]}" "${url%/}/api2/json${path}")

Dengan format tersebut, nilai url yang dimasukkan ke CloudStack harus lengkap:

https://192.168.14.136:8006

Validasi skrip setelah disesuaikan:

chmod 0755 "$script"
bash -n "$script"

Jika terdapat beberapa Management Server, gunakan file yang sama pada seluruh node agar status extension tetap Ready. CloudStack memang memeriksa keberadaan dan konsistensi file extension pada Management Server.

5. Mengaktifkan Proxmox Extension

Masuk ke CloudStack UI sebagai administrator:

Extensions > Proxmox > Enable

Pastikan status extension menjadi:

Enabled / Ready

CloudStack 4.22 menyediakan extension Proxmox sebagai orchestrator berbasis shell script. File extension ditempatkan di bawah /usr/share/cloudstack-management/extensions/ dan dipanggil menggunakan payload JSON untuk setiap operasi VM. Lihat mekanisme Extensions CloudStack.

6. Membuat cluster External untuk Proxmox

Buka:

Infrastructure > Zones > <ZONE> > Pods > <POD> > Clusters > Add Cluster

Isi parameter berikut:

FieldNilai
HypervisorExternal
ExtensionProxmox
Cluster Nameproxmox-cluster-01

Simpan cluster, kemudian lanjutkan dengan menambahkan host Proxmox.

7. Menambahkan Proxmox sebagai host CloudStack

Tambahkan host pada cluster External yang baru dibuat. Gunakan detail berikut:

DetailNilai
Host namepvecs1.lab.local
urlhttps://192.168.14.136:8006
usercloudstack@pve
tokencloudstack
secret<PROXMOX_API_SECRET>
nodepvecs1
network_bridgevmbr1
verify_tls_certificatefalse untuk sertifikat self-signed pada lab

node harus sama dengan nama node yang digunakan oleh Proxmox API, bukan sekadar nama tampilan di CloudStack. Nama tersebut dapat dilihat pada panel kiri Proxmox GUI, tepat di bawah Datacenter. Pada lab ini nilainya adalah pvecs1.

Setelah host ditambahkan, pastikan statusnya:

State: Up
Resource State: Enabled

Untuk produksi, gunakan sertifikat TLS yang dipercaya dan set verify_tls_certificate=true.

8. Mendaftarkan template Proxmox di CloudStack

Buka:

Images > Templates > Register Template

Isi data dasar:

FieldNilai
Nameubuntu-2404-cloudstack
URLhttps://example.invalid/ubuntu-2404-cloudstack.qcow2
HypervisorExternal
ExtensionProxmox
ZoneZone tempat cluster Proxmox berada
OS TypeUbuntu 24.04 (64-bit) atau yang paling sesuai

URL hanya menjadi metadata karena image yang digunakan sudah berada di Proxmox.

Tambahkan External Details berikut:

KeyValue
template_typetemplate
template_id9000

CloudStack mendukung pemetaan template CloudStack ke template atau ISO Proxmox. Untuk deployment dari template, gunakan template_type=template dan isi template_id dengan VMID template Proxmox.

Menyamakan metadata ukuran template

Template pada lab memiliki root disk 20 GiB. Nilai byte-nya adalah:

20 × 1024 × 1024 × 1024 = 21474836480 byte

Backup metadata sebelum penyesuaian:

mysqldump -u root -p cloud vm_template vm_template_details \
  > /root/cloudstack-template-before-integration.sql

Cari ID template yang baru didaftarkan:

SELECT id, name, size, hypervisor_type
FROM vm_template
WHERE name = 'ubuntu-2404-cloudstack'
  AND removed IS NULL;

Set ukuran sesuai disk template Proxmox:

UPDATE vm_template
SET size = 21474836480
WHERE id = <ID_TEMPLATE>
  AND hypervisor_type = 'External'
  AND removed IS NULL;

Verifikasi:

SELECT id, name, size,
       ROUND(size / 1073741824, 2) AS size_gib
FROM vm_template
WHERE id = <ID_TEMPLATE>;

Nilai size_gib harus menunjukkan 20.00.

9. Menyiapkan Compute Offering

Buat Compute Offering untuk VM Proxmox, misalnya:

FieldNilai
Nameproxmox-small
CPU2
CPU speed1000 MHz
Memory2048 MB
Root Disk Size20 GB

CPU dan memory dari offering akan diterapkan pada hasil clone. Root Disk Size dibuat sama dengan root disk template agar metadata dan kapasitas instance konsisten.

10. Menyiapkan isolated guest network

Buat atau gunakan network berikut:

FieldNilai
Nameguest-isolated-01
Network modeNATTED
CIDR10.1.1.0/24
Gateway10.1.1.1
VLAN319

Pada isolated network mode NATTED, CloudStack Virtual Router menyediakan DHCP, DNS, gateway, dan Source NAT. Dokumentasi CloudStack menjelaskan bahwa VR memberikan alamat IP guest dan meneruskan trafik keluar melalui Source NAT. Lihat CloudStack Guest Traffic.

Jika Network Offering menggunakan Default Egress Policy: Deny, tambahkan Egress Rule agar VM dapat mengakses internet. Untuk lab:

ProtocolCIDRPort
All0.0.0.0/0Semua

Untuk produksi, batasi sesuai kebutuhan, misalnya DNS, HTTP, HTTPS, NTP, dan repository sistem operasi.

11. Melakukan deployment VM

Buka:

Compute > Instances > Add Instance

Pilih:

  1. Zone tempat cluster Proxmox berada.
  2. Template ubuntu-2404-cloudstack.
  3. Compute Offering proxmox-small.
  4. Network guest-isolated-01.

External Details yang dapat ditambahkan saat deployment:

KeyValueFungsi
storagelocal-lvmMenentukan storage disk hasil clone
is_full_clonefalseMenggunakan linked clone
vm_nameOpsionalNama VM di Proxmox

disk_size_gb tidak digunakan untuk deployment dari template. Parameter tersebut digunakan ketika sumber deployment berupa ISO.

CloudStack akan mengambil VMID yang tersedia dari Proxmox, melakukan clone template 9000, menerapkan CPU dan RAM, memasang MAC address CloudStack, menambahkan tag VLAN 319, lalu menyalakan VM.

12. Verifikasi deployment

Dari CloudStack

Pastikan:

Instance State: Running
Host: pvecs1.lab.local
IP Address: 10.1.1.x

Uji operasi berikut dari CloudStack UI:

  • Console
  • Stop
  • Start
  • Reboot
  • Delete

Dari Proxmox GUI

Buka node pvecs1, lalu cari VM baru pada panel kiri. Nama VM mengikuti internal name CloudStack, misalnya i-2-13-VM.

Pilih VM tersebut dan periksa:

MenuVerifikasi
SummaryVM berstatus running
Hardware > ProcessorsJumlah core mengikuti Compute Offering
Hardware > MemoryKapasitas RAM mengikuti Compute Offering
Hardware > Hard DiskDisk hasil clone berada di local-lvm
Hardware > Network DeviceBridge vmbr1 dan VLAN Tag 319
ConsoleTampilan boot Ubuntu dapat dibuka

Dari dalam VM

Login melalui console menggunakan user ubuntu. Pada lab, gunakan password Cloud-Init yang telah ditentukan pada template. Setelah login, jalankan:

ip -br address
ip route
ping -c 3 10.1.1.1
ping -c 3 8.8.8.8
getent ahostsv4 google.com
curl -I https://example.com

Contoh alamat yang diterima VM:

eth0 UP 10.1.1.53/24
default via 10.1.1.1 dev eth0

Hasil tersebut menunjukkan bahwa DHCP, gateway, VLAN trunk, Egress Rule, DNS, dan Source NAT CloudStack sudah bekerja.

Hasil akhir

Setelah seluruh konfigurasi diterapkan:

  • Host Proxmox tampil Up/Enabled di CloudStack.
  • Template Proxmox VMID 9000 dapat dipilih dari CloudStack.
  • VM dibuat otomatis di Proxmox menggunakan VMID baru.
  • CPU dan memory mengikuti Compute Offering.
  • NIC VM menggunakan MAC address dan VLAN dari CloudStack.
  • VM memperoleh IP dari CloudStack Virtual Router.
  • Console dapat dibuka dari CloudStack UI.
  • VM dapat mengakses internet setelah Egress Rule diizinkan.
  • Lifecycle VM dapat dikelola dari CloudStack.

Catatan keamanan untuk produksi

  • Gunakan API token khusus CloudStack dengan hak minimum yang diperlukan.
  • Gunakan sertifikat TLS valid dan aktifkan verifikasi sertifikat.
  • Jangan menaruh token secret di dokumentasi, shell history, atau log publik.
  • Gunakan SSH key sebagai akses utama VM.
  • Hindari password default yang sama pada semua VM.
  • Rotasi API token secara berkala.
  • Gunakan shared storage jika template harus tersedia pada beberapa node Proxmox.
  • Backup skrip extension sebelum upgrade CloudStack dan validasi kembali setelah upgrade.

Referensi

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *