0x00 前言
笔者的 homelab 此前一直使用 proxmox ve 作为虚拟化平台母鸡。然而近期添置了一些非 x86 平台的机器,以及 pve 本身对 Epyc 这类多 numa 的平台微调核心绑定很不方便,遂准备迁移到更清真(大雾)的 libvirt 平台上。
0x01 准备工作
首先需要安装一些必要的软件,如 libvirt 本体,linux 网桥,以及 virsh
这类命令的软件包。
% sudo apt install cockpit cockpit-machine libvirt bridge-utils librte-net-virtio21 virt-manager qemu-efi
部署 WebVirtCloud。我选择在 Cockpit 中先创建一个虚拟机作为他的载体,然后使用 WebVirtCloud 项目的一键安装脚本部署它。
% wget https://raw.githubusercontent.com/retspen/webvirtcloud/master/install.sh % chmod 744 install.sh % sudo ./install.sh
安装完成之后有一个坑需要踩,就是默认情况下运行 WebVirtCloud 程序的用户为www-data
,需要为其生成 ssh 公私钥才能让其后续可以通过 qemu+ssh:// 的协议连接其他机器。
% chown www-data -R ~www-data % sudo -u www-data ssh-keygen -t ed25519 % cat > ~www-data/.ssh/config << EOF Host * StrictHostKeyChecking no EOF % chown www-data -R ~www-data/.ssh/config
0x02 配置母机网桥
为了让虚拟机能够通过桥接直接获取自己的 ip 地址,我们需要设置母机的 libvirt 网桥。
首先创建一个网桥设备,并将其指向物理接口。
% ip link add vmbr0 type bridge % ip link set enp2s0f0np0 master vmbr0
编辑网络配置文件 /etc/network/interface
#auto enp2s0f0np0 iface enp2s0f0np0 inet manual auto vmbr0 iface vmbr0 inet static bridge_ports enp2s0f0np0 address *.*.*.*/24 gateway *.*.*.* bridge-stp off bridge-fd 0
网桥设置完成后,要将他添加在 libvirt 的网络设备中。
在任意位置创建一个 bridged-network.xml
文件,并填写如下内容。
<network>
<name>bridged-network</name>
<forward mode="bridge" />
<bridge name="vmbr0" />
</network>
然后,输入以下命令。
% virsh net-define bridged-network.xml % virsh net-start bridged-network % virsh net-autostart bridged-network
这样,libvirt 的网桥设备就添加完成了。可以输入 %virsh net-list
查看是否成功。
0x03 添加机器
将配置完 libvirt 的机器添加至 WebVirtCloud 中,方便集中管理。
在 WebVirtCloud 部署的机器上输入如下命令,将 ssh-key 添加至母机上。
sudo -u www-data ssh-copy-id root@*.*.*.*
在 webui 中添加机器。
添加完成后,就可以在 webui 中看到机器的详细信息了。
至此,平台就搭建完成了,可以进行后续的虚拟机迁移工作了。