多節點調度
本頁說明 go-pve-qemu 如何判斷 VM 所在節點,並決定在本機或經 SSH 執行 qm。
找出 VM 所在節點
服務掃描 /etc/pve/nodes/*/qemu-server/*.conf(Proxmox 叢集檔案系統,所有節點同步),由路徑取得 節點 → VMID 對應:
/etc/pve/nodes/pve2/qemu-server/120.conf → VMID 120 在 pve2
執行位置
| 條件 | 執行方式 |
|---|---|
VM 所在節點 = MAIN_NODE |
本機執行 qm <args> |
其他節點,且有對應 NODE_<node> |
ssh root@<NODE_node> qm <args> |
MAIN_NODE 未設定,或找不到 NODE_<node> |
以空主機執行 SSH,指令失敗 |
SSH 固定帶下列選項,避免互動提示阻塞 API:
-o ConnectTimeout=10
-o StrictHostKeyChecking=no
-o UserKnownHostsFile=/dev/null
-o BatchMode=yes
使用此機制的操作
| 操作 | qm 子指令 |
|---|---|
| start | qm start |
| stop | qm stop |
| shutdown | qm shutdown |
| reboot | qm reboot |
| destroy | qm destroy |
| set/cpu | qm set --cores |
| set/memory | qm set --memory [--numa --balloon] |
| set/disk | qm disk resize scsi0 +<size> |
| set/node | qm migrate <vmid> <node> --with-local-disks |
例外
- 安裝:
qm create、importdisk、qm set一律在主節點本機執行;指定node時建立完成後才遷移,開機與重開才走上述調度 GET /vm/:id/status:只在主節點本機執行qm status,查詢其他節點上的 VM 會失敗- VM 清單:透過
pvesh get /cluster/resources取得全叢集資料,不需調度
遷移
POST /api/vm/:id/set/node 要求 VM 為停止狀態,以 --with-local-disks 一併搬移本地磁碟,qm migrate 的輸出逐行以 SSE 回傳。