Tag: cloustack

  • Mengintegrasikan Proxmox VE dengan Apache CloudStack 4.22.1.1

    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