在 iStoreOS(OpenWRT)上安装 Proxmox VE
在 iStoreOS(OpenWRT)上安装 Proxmox VE
狂犬主子在 iStoreOS(OpenWRT)的 Docker 上安装 Proxmox VE
提醒:
如果你认为本文在讲的PVE in Docker就是虚拟机套虚拟机,container = hypervisor,“就像vmware里面套vbox套hyperv日用一样”,对不起,这篇文章不适合你,请立即关闭,否则你会获得吃💩体验!
本文比较抽象,着重于解决抽象问题,不喜勿喷。狗子差点因为这个问题被爆。
一般情况下,我们自组 HomeLab(All in Boom),会选择使用一些专业的虚拟机管理系统作为底层,然后在宿主机上安装各种虚拟机,实现各种功能。
最近主子发现,在 iStoreOS / OpenWRT 的 Docker 中安装 Proxmox VE 真的超级爽。
- OpenWRT 作为专业的路由器系统,你可以单独给虚拟机划分一个网段、设置网络转发等,能够在 LuCI 中提供完善的网络功能,无需复杂命令。
- 虚拟机崩掉不会影响家里设备上网,iStoreOS 也可直接作为轻 NAS 使用,存储位置更加灵活,能够降低 All in Boom 的风险。
- 对比那些 NAS 系统自带的、同是移植到 Docker 的 WebVirtCloud、美味十足小红帽的Cockpit,Proxmox VE的虚拟机管理系统十分直观,搞点直通啥的也不用编辑 xml 文件,也不依赖 libvirt,提高易用性,降低学习成本。
- 安装 OpenWRT 的设备大多性能不足、不支持直通 / SR-IOV 等高级操作,将路由器放到虚拟机里面后可能需要使用到网桥,会增加一些CPU转发网络的开销,这种方案可以极大提高网络转发效率,实现真正意义上的降本增效。
摸摸党,装两天虚拟机就不想用了,用Docker装PVE不会污染宿主机环境,等要用的时候再开就行。
个人认为这套方案适合于那种低功耗多网口小主机搞All in One,同时担任路由器和应用服务器,日常任务能用 Docker 搭建完成,偶尔跑点虚拟机,要不是缺管理软件,这种情况真没必要上物理 Proxmox VE。
当然这种方案也存在弊端,因为不是原生 Proxmox VE 系统,只是相当于在 debian 的 Docker 容器中安装了 Proxmox VE 的相关软件包,集群、网络、存储等方面肯定受到一些功能限制,不过受到的限制也可通过大神的 Patch 解决,至于集群的话,应该没有勇士敢在生产环境用的吧。
前提准备
知道我这篇文章里面出现的名词有什么含义。
内存要大一点,最好预留 1-2GB 内存给 OpenWRT 和 Proxmox VE 使用。
什么BIOS开启VT那些我就不啰嗦了,下面的是重点。
你用的 OpenWRT 要有 Docker 支持,建议你在编译的时候就搞进去。
你用的 OpenWRT 要有 kvm 支持,具体可以参考这篇文章:OpenWrt as QEMU/KVM host server 的“Installing QEMU”一节,配置好相关依赖:
你的设备上需要以下软件包:kmod-tun、qemu-bridge-helper。根据客户机架构,安装 qemu-x86_64-softmmu 或 qemu-arm-softmmu。如果你的硬件支持,请同时安装 kmod-kvm-amd 或 kmod-kvm-intel 以获得更好的性能。
Intel 系统和 x86_64 客户机的示例:
1
opkg install kmod-tun qemu-bridge-helper qemu-x86_64-softmmu kmod-kvm-intel
首次安装后,重新启动设备。
安装PVE Docker
这里主子测试了一下几个容器:
个人感觉第一个会更好用些,制作者也提供了在 DSM6、fnOS 上的安装教程:
为了实现数据持久化,我们需要手动从容器里面将
/etc/pve
、/var/lib/pve-cluster
、/var/lib/pve-manager
这几项复制出来后再映射回去,如果跳过复制直接映射(/var/lib/vz
除外)会导致无法进入Web UI,已向制作者建议能够增加相关逻辑自动创建/初始化配置文件。
建议先拉取好镜像,一般建议能用就不要升级,所以固定版本号。
具体哪个版本,去Docker Hub上查有哪些Tags。
1 | docker pull makedie/proxmox_ve:8.2.7 |
进入到你要安装的目录:
1 | mkdir /mnt/sata1-4/Configs/pve/ |
先运行一个能够启动的容器:
1 | docker run -idt \ |
进入容器,将配置文件复制出来:
1 | docker exec -it pve bash |
删除刚刚创建的容器:
1 | docker stop pve |
创建可数据持久化的容器:
这里仅加了 kvm 和 vfio 支持,不知道是否支持 LXC,具体参考这个 Docker Compose:deploy.yml
1 | mv ./vz/data . |
上述命令在iStoreOS中经过测试工作良好,请修改root_password后面的root为您的密码。
访问:https://10.0.8.1:8006 ,使用root用户和您的密码登录
你可以创建几个虚拟机,测试一下删除 PVE Docker 容器然后再重新创建,虚拟机配置文件和磁盘应该不会丢。如果丢了,检查一下文件位置。
创建虚拟机
别告诉我你不会,直接下一步下一步就好,网络设置我们后面还要改。
配置虚拟机网络
最头疼的就是这一步配置虚拟机的网络了。
在 Proxmox VE 中,虚拟机开机后会通过 perl 脚本自动创建虚拟网络设备(TAP)加入网桥,关机后自动删除这个 TAP,帮我们省了好些事情,这和 Docker 一样,不然我们还得手动创建TAP设备。
Proxmox VE 默认通过 ifupdown2 管理系统的网络,这个容器的 ifupdown2 是经过修改的,Proxmox VE 无法管理和配置宿主机网络设备,这意味着你能够在外部(OpenWRT)帮Proxmox VE完成网桥配置,只要名字对得上即可。
了解这些原理就轻松多了。
我是单网口台式机安装的 iStoreOS,eth0 接入到 br-lan 然后通过 DHCP 获取上级路由器分配的 IP。你的方案可能和我不太一样,但桥接上网的步骤基本是一样的。
桥接上网
在 OpenWRT 环境下,默认就有 br-lan 可以用,而且我们的 Proxmox VE 容器使用了 host 网络,能够共享主机的网络设备,我们只需手动编辑虚拟机配置文件 /etc/pve/qemu-server/<vmid>.conf
(界面改不了),将网卡的 vmbr0
替换成 br-lan
即可桥接上网。
理论上你给 OpenWRT 的 br-lan 重命名为 vmbr0 也能实现,或者修改Proxmox VE容器的
/etc/network/interfaces
将vmbr0替换成 br-lan 也行。题外话:其实一般情况下双网口机器你没必要设置 br-lan,唯一用途就在这里你创建虚拟机的时候有用,否则只是浪费CPU。
性能测试:
这个速度基本上和宿主机上跑的一样了,损失很小。
NAT上网
在OpenWRT LuCI 网络->接口->设备 里面创建一个网桥设备 vmbr0
,MAC地址MTU啥的会自动给你生成不用管,勾上允许启动空网桥。
然后配置好 DHCP 和 NAT(充分利用 OpenWRT LuCI 的便利性,弥补 Proxmox VE 在这方面的不足)。
创建虚拟机专用的接口(这里是pvevm),不会就找台多网口的路由器照着他的LAN口参数抄。
我这边是单网口机器,所以lan的作用相当于WAN(还要负责上网),有点神奇,而且pvevm也划分到防火墙的LAN区域了,所以要启用LAN区域间NAT转发。
如果你是多网口且有WAN口,那么只用配置到防火墙的LAN区域即可,不过好像也得启用LAN区域间NAT转发,除非你想隔离虚拟机,不然真心推荐你使用回第一种桥接上网方案。
建议配置好后重启一下 Proxmox VE 的容器,刷新一下使 vmbr0 被识别为 Active 状态。
虚拟机开机后会通过 perl 脚本自动创建 TAP 设备加入到这个 vmbr0(正常操作),即可通过 NAT 上网,PVE 里面啥也不用设置。
性能测试:
有一点损失,和你挂一台路由器差不多。
User模式上网
如果您不方便给 Proxmox VE 的 Docker 容器使用 host 网络类型,您也可以使用 QEMU 的 User 模式进行上网。相当于 QEMU 自动完成了 NAT 操作,只要容器能上网虚拟机就能上网。由于不是专业的转发软件,性能比较一般。属于是有不起 OpenWRT 又配置不起 NAT 才用的方案。而且这种情况下基本不用想着搭建服务了,怎么从外部访问还要再打一个问号。
Proxmox VE不支持直接配置User模式上网,我们需要删除掉 Proxmox VE 里面的网卡,然后手动添加 QEMU 的运行参数。
1 | qm set <VMID> -args '-netdev user,id=n0 -device virtio-net-pci,netdev=n0,mac=02:11:32:2a:76:f2' |
性能测试:
这个勾💩网速还是在2代i5上跑的,你的CPU估计都跑不到这个水平。
直通物理设备
iStoreOS 照顾到了我们虚拟机用户,在 LuCI 界面即可完成直通的相关 GRUB 启动参数的配置,如果你是其它系统,可能要手动改一下 GRUB 的启动参数,加上对于 CPU 平台的 IOMMU 支持。
这里以直通集成声卡为例,在虚拟机里面直接添加 PCI 设备,一次就能成功。
启动到 WinPE 放歌,因为是老机型 ALC662 免驱,能听得到声音,说明能够直通PCI-E设备。
直通USB,我试了鼠标可以用,你可以放心共享你的只支持 Windows 驱动的打印机了。
直通显卡我的 Q67 平台比较老就不试了。就算是能直通也不用想着直通给Windows,我相信你的设备带不动的,驱动也不一定打得上,顶多弄个Kodi能亮就不得了了。
直通SATA控制器的,如果你真有这个需求,我觉得你不应该考虑这个方案。