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 中看到机器的详细信息了。
至此,平台就搭建完成了,可以进行后续的虚拟机迁移工作了。