眾所皆知,Proxmox VE 提供了相當良好的 WebUI 給我們使用,但有時候我們仍然需要在命令列下操作叢集或虛擬機器,因此 pvecm、qm 等指令會是進階 PVE 使用者掌握的重要工具。
不過,事情亦沒有如此美好。以 qm 指令來看,有個致命的缺點,也就是「必須連接到該節點才能以 qm 操作該節點上的虛擬機器」,這對擁有許多節點的管理者相當不便。
舉個例子,我以 ssh 登入 Node A 的命令列,無法使用 qm 指令啟動位在 Node B 上面的虛擬機器,偶爾遇到還好,但緊急或大量操作的時候,這就是一個影響效率的重要關鍵。
那麼,我們有什麼解決方案呢?
替代方案
其實 Proxmox VE 做為一個全 Web 化管理的平台,早就已經擁有功能全面且符合 REST API 規範的一系列介面供其它程式呼叫使用。
Proxmox VE API Documentation
在大部份的應用場景,自己重新開發顯然不合成本。
可以使用 curl 這個 Linux 上必備的神器等級工具,透過 curl 來呼叫 PVE API 路徑,即可跨叢集以 CLI 命令列管理 PVE 各節點上的虛擬機器與容器。
我們直接以官網的範例來說明:第一步要先送出帳密取得 Ticket,再以此 Ticket 做為呼叫 API 的 Token,還要記住這個 Ticket 的有效期間只有兩個小時,超過時間需要重新取得 Ticket。
登入 API 取得 Ticket
# curl -k -d "username=root@pam&password=yourpassword" https://10.0.0.1:8006/api2/json/access/ticket 輸出結果: { "data": { "CSRFPreventionToken":"4EEC61E2:lwk7od06fa1+DcPUwBTXCcndyAY", "ticket":"PVE:root@pam:4EEC61E2::rsKoApxDTLYPn6H3NNT6iP2mv...", "username":"root@pam"} }
帶入 Ticket 呼叫 API 功能
curl -k -b "PVEAuthCookie=PVE:root@pam:4EEC61E2::rsKoApxDTLYPn6H3NNT6iP2mv..." https://10.0.0.1:8006/api2/json/
寫入需求 (POST, PUT, DELETE) 的 API 呼叫方法
curl -XDELETE -H "CSRFPreventionToken: 4EEC61E2:lwk7od06fa1+DcPUwBTXCcndyAY" ...
呼叫的 API 路徑,可以參考 PVE 官方所提供的 API 文件,它是一個良好的 API Viewer,可以很容易的找到需要呼叫功能的路徑以及用法、參數。
等等,用 curl 呼叫 API 雖然可以跨叢集,可是用起來反而更麻煩呀,我不如回去用 qm........
pvesh 就是 PVE 團隊提供的利器,一次幫我們搞定許多複雜的事,同時也會把 API 回傳的 JSON 格式結果,以較適合人類的表格方式顯示。
舉幾個比較常用的指令,做為 pvesh 的用法展示。
顯示目前連接節點的 pve-manager 版本
pvesh get /version
顯示叢集資源的狀況
pvesh get /cluster/resources
pvesh 取得版本與叢集資源
繼續來展示其它的用法,以節點的資訊操作為主:
顯示叢集中的節點
pvesh get /nodes
顯示節點中的虛擬機器
pvesh get /nodes/<nodeid>/qemu
pvesh 取得節點清單與虛擬機器清單
上面的展示指令都只是資訊讀取,接下來可以看看怎麼對 PVE 進行操作。
顯示虛擬機器狀態
pvesh get /nodes/<nodeid>/qemu/<vmid>/status/current
將虛擬機器開機
pvesh create /nodes/<nodeid>/qemu/<vmid>/status/start
pvesh 取得虛擬機器狀態與開機
可以注意到,開機這個動作所採用的命令是 create 而不是 get,請特別留意。
成功開機後,命令列會顯示開機這個作業的作業 ID (Task ID) 以及使用者帳號等相關資訊,供我們判斷 ,同時這個作業資訊跟 WebUI 是完全一致的。
WebUI 作業視窗顯示 pvesh 執行的作業資訊
若是虛擬機器開機失敗,也會在命令列執行結果完整顯示:
pvesh 虛擬機器開機失敗輸出結果
更多其它的操作方式範例:
顯示容器快照
pvesh get /nodes/<nodeid>/lxc/<ctid>/snapshot
pvesh 顯示容器快照資訊
顯示節點的 ZFS 儲存區
pvesh get /nodes/<nodeid>/disks/zfs
顯示節點的磁碟列表
pvesh get /nodes/<nodeid>/disks/list
pvesh 顯示節點 ZFS 儲存與節點磁碟列表
結論
有了 pvesh,過去我們所經常使用的 pvecm、qm、pct、pvesm 等 CLI 工具都已經可以被 pvesh 所取代,在 WebUI 上所有能做的事幾乎都被 pvesh 所實現,對於喜愛使用指令操作系統的管理員而言,簡直是必備工具,正所謂「pvesh 在手,pve 天下我有」。
參考資料
- Proxmox VE API - Proxmox VE
https://pve.proxmox.com/wiki/Proxmox_VE_API
- Proxmox VE API Documentation
https://pve.proxmox.com/pve-docs/api-viewer/index.html
- pvesh(1)
https://pve.proxmox.com/pve-docs/pvesh.1.html
- curl(1): transfer URL - Linux man page
https://linux.die.net/man/1/curl