在基于 arm 架构的设备上通过 Debian 安装 Proxmox Virtual Environment(PVE)。
一些常规的废话比如PVE介绍什么的就不写了,我还挺烦写这些东西的,既然都找到这来了肯定也不会不知到PVE是啥,又没有人会认真去看。
注意:本文完全是个人笔记,并不是官方或非官方教程,不对任何产品背书或担保,不保证在其他设备上可以正常使用。
操作前应确保完整通读过一遍本文章,且具备基本的Linux、虚拟化、数通等基本知识。
环境介绍
PVE官方并未释出直接在arm架构上可以安装PVE的iso,因此总体思路是先安装Debian,然后在Debian上安装PVE。
服务器硬件参数
- 型号:华为 Taishan 200 (2280)
- CPU:Kunpeng 920-4826 *2
- 内存:256GB (32GB*8)
- RAID卡:LSI SAS3508
- 存储:893GB SSD×2(RAID1)+1.6TB HDD×4(RAID5)
- 网卡:华为TM280 4×25Gb光口 + 华为TM210 4×Gb电口
服务器软件参数
- 操作系统版本:Debian GNU/Linux 11 (bullseye)
- 内核版本:5.10.0-30-arm64
- PVE版本:7.4-16
网络规划
本次仅使用服务器的0号光口和3号光口,0号光口配置为管理口,上联管理交换机,IP地址为172.18.234.206
;3号光口为业务口,不配置IP地址,用于OVS桥接,上联业务交换机。
安装Debian
跟着思路走的话第一步当然是安装 Debian ,这一步没什么好说的就配网、划分区、正常安装即可。
我这里用最新版的 Debian 12 Bookworm 会导致无法插入桥接模块,因此使用了 Debian 11 bullseye 版本。
下载地址:Debian CD Images Archive。
安装完成后记得换一下源,后面会方便很多。
磁盘分区问题
我这边服务器的话硬盘是分SSD和HDD的,准备系统安装在SSD然后HDD做数据盘,这样的话分区时记得HDD留白不要做分区,保持Free Space即可,后续将在PVE的WebUI里面去操作。
前置准备
启用桥接模块
启用bridge
模块
1 | modprobe bridge |
需要本条命令没有任何报错(没有任何返回),使用如下命令查看是否启用成功:
1 | lsmod | grep bridge |
正确的返回:
1 | root@pve01:~# lsmod | grep bridge |
网络配置
这一步可能会导致外部网络连接失效,请提前准备好上机配置。
- 禁用NetworkManager服务
1
systemctl disable --now NetworkManager
- 清空已有配置(全新安装的其实不需要)
1
rm /etc/network/interfaces.d/*
- 取得现在的接口信息
在shell下执行ip a
查看目前哪些网卡和网卡名就行,提前记一下。 - 编辑接口配置文件它默认里面应该是这样的
1
nano /etc/network/interfaces
在文件末尾添加你的接口,目前只需添加一个(用于访问WebUI的)管理接口即可:1
2
3
4
5
6
7
8# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback1
2
3
4
5# 开机自动启动
auto enp189s0n0
iface enp189s0n0 inet static
address 172.18.234.206/24
gateway 172.18.234.1 - 看一下DNS是否正确,如果不正确改一下:
1
2# Generated by NetworkManager
nameserver 119.29.29.29 - 启动接口配置如果有报错记得回去核对一下
1
systemctl restart networking
/etc/network/interfaces
文件!如果有报错且未解决加下来所有步骤都无法进行!
配完了ip a
看一下你配的网卡地址对不对。
如果这一步报错RTNETLINK answers: File exists
则执行(这一步执行过程中一定会断网):然后执行1
ip addr flush enp189s0n0
systemctl restart networking
重启networking
服务即可。
检查hosts
打开/etc/hosts
,查看指向本机的地址是否正确,基本格式就是[IP] [hostname] [domain]
,如果你安装的时候设置了domain的话要把domain加上,留空的话就无所谓了。
1 | 127.0.0.1 localhost |
可以通过 ping 一下自己的主机名检查是否有正确设置。也可以通过如下命令查看返回是否是本机IP地址:
1 | hostname --ip-address |
更新一下证书
1 | apt update && apt install -y apt-transport-https ca-certificates --fix-missing && apt update |
PVE安装
添加ARM架构PVE源
- 安装curl:不知道为什么我装的Debian里面甚至连curl都没XD。
1
apt install curl -y
- 添加镜像源:
1
echo "deb https://mirrors.apqa.cn/proxmox/debian/pve bullseye port">/etc/apt/sources.list.d/pveport.list
- 添加GPG Key:
1
curl -L https://mirrors.apqa.cn/proxmox/debian/pveport.gpg -o /etc/apt/trusted.gpg.d/pveport.gpg
- 更新:
1
apt update
安装PVE
- export一下PATH:
1
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- 安装必要部件:
1
apt update && apt install -y chrony ksmtuned rsyslog ifupdown2
- 安装PVE:
1
apt install -y proxmox-ve
安装完之后打开https://[IP]:8006
即可看到WebUI,用户名和密码就是root和root密码。
PVE内磁盘配置
在WebUI-左侧数据中心-选择自己的物理机节点-磁盘-目录,右侧“创建-目录”,选择空白的硬盘创建即可。
PVE内网络配置
先安装基础包:apt install -y openvswitch-switch
在WebUI-左侧数据中心-选择自己的物理机节点-系统-网络:
- 首先找到欲桥接的接口,该接口上不能配置IP地址和网关,然后记下该接口的名称。
- 上面点击创建-OVS Bridge,名称自动生成即可,桥接端口填写刚才记下的接口名称,其余如无需求全部留空即可。
- 上面点击应用配置即可。
网络配置这一块不应该有任何报错,如果有报错则检查前面的配置是否存在问题。
修改 CT Templates 镜像源
这部分主要是LXC容器使用的镜像,如果用不上可以不改。
具体方法:将 /usr/share/perl5/PVE/APLInfo.pm
文件中默认的源地址 http://download.proxmox.com
替换为
1 | http://mirrors4.tuna.tsinghua.edu.cn/proxmox |
可以使用如下命令修改:
1 | cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back |
针对 /usr/share/perl5/PVE/APLInfo.pm
文件的修改,重启后生效。
至此PVE的安装配置部分基本就结束了。
PVE虚拟机
创建虚拟机时需要注意:
- SCSI 控制器需要选择:VirtIO SCSI,不要选带Single的那个
- BIOS 需要选择:OVMF(UEFI),SeaBios(Legacy)在arm架构上无法启动
- CPU 类型只能选择
host
或者max
虚拟机创建后需要删除挂在ide总线上的cdrom,然后重新把cdrom挂在scsi上。arm架构不支持IDE总线。
在选项里面把引导顺序改一下,把网络启动取消勾选。
无法启动到 cdrom
安装 CentOS 7 和 ubuntu 18 时无法从 cdrom 启动,原因其实和安全启动有关。
- 启动虚拟机时再控制台连续按Esc,进入BIOS
- 选择第一个“Device Manager”
- 选择第三个“Secure Boot Configuration”
- 进入后取消勾选“Attempt Secure Boot”
- 按F10和Y保存,然后回到BIOS首页Reset即可。
安装Agent
Qemu 代理是一种在 VM 内部运行的服务,在主机和虚拟机之间提供通信通道。它用于交换信息,并允许主机向虚拟机发出命令。
首先在虚拟机关机状态下到“选项”-“QEMU Guest Agent”,点开之后勾选“使用QEMU Guest Agent”,保存后在客户机内执行如下命令安装Agent:
1 | # debian distro |
其中的guest-trim
选项在PVE将虚拟机磁盘移动到另一个存储或将VM实时迁移到具有本地存储的另一个节点时向VM发送Trim指令,在精简置备的存储上,这有助于释放未使用的空间。
Debian 12 无法插入 bridge 模块
不清楚为什么,希望大佬帮忙分析一下。有进展会在这里更新。
Debian 12 arm版本中无法执行modprobe bridge
。执行后显示:
1 | root@pve01:~# modprobe bridge |
- iso下载地址(当前有效,可能更新之后会被收到archive里面)
- dmesg日志
- bridge模块信息
按直接输出是内存不足?也不是,内存完全是足够的:
1 | root@pve01:~# cat /proc/meminfo | grep Vmalloc |
参考资料
排名不分先后。