Managing remote QEMU/KVM virtual machines with Cockpit web interface.
Ivon這篇要分享一款好用的Linux遠端管理工具。熟悉Libvirt、virsh、Virt Manager的人,一定會覺得如虎添翼!
想要遠端存取Linux電腦的QEMU/KVM虛擬機,Ivon之前提過 Virt Manager遠端SSH連線的方式,不過那樣做的前提是本機系統也得是Linux,才可以安裝全功能的Virt Manager,以控制Libvirt所建立的QEMU/KVM虛擬機。
如果想要在Windows、macOS、Android、iOS遠端管理QEMU/KVM呢?最好只要有瀏覽器就能存取?
在此介紹「Cockpit」這款好用的網頁工具。Cockpit意思為駕駛艙、儀表板,這個專案受RedHat公司贊助開發。Cockpit就像是網頁版的Virt Manager,可讓我們從網頁新增、檢視、刪除、備份QEMU/KVM虛擬機,以及管理GPU Passtthrough的裝置。
咦?Cockpit看起來有點像在用Proxmox的面板耶?因為它功能不只這個!Cockpit除了管理虛擬機之外,還可以調整Linux系統的各項設定喔!例如開啟網頁終端機、設定網路界面、調整firewalld防火牆、使用者群組管理、開關系統服務、管理Podman容器等等,可說是全方面的Linux網頁管理系統。
本文Ivon只討論Cockpit管理QEMU/KVM虛擬機方面的用法。
1. 安裝Cockpit#
- 請先 在Linux安裝QEMU/KVM與Libvirt相關套件,並確保Libirtd服務已經啟動。
sudo systemctl status libvirtd
- 接著,參考 官方文件部署Cockpit。例如Ubuntu LTS得從backports套件庫裝。
# 印出系統版本代號VERSION_CODENAME,作為環境變數
. /etc/os-release
# 從backports套件庫安裝cockpit
sudo apt install -t ${VERSION_CODENAME}-backports cockpit
# 從backports套件庫安裝cockpit-machine虛擬機管理界面
sudo apt install -t ${VERSION_CODENAME}-backports cockpit-machine
- 啟動Cockpit系統服務
sudo systemctl enable --now cockpit.socket
- 開放防火牆,Cockpit預設使用的通訊埠是9090/tcp
sudo ufw allow 9090/tcp
sudo ufw reload
- 然後就可以用本機瀏覽器或另一台電腦開啟Cockpit的後台界面了。網址為
https://Linux電腦的IP:9090
。帳號密碼就是你Linux系統的使用者帳號。要方便管理就直接用root登入吧。
2. 管理QEMU/KVM虛擬機#
需要安裝
cockpit-machine
套件,Cockpit網頁左側才會出現「Virtual machines」選單。點進去可以看到Linux電腦上的所有虛擬機
編輯硬體方面的用法跟Virt Manager十分類似,例如設定虛擬網路、修改硬體訊息、調整VirtIO共享目錄等,大部份操作都能用圖形界面完成。
若有Cockpit尚未實現的功能,恐怕你還是得用virsh edit
指令編輯虛擬機的XML了。
3. 新增QEMU/KVM虛擬機#
點選Create VM,然後依照需求建立VM。
如果Installation Type選取Download an OS
,則它會自動按照你選的內容下載對應ISO。但是此選項只能用來安裝Linux。
若要安裝Windows和其他系統,你得自行下載ISO到Linux電腦,再將Installation Type改為Local Install Media
並指定ISO路徑才行。
例如:
點選Cockpit左下角的Terminal啟動遠端Linux的終端機,執行 UUP DUMP的指令稿,取得Windows 11的ISO。
然後參照下圖填入路徑:
再參考 Windows 11 QEMU/KVM安裝方法新增TPM硬體,開始安裝系統。
4. 存取QEMU/KVM虛擬機桌面#
如果虛擬機有設定VNC服務,開機後應可從Cockpit網頁直接存取桌面。
不過Virt Manager新增的虛擬機預設應該是以SPICE為主,這個時候得確保該虛擬機的SPICE正在監聽所有網路界面:
換成virsh edit,這一段的XML長這樣:
<graphics type="spice" port="-1" autoport="no" listen="0.0.0.0">
<listen type="address" address="0.0.0.0"/>
<image compression="off"/>
</graphics>
- SPICE預設使用的通訊埠為5900,必須開啟Linux的防火牆
sudo ufw allow 5900
sudo ufw reload
從Cockpit網頁將虛擬機開機,然後點選
Launch Remote Viewer
下載.vv檔案以文字編輯器開啟.vv檔案,確認裡面填寫的host是你的遠端Linux IP
[virt-viewer]
type=spice
host=192.168.1.107
port=5900
fullscreen=0
[...............................GraphicsConsole]
5.. 再用 Virt Viewer開啟vv檔(注意是Virt Viewer,不要跟Virt Manager搞混),即可連線到遠端桌面。
5. 用Cockpit建立GPU直通#
以Nvidia GPU直通為例,首先你得設定IOMMU和VFIO綁定,步驟參見: Ubuntu Nvidia GPU直通給Windows虛擬機
確認Nvidia GPU隔離完成,就能在Cockpit選單,將Linux Host的Nvidia GPU指派給虛擬機使用了。