Proxmox VE
Where in the admin: Infrastructure › Cloud provider › Providers (
/infra/providers), lalu halaman penyedia (/infra/providers/<id>) dengan tab Overview, Clusters, VMs, Servers, dan Credentials. Paket diatur di bawah Services › Virtual Machines › Plans & pricing (/vm/catalog).
Fungsi
NexCMP dapat menjual mesin virtual yang berjalan di satu atau beberapa kluster Proxmox VE, bersamaan dengan atau menggantikan CloudStack. VM dibuat dengan mengklon templat OS menggunakan klon penuh, lalu dikonfigurasi melalui cloud-init: ukuran, alamat IP dari kumpulan yang Anda tentukan, kata sandi root, dan kunci SSH. Pelanggan mendapatkan kontrol daya, konsol, snapshot, instal ulang, pengaturan ulang kata sandi, dan metrik di portal. Mereka tidak akan pernah melihat nama kluster, node, atau sumber.
Gunakan ini saat Anda sudah menjalankan Proxmox VE, atau untuk menawarkan kumpulan VM kedua dengan harga yang berbeda.
Persyaratan
| Item | Persyaratan |
|---|---|
| Proxmox VE | PVE 9.x. Integrasi ini diverifikasi pada 9.2. Ini memerlukan konten penyimpanan import dan opsi diska import-from (PVE 8.2 atau lebih baru). |
| Jaringan dari panel | HTTPS ke API kluster, https://<host or IP>:8006. Tanpa jalur, nama pengguna, atau kueri. Panel dan pekerja sama-sama terhubung; konsol peramban diproksi melalui panel. |
| Akun | Pengguna PVE khusus dengan API token dan peran kustom dengan hak istimewa yang tercantum di bawah ini. Jangan pernah menggunakan root@pam. |
| Storage | Penyimpanan untuk diska VM yang mendukung klon (misalnya local-lvm). Untuk pembangun templat bawaan, penyimpanan bernama local dengan jenis konten import dan snippets. |
| Jaringan | Jembatan Linux (misalnya vmbr0) yang menjangkau jaringan tempat IP pelanggan berada. Gunakan jembatan yang mendukung VLAN jika Anda memasukkan tag VLAN. |
| IPs | Blok IPv4 (/16 hingga /30) yang dirutekan ke jembatan tersebut, dengan gateway. NexCMP menetapkan alamatnya sendiri; Proxmox tidak memiliki manajemen IP. |
| Templat | Satu VM templat cloud-init per OS, pada setiap node tempat Anda melakukan deployment, dengan agen tamu QEMU. |
| Zone | Zona yang ada untuk melampirkan kluster. Lihat Zones. |
| Bergantung pada | Tidak ada. |
Siapkan infrastruktur
Jalankan perintah sebagai root pada node kluster mana pun.
1. Buat peran hak istimewa terendah, pengguna, dan token API
Buat peran. Daftar hak istimewa adalah persis apa yang digunakan oleh NexCMP; tidak ada isinya yang mengedit pengguna, definisi penyimpanan, atau pusat data.
bashpveum role add NexCMP -privs "VM.Allocate VM.Clone VM.Config.CDROM VM.Config.CPU VM.Config.Cloudinit VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.PowerMgmt VM.Audit VM.Console VM.Snapshot VM.Snapshot.Rollback VM.Backup VM.GuestAgent.Audit VM.GuestAgent.Unrestricted Datastore.Audit Datastore.AllocateSpace Datastore.AllocateTemplate Sys.Audit Sys.AccessNetwork SDN.Use SDN.Audit Pool.Audit Mapping.Audit Mapping.Use"Sys.AccessNetworkdiperlukan oleh pengunduhan citra awan. PVE 9 tidak memiliki hak istimewaVM.Monitor; jangan menambahkannya.Buat pengguna dan token.
--privsep 1berarti hak token adalah irisan dari izin pengguna dan izin token itu sendiri.bashpveum user add nexcmp@pve --comment "NexCMP" pveum user token add nexcmp@pve api --privsep 1Perintah tersebut mencetak token secret sekali saja (berupa UUID). Salin sekarang. ID token adalah
nexcmp@pve!api.Berikan peran tersebut kepada kedua-duanya, baik pengguna maupun token. Ini adalah langkah yang sering terlewat: dengan pemisahan hak akses, hanya token yang akan mendapatkan error 403 seperti
Datastore.Auditjika pengguna tidak memiliki izin.bashpveum acl modify / --roles NexCMP --users nexcmp@pve pveum acl modify / --roles NexCMP --tokens 'nexcmp@pve!api'Uji dari server panel:
bashcurl -sk -H 'Authorization: PVEAPIToken=nexcmp@pve!api=<secret>' https://192.0.2.10:8006/api2/json/versionDokumen JSON dengan isi
versionmenandakan token berfungsi. (-khanya untuk pemeriksaan cepat ini; NexCMP menyematkan sertifikatnya sendiri, lihat di bawah.)
2. Periksa jembatan (bridge) dan penyimpanan
bash
pvesm status # storages, type, content and free space
ip -br link show type bridge- VM pelanggan mendapatkan
virtioantarmuka jaringan pada jembatan yang Anda masukkan di NexCMP. Jika Anda menyetel VLAN, jembatan tersebut harus mendukung VLAN (VLAN-aware). - Tempatkan VM pelanggan pada jembatan atau VLAN yang terpisah dari alamat manajemen node. Jika mereka berbagi jaringan, perangkat aturan IP manajemen otomatis pada firewall Proxmox akan membuka port 22, 8006, 3128, 5900-5999, dan 60000-60050 dari node ke setiap VM di jaringan tersebut. Jika Anda tidak dapat memisahkannya, tambahkan aturan DROP eksplisit untuk subnet VM ke port-port tersebut di atas aturan ACCEPT manajemen.
3. Catatan penyimpanan (LVM-thin)
- Biarkan zeroing pada pengaturan default untuk thin-pool. Menonaktifkannya (
lvchange -Zn) dapat meninggalkan data lama pada chunk yang baru dialokasikan dan merusak tabel partisi atau sistem file dari VM yang dikloning. - Disk yang melaporkan "write cache: disabled" hanya dapat dikloning dengan kecepatan beberapa MB/s. Periksa dengan
hdparm -W /dev/sdXdan aktifkan write cache jika disk tersebut memiliki perlindungan dari kehilangan daya.
4. Aktifkan konten import (hanya untuk pembuat templat bawaan)
Pembuat bawaan mengunduh citra cloud ke dalam penyimpanan bernama local dan membuat templat darinya. Tambahkan import (dan snippets) ke daftar konten penyimpanan tersebut. Pertahankan jenis yang sudah Anda gunakan; --content menggantikan seluruh daftar:
bash
pvesm status --storage local # note the current content
pvesm set local --content iso,vztmpl,backup,import,snippets5. Membuat templat OS dari citra cloud
Templat adalah VM cloud-init yang dikloning oleh NexCMP. Masing-masing terdaftar di bawah OS key pendek seperti ubuntu-24.04 beserta ID VM-nya. Buat satu templat per OS pada setiap node yang akan menerima VM, karena proses kloning berjalan pada node yang dipilih.
Opsi A, disarankan: bangun sendiri. Citra cloud Ubuntu dan Debian bawaan tidak berisi guest agent serta tidak mengizinkan login root, dan NexCMP menyetel kata sandi root melalui cloud-init. Siapkan citranya terlebih dahulu:
bash
apt install -y libguestfs-tools
wget -O noble.qcow2 https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
virt-customize -a noble.qcow2 --install qemu-guest-agent \
--write /etc/cloud/cloud.cfg.d/99-nexcmp.cfg:$'ssh_pwauth: true\ndisable_root: false\n' \
--write /etc/ssh/sshd_config.d/00-nexcmp.conf:$'PermitRootLogin yes\nPasswordAuthentication yes\n'Kemudian buat VM templat (ID 9000 adalah contoh; jaga agar ID templat tetap di bawah nilai vmid from, default 1000):
bash
qm create 9000 --name tpl-ubuntu-24-04 --memory 2048 --cores 2 --cpu host --ostype l26 \
--scsihw virtio-scsi-single --net0 virtio,bridge=vmbr0 --agent 1 --serial0 socket --vga serial0
qm set 9000 --scsi0 local-lvm:0,import-from=$PWD/noble.qcow2,discard=on,iothread=1
qm set 9000 --ide2 local-lvm:cloudinit --boot order=scsi0
qm template 9000Opsi B: pembangun bawaan. Kartu Create OS template from cloud image pada tab Clusters (lihat di bawah) mengunduh citra qcow2, membangun templat, dan mendaftarkannya. Fitur ini membuat VM dengan cloud-init dan flag guest agent, namun tidak mengubah isi di dalam citra tersebut. Gunakan hanya dengan citra yang telah mengizinkan login root dan menjalankan guest agent, atau ketika Anda juga menyediakan cuplikan vendor-data cloud-init.
Guest agent diperlukan untuk Reset password dan untuk menampilkan alamat IP VM.
6. Ketahui sidik jari sertifikat (opsional)
NexCMP mempercayai klaster dengan menyematkan sidik jari SHA-256 dari sertifikat TLS-nya, sehingga sertifikat mandiri (self-signed) dapat digunakan. Untuk melihat nilai yang akan disematkan oleh NexCMP:
bash
openssl x509 -in /etc/pve/local/pve-ssl.pem -noout -fingerprint -sha256Hubungkan di NexCMP
Buka Infrastructure › Cloud provider › Providers dan klik Add cloud provider. Pilih Proxmox VE dan isi:
Kolom Contoh nilai Name Proxmox cluster 1Endpoint https://192.0.2.10:8006Token id nexcmp@pve!apiToken secret XXXX(UUID yang dicetak pada langkah 1)Slug pve-1(a-z, 0-9, tanda hubung, 2-32 karakter)Default node pve1(kosong: node online dengan RAM bebas terbanyak)Storage local-lvmBridge vmbr0
Klik Save & open provider, masukkan alasan saat diminta. Token dienkripsi sebelum disimpan.
Pada tab Overview, klik Test connection. Pengujian sukses pertama akan menyematkan (pin) sidik jari TLS kluster; setelah itu sertifikat yang berbeda akan ditolak.
Buka tab Clusters. Kartu Node · storage · bridge mencantumkan apa yang dilihat oleh API; kartu Cluster configuration berisi pengaturan:
Kolom Arti Default node Node yang digunakan untuk VM baru. Kosong berarti node online dengan RAM bebas terbanyak. Storage, Bridge, VLAN Storage disk, bridge NIC, dan tag VLAN opsional (0 berarti tidak ada). CPU type hostsecara default. Gunakanx86-64-v2-AESsaat node memiliki generasi CPU yang berbeda.vmid from ID VM pertama yang diberikan ke VM pelanggan (default 1000). Storage ISO, Storage backup Biarkan kosong kecuali Anda menggunakannya; kosong berarti fitur ISO dan backup tidak ditawarkan. Template OS Satu per baris, os-key=vmid, misalnyaubuntu-24.04=9000.Pinned TLS fingerprint (SHA-256) Diisi oleh pengujian pertama. Kosongkan dan uji kembali setelah Anda mengganti sertifikat kluster. 
Opsional: jika Anda menggunakan Opsi B di atas, isi Create OS template from cloud image (kunci OS
ubuntu-24.04, vmid9000, nodepve1, URL citra qcow2) lalu klik Create template. Ini berjalan di latar belakang selama beberapa menit; hasilnya ada di Audit log.
Klik Add pool di Cluster IP pool dan buat pool tempat VM mengambil alamat:
Kolom Contoh nilai Name customers-1CIDR 198.51.100.0/24Gateway 198.51.100.1(tidak pernah diberikan ke VM)DNS 1.1.1.1,8.8.8.8(1 hingga 4 alamat IPv4)Bridge, VLAN vmbr0,0Already used IPs satu per baris, ip note, misalnya198.51.100.10 monitoringNexCMP tidak pernah menetapkan alamat jaringan, alamat siaran (broadcast), gateway, atau alamat yang dicadangkan. Pool dari kluster yang sama tidak boleh tumpang tindih. Pool hanya dapat dihapus jika tidak ada alamatnya yang sedang digunakan.

