在 fnOS上安裝 KVM 虛擬化,並使用 Cockpit 網頁管理虛擬機器

木子欢儿發表於2024-09-16

在fnOS系統上安裝 KVM 虛擬化,並使用 Cockpit 進行網頁管理,可以按照以下步驟進行:

1. 安裝 KVM虛擬化元件

首先,更新軟體列表和系統包:

sudo apt update && sudo apt upgrade -y

安裝 KVM 及相關工具軟體:

sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils

執行以下命令檢查 KVM 是否成功安裝:

sudo systemctl status libvirtd

如果服務正在執行,KVM 安裝成功。

2. 安裝 Cockpit管理工具

安裝 Cockpit 及其虛擬機器管理外掛:

sudo apt install cockpit cockpit-machines

啟動 Cockpit 服務:

sudo systemctl start cockpit

安裝完成後即可開啟瀏覽器,輸入以下地址訪問Cockpit

http://<您的伺服器IP>:9090

使用您的fnOS使用者名稱和密碼登入,就可以管理伺服器和虛擬機器了。

3.關閉Apparmor對Libvirt安全限制

Libvirt在執行和訪問系統檔案的時候會被Apparmor阻擋,因此為了確保Libvirt始終有必須的許可權,必須禁用apparmor

ln -s /etc/apparmor.d/usr.sbin.libvirtd  /etc/apparmor.d/disable/
apparmor_parser -R  /etc/apparmor.d/usr.sbin.libvirtd

執行完成後reboot重啟機器。

4.建立Bridge網路,使虛擬機器透過bridge0橋接到物理網路

在Cockpit Web管理介面進行操作

5.安裝虛擬機器(以OpenWrt為例)

在Cockpit Web管理介面進行操作(這一步需先建立虛擬機器儲存池)

6.解決虛擬機器網橋不通的問題

解決虛擬機器無法 ping 通網橋(如 bridge0)內其他主機的問題,需要在 nftables 的規則中新增放行 bridge0 網橋的規則。具體步驟如下:

1. 允許 bridge0 網橋的流量,在 filter 表的 FORWARD 鏈中新增規則,以允許透過 bridge0 網橋的流量,這樣可以確保來自虛擬機器的流量可以透過網橋轉發到其他主機:

nft add rule ip filter FORWARD iifname "bridge0" accept
nft add rule ip filter FORWARD oifname "bridge0" accept

2. 儲存規則,使用 nftables 提供的儲存功能將當前規則儲存到配置檔案中:

sudo nft list ruleset > /etc/nftables.conf

3.確保 nftables 服務在啟動時載入配置:

sudo systemctl enable nftables

7.解決虛擬機器開機無法自動啟動的問題

虛擬機器無法自動啟動原因是libvirtd服務過早啟動,fnOS的儲存和掛載點未準備好,導致虛擬機器儲存池vmdisk未能掛載,虛擬機器無法訪問到磁碟檔案,我們可以修改libvirtd.service啟動服務,增加判斷,當fnOS儲存目錄可以訪問時,再啟動libvirtd,這樣就可以讓虛擬機器正常自動啟動。

編輯libvirtd.service檔案:

sudo nano /lib/systemd/system/libvirtd.service

[Service]中找到這一行:

ExecStart=/usr/sbin/libvirtd $LIBVIRTD_ARGS

修改為改為:

ExecStart=/bin/bash -c 'while [ ! -d /vol1/1000/vmdisk ]; do sleep 5; done; /usr/sbin/libvirtd $LIBVIRTD_ARGS'

增加了對/vol1/1000/vmdisk路徑訪問到判斷,可以按自己路徑進行修改,改完以後效果:

[Service]
Type=notify
Environment=LIBVIRTD_ARGS="--timeout 120"
EnvironmentFile=-/etc/default/libvirtd
ExecStart=/bin/bash -c 'while [ ! -d /vol1/1000/vmdisk ]; do sleep 5; done; /usr/sbin/libvirtd $LIBVIRTD_ARGS'

至此,教程結束,虛擬機器一切功能正常,fnOS更新不會影響虛擬機器的使用,虛擬機器的磁碟檔案在飛牛的儲存池內,也能保證虛擬機器資料的安全性。

其他1:調整虛擬機器關機超時時間(可選)

有些虛擬機器不支援acpid 或者無法安裝ga代理工具,可能出現無法響應關機命令,造成fnOS關機或者重啟過慢。

可以修改 /etc/default/libvirt-guests檔案中的相關設定,調整關機超時時間減少等待,配置檔案也可以控制虛擬機器關機的相關動作,預設的關機時間為300s,即5分鐘:

SHUTDOWN_TIMEOUT=300

根據自己情況修改,修改完成後,重新啟動 libvirt 服務生效:

sudo systemctl restart libvirtd

其他2:虛擬機器的快照功能(可選)

如果需要使用快照功能,需要使用下面命令將img格式的磁碟檔案轉換為qcow2格式:

qemu-img convert -f raw -O qcow2 /path/to/source.img /path/to/destination.qcow2

其他3:使用iptables,解決虛擬機器網橋不通(供參考,無需操作,已用nf實現)

1.放行bridge0流量:

sudo iptables -A FORWARD -i bridge0 -j ACCEPT
sudo iptables -A FORWARD -o bridge0 -j ACCEPT

2.安裝iptables-persisten使tiptables規則持久化儲存:

sudo apt install iptables-persistent

虛擬機器配置資料的備份

虛擬機器建立好以後,配置檔案存放在/etc/libvirt/qemu/ 路徑下

定時對此路徑下的檔案進行備份,當系統意外崩潰損壞後重灌後,

可以匯入虛擬機器的配置檔案,快速恢復虛擬機器。

前提是虛擬磁碟檔案是正常的,所以不建議在系統盤建立儲存空間存放資料,

重要資料應該存放在帶有效驗恢復能力的RAID1 RAID5等陣列中,加以保護。

注意事項

  • 建議把飛牛OS安裝在獨立的硬碟上,不要在系統盤上再建立儲存空間儲存資料。
  • 按上面做法,在系統盤損壞或者系統損壞重灌後,至少不會丟失儲存空間的資料。
  • 儲存空間建議使用RAID1 RAID5等具有效驗恢復能力的陣列儲存,提升安全性。
  • 此操作需要具備一定的Linux和網路基礎知識,不建議新手對fnOS底層進行修改操作。
  • fnOS仍在測試階段,可能發生資料丟失損毀的情況,不建議存放重要資料。
  • 虛擬機器內不建議存放重要資料,以免虛擬檔案損壞導致資料丟失。
  • 無論如何,重要的資料使用冷備份、網盤備份等多重備份才能確保其安全性。

相關文章