Dalam Attach cluster to zone, pilih zona dan, secara opsional, nama node, lalu klik Attach to zone. Kluster bergabung dengan zona yang sudah menjual VM, sehingga satu zona dapat memiliki CloudStack dan Proxmox secara bersamaan. Sumber baru ini tidak dijual secara default dan tidak mengubah perilaku paket yang sudah ada.

Buka Services › Virtual Machines › Plans & pricing dan klik Add plan. Di Infrastructure source, pilih kluster Proxmox, lalu atur CPU, RAM, disk, dan harga. Paket Proxmox tidak memerlukan offering CloudStack. Untuk menjual konfigurasi yang sama dari kedua sumber, gunakan Clone pada sebuah paket dan pilih sumber lainnya. Disk paket harus setidaknya sebesar disk template; Proxmox tidak dapat memperkecil disk.
Impor VM yang sudah ada
Buka tab Servers untuk membuat daftar VM pada klaster. Import menetapkan VM yang sudah ada ke akun pelanggan tanpa biaya: tidak ada yang ditagih untuk jam, waktu mati, atau lalu lintas. Pelanggan dapat memulai, menghentikan, me-reboot, dan membuka konsol tetapi tidak dapat menghapusnya; hanya administrator yang dapat melakukannya. NexCMP hanya membaca dari klaster saat melakukan impor.
Klaster harus dilampirkan ke zona dengan nama node dari VM tersebut (biarkan node kosong dan impor akan melaporkan bahwa wilayah belum disiapkan).
Untuk membuat VM dilindungi (penghentian, reboot, instal ulang, pemulihan snapshot, penghancuran, dan perubahan paket ditolak), impor dari baris perintah dengan
--protect:bashsudo -u nexcmp /opt/nexcmp/bin/nexcmp px-import --provider pve-1 --server-ref pve1/101 --account-id 12 --hostname web-1 --protect
Fitur yang didukung dan tidak didukung pada Proxmox
| Fitur | Proxmox VE |
|---|---|
| Membuat, menyalakan/mematikan/reboot, menghapus | Ya |
| Mengubah ukuran CPU dan RAM, memperbesar disk | Ya, tetapi VM dihentikan, diubah, dan dinyalakan kembali (tanpa perubahan ukuran langsung) |
| Snapshots | Ya, hingga 5 per VM: membuat, mencantumkan, memulihkan, menghapus |
| Menginstal ulang | Ya: VM dibangun ulang dari templat dan mempertahankan id, IP, serta pengaturan miliknya, dengan kata sandi baru |
| Reset kata sandi | Ya, melalui guest agent |
| Konsol | Ya, konsol peramban yang diproksi oleh panel |
| Metrik | Ya: CPU, memori, jaringan, dan disk |
| Pemasangan ISO, cadangan, firewall, IPv6, penerusan port, ubah IP, volume tambahan, Auto Scaling, DDoS Shield, VPC, pengukuran bandwidth | Tidak tersedia. Halaman VM pelanggan menyembunyikan hal yang tidak dapat dilakukan oleh suatu sumber. |
Verifikasi
- Test connection menampilkan OK dan status penyedia aktif.
- Clusters mencantumkan node Anda sebagai online, beserta penyimpanan dan bridge-nya.
- Cluster IP pool menampilkan jumlah alamat yang bebas, digunakan, dan ditahan.
- Kunci OS muncul di bawah templat zone di Services › Virtual Machines › Template setelah cluster dilampirkan.
- Pesan VM uji dari paket yang menggunakan cluster tersebut. VM seharusnya mendapatkan alamat dari pool, kata sandi root, dan konsol yang berfungsi; pool menampilkan satu alamat yang terpakai.
Batasan dan catatan
Zona sumber campuran
Sejak NexCMP 1.4.0, daftar harga publik Cloud Server juga berfungsi saat CloudStack dan Proxmox VE berbagi satu zona. Setiap paket menggunakan Infrastructure source miliknya sendiri. Setelah memasang kluster, periksa daftar harga publik dan buat pesanan uji coba untuk masing-masing sumber.
- Beberapa cluster Proxmox dapat ditambahkan. Masing-masing bertindak sebagai satu penyedia.
- Sebuah zone menawarkan satu sumber default; paket dengan Infrastructure source sendiri akan dideploy secara persis ke cluster tersebut, selama cluster aktif dan berada di zone paket.
- Cluster di balik zone yang sama dengan CloudStack mempertahankan paket lama mereka di CloudStack. Uji pesanan dari awal hingga akhir sebelum peluncuran.
- Token API hanya dapat diganti, tidak pernah dilihat. Ganti token tersebut di tab Credentials: buat token baru di Proxmox terlebih dahulu, masukkan token tersebut, jalankan Test connection, lalu cabut token lama.
- Tindakan Test, Sync, dan cluster-info dibatasi hingga enam panggilan per menit per administrator.
- NexCMP menagih pelanggan Anda; biaya perangkat keras dan lisensi cluster ditanggung oleh Anda.
Pemecahan Masalah
| Gejala | Penyebab | Solusi |
|---|---|---|
| Test: "Key rejected (wrong access key / secret, or revoked)" atau HTTP 401/403 | ID token atau secret salah, atau ACL hanya diberikan ke token tersebut | Jalankan ulang kedua perintah pveum acl modify (pengguna dan token) dan periksa apakah id token adalah user@realm!tokenid. |
| Pengujian: "Could not connect to the provider" atau "Timed out" | Firewall, host atau port salah | Periksa https://host:8006 dari server panel. |
| Pengujian: "Invalid endpoint or not on the allowlist" | Endpoint memiliki path, pengguna, kueri, atau bukan HTTPS | Gunakan secara tepat https://host:8006. |
| "sertifikat TLS klaster TIDAK cocok dengan fingerprint yang disematkan" | Sertifikat kluster telah diganti | Kosongkan Pinned TLS fingerprint pada tab Clusters, simpan, lalu jalankan kembali Test connection. |
| Slug ditolak | Bukan a-z, 0-9, tanda hubung, atau panjangnya bukan 2-32 karakter | Gunakan sesuatu seperti pve-1. |
| "Format ID token: user@realm!tokenid dan secret wajib diisi" | ID token atau secret tidak ada | Masukkan keduanya; secret adalah UUID yang dicetak saat token dibuat. |
| "Baris templat tidak valid: …" | Sebuah baris dalam Template OS bukan key=vmid | Gunakan huruf, angka, ., _, - pada kunci dan vmid minimal 100. |
| "Kunci OS: a-z 0-9 . _ - dan vmid ≥ 100" | Kunci atau id tidak valid dalam Create template | Perbaiki kunci OS dan gunakan vmid yang kosong. |
| "vmid … already exists" saat membuat templat | vmid tersebut sudah digunakan | Pilih id yang lain. |
| "url mengarah ke alamat internal" | URL gambar adalah IP internal | Gunakan URL publik; nama diselesaikan oleh Proxmox. |
| Tugas templat gagal saat mengunduh | Penyimpanan local tidak memiliki konten import | pvesm set local --content …,import,snippets, lalu coba lagi. Nama file harus berakhiran .qcow2, .raw, .vmdk, .ova atau .ovf. |
| "cluster has no online nodes" atau "node … is not online" | Node default sedang mati atau salah eja | Perbaiki Default node atau biarkan kosong. |
| "image bukan milik klaster" | OS pada paket tidak ada di Template OS | Tambahkan kunci ke daftar lalu simpan. |
| Penyebaran menunggu, kemudian gagal saat melakukan kloning | VM templat tidak berada di node yang dipilih | Buat templat pada node tersebut, atau atur Default node ke node yang memilikinya. |
| Pelanggan tidak dapat masuk sebagai root | Gambar memblokir login root | Bangun ulang templat seperti pada Opsi A. |
| Atur ulang kata sandi tidak berdampak apa pun | Tidak ada guest agent di dalam guest | Install and enable qemu-guest-agent pada templat. |
| "Nama, CIDR, dan gateway wajib diisi" | Kolom pool hilang | Isi ketiga kolom tersebut. |
| Pool create: "overlaps with pool …", "gateway must be within range (not network/broadcast address)" atau "cidr: network address must be …" | Pool tumpang tindih, gateway salah, atau CIDR bukan di batas jaringan | Gunakan rentang bebas, gateway di dalamnya, dan CIDR yang ditulis sebagai alamat jaringan (misalnya 198.51.100.0/24). |
| Impor: "region belum diatur" | Kluster dilampirkan tanpa nama node VM | Lampirkan kluster ke zona dengan nama node tersebut. |