PVE(Proxmox Virtual Environment)安装配置

Proxmox Virtual Environment简介

Proxmox VE(Proxmox Virtual Environment,通常简称为 PVE、Proxmox、Proxmox VE)是一个开源的服务器虚拟化环境 Linux 发行版。Proxmox VE 基于 Debian,使用基于 Ubuntu 的定制内核,包含安装程序、网页控制台和命令行工具,并且向第三方工具提供了 REST API。Proxmox VE 支持两类虚拟化技术:基于容器的 LXC(自 4.0 版开始,3.4 版及以前使用 OpenVZ 技术)和硬件抽象层全虚拟化的 KVM1

Proxmox Virtual Environment安装

  1. 进入Proxmox Virtual Environment官网下载新版ISO镜像文件,官网提供直接下载和BT下载两种方式,直接下载比较慢时可以选择BT下载提高下载速度。
    pve下载

  2. 将下载的镜像写入启动U盘。需要准一个大于2G的U盘作为安装启动盘,建议使用Rufus2写入ISO镜像文件。

Rufus 是一款格式化和创建 USB 启动盘的辅助工具。它适合以下环境:

  • 需要将可引导 ISO (Windows、Linux、UEFI 等) 刻录到 USB 安装媒介的情况
  • 需要处理未安装操作系统的设备的情况
  • 需要在 DOS 环境下刷写 BIOS 或其他固件的情况
  • 需要运行低级工具的情况
    Rufus
  1. 将制作好的启动U盘插入你的电脑,选择从U盘启动,进入Proxmox VE安装程序,一直点下一步即可,设置密码和IP地址一定要记住。
    Rufus写入镜像文件
  2. 安装完成后输入http://配置的IP地址:8006进入pve管理界面。
    在这里插入图片描述

Proxmox VE使用Zerotier实现异地组网 远程访问

Zerotier是一款免费的多平台内网穿透工具,可以简单、方便、快速地实现异地组网功能。在设备都拥有公网IPv6地址时,可以实现低时延、无损带宽的异地内网直连。

  1. 进入Zerotier官网注册账号,创建网络,并记下你的网络id。为了安全起见,这里建议将你的网络控制权限更改为私有的(Private)。
    ZeroTier创建
    Zerotier配置
    zerotier终端配置
  2. 在Proxmox VE上安装Zerotier,通过网页进入Proxmox VE(默认端口号:8006,用户名:root,密码为安装时设置的密码),进入shell进行安装。3
# 下载并运行安装Zerotier软件包,这里默认已安装了curl和gnupg软件包
curl -s https://install.zerotier.com/ | bash
# 开启ZerotierOne服务
systemctl start zerotier-one
# 设置为开机自启动
systemctl enable zerotier-one
# 加入你的Zerotier网络,此处113fXXXXX为你的Zerotier网络id
zerotier-cli join 113fXXXXX

由于前面将Zerotier网络的控制权限设置为了私有的,这里你需要进入Zerotier的官网对该终端进行授权。在列表中找到新加入的终端在将前面的单选框选中即可。

PVE存储配置相关问题

Proxmox VE系统安装完成后,在数据中心-存储中可以看见两个存储模块locallocal-lvm,注意两个存储模块的功能是不一样的,区别如下:

  • local:是目录类型,实际路径为 /var/lib/vz;用于存储虚拟机VZDump备份文件,ISO镜像和容器模板。
  • local-lvm:是分区类型,用于给虚拟机分配存储空间,即分配VM磁盘。

注意如果你只有一块硬盘,一定不能删除local-lvm。不知什么时候,网上有很多教程一安装完系统就教你把local-lvm存储删除掉并合并到根目录所在的lv卷里,缺少local-lvm存储对于只有一块硬盘是无法创建虚拟机的,因为没法给虚拟机分配存储空间,且一旦这样操作想要恢复就很麻烦。

Proxmox VE默认使用LVM(Logical Volume Manager)的分区模式。LVM可以让分区变得弹性,可以随时随地的扩大和缩小分区大小,前提是该分区是LVM格式的4。LVM格式的分区需要在硬盘分区的时候进行设置。

# 使用lsblk查看分区情况
root@pve:~# lsblk
NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
nvme1n1                      259:0    0 476.9G  0 disk
├─nvme1n1p1                  259:2    0  1007K  0 part
├─nvme1n1p2                  259:3    0     1G  0 part /boot/efi
└─nvme1n1p3                  259:4    0 475.9G  0 part
  ├─pve-swap                 253:2    0     8G  0 lvm  [SWAP]
  ├─pve-root                 253:3    0    96G  0 lvm  /
  ├─pve-data_tmeta           253:4    0   3.6G  0 lvm
  └─pve-data_tdata           253:5    0 348.8G  0 lvm

nvme0n1                      259:1    0   1.9T  0 disk
├─nvme0n1p1                  259:5    0   500G  0 part
│ └─pve_vg-vm--101--disk--0  253:0    0  1000G  0 lvm
├─nvme0n1p2                  259:6    0   500G  0 part
│ └─pve_vg-vm--101--disk--0  253:0    0  1000G  0 lvm
├─nvme0n1p3                  259:7    0   500G  0 part
│ └─pve_vg-vm--101--disk--0  253:0    0  1000G  0 lvm
└─nvme0n1p4                  259:8    0 407.7G  0 part
  └─data-dir                 253:1    0   200G  0 lvm
# 使用cfdisk进行分区
cfdisk /dev/nvme0n1

                                                   Disk: /dev/nvme0n1
                                Size: 1.86 TiB, 2048408248320 bytes, 4000797360 sectors
                              Label: gpt, identifier: 278342EF-FA85-5540-98B3-4C0B23D40824

    Device                                Start                End            Sectors           Size Type
>>  /dev/nvme0n1p1                         2048         1048578047         1048576000           500G Linux LVM
    /dev/nvme0n1p2                   1048578048         2097154047         1048576000           500G Linux LVM
    /dev/nvme0n1p3                   2097154048         3145730047         1048576000           500G Linux LVM
    /dev/nvme0n1p4                   3145730048         4000797326          855067279         407.7G Linux LVM


 ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 │ Partition UUID: ED9A759E-6824-6540-B940-93147A8DEA2E                                                               │
 │ Partition type: Linux LVM (E6D6D379-F507-44C2-A23C-238F2A3DF928)                                                   │
 │Filesystem UUID: jD6IVN-mfPf-0Pil-epLi-3zyV-w3KB-4ZvnNX                                                             │
 │     Filesystem: LVM2_member                                                                                        │
 └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
                   [ Delete ]  [ Resize ]  [  Quit  ]  [  Type  ]  [  Help  ]  [  Write ]  [  Dump  ]


                                         Quit program without writing changes
# 进入以上界面后选择Type后选择Linux LVM 即可设置为LVM格式的分区

由于博主的硬盘已经完成相关的分区操作,需要对其余硬盘进行分区可以请参考博客LVM知识梳理LVM详解

解决PVE无法自动获取公网IPv6的问题

由于安装时只能设置静态的IP地址,因而PVE没有能力自动获取到公网IPv6地址。按博客proxmox7(pve7)获取公网ipv6地址5提供的方法设置后重启即可获取到公网ipv6地址,当然前提是你的路由器开启了相关功能。

# 修改文件/etc/sysctl.conf
net.ipv6.conf.all.accept_ra=2
net.ipv6.conf.default.accept_ra=2
net.ipv6.conf.vmbr0.accept_ra=2
net.ipv6.conf.all.autoconf=1
net.ipv6.conf.default.autoconf=1
net.ipv6.conf.vmbr0.autoconf=1

#修改保存后重启
root@pve:~# reboot

开启PVE硬件直通

为了方便后续安装OpenWRT实现软路由的功能,需提前开启硬件直通功能,同时还要满足后续为黑群晖实现使用集成显卡软解的需要。开启硬件直通需要主板和CPU支持虚拟化,需提前在BIOS中开启VT-x和VT-d。
1.更改并更新grub6

#更改grub
root@pve: vim /etc/default/grub

#intel的的CPU这样写
    GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on pcie_acs_override=downstream video=efifb:off,vesafb:off"
#amd的CPU这样写
    GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on pcie_acs_override=downstream video=efifb:off,vesafb:off"

# 更改完成后,更新grub
root@pve: update-grub

2.更改内核参数

root@pve: vim /etc/modules
#加入以下几行
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
#保存更改后,重启
root@pve: reboot

解决直通中遇到的问题

在硬件直通后发现有一块nvme的m.2接口的固态硬盘总是开机几分钟后就消失不见了。关闭硬件直通后发现该硬盘又出现了。最后定位问题是系统盘和该硬盘使用了相同的通道开启硬件直通后该硬盘被屏蔽掉了。为了解决这个问题必须对PVE硬件直通进行强制IOMMU分组。

参考博客PVE硬件直通之强制IOMMU分组7中的方法发现我的硬件并不支持PCIe访问控制服务(ACS)8只能进行强制更新Linux系统内核来解决这个问题。下载该博主编译好的内核pve-kernel 6.1.6。下载后使用scp命令上传至pve系统中,解压、更新。

#解压
root@pve:~$ unzip pve-kernel-6.1.6.zip
# 更新内核
root@pve:~$ dpkg -i *.deb
# 更新完后重启系统
root@pve:~$ reboot

安装配置OpenWRT

下载镜像安装OpenWRT

进入openwrt官网下载X86系统找到img镜像链接,使用wget命令进行下载

# 由于服务器在国外下载速度很慢
root@pve:$ wget https://downloads.openwrt.org/releases/22.03.5/targets/x86/generic/openwrt-22.03.5-x86-generic-generic-squashfs-combined-efi.img.gz
# 解压
root@pve:$ gzip -d penwrt-22.03.5-x86-generic-generic-squashfs-combined-efi.img.gz

创建一个虚拟机建议 双核 1GB内存,不添加磁盘后续通过命令行导入固件。

# 导入openwrt固件,此处103为刚创建的虚拟机VM ID
root@pve:$ qm disk import 103 XXX.img local-lvm

OpenWRT网络配置

OpenWRT启动后可以通过PVE管理页面中的控制台进入shell终端界面,更改openwrt的网络参数。

  1. 配置openwrt网络接口
# 网络接口配置文件
root@OpenWrt:~$ vim /etc/config/network

config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fd8d:303f:1976::/48'
        
config interface 'lan'
        option device 'br-lan'
        option proto 'static'
        option ipaddr '192.168.20.1'
        option netmask '255.255.255.0'
        option ip6assign '60'

config interface 'wan1'
        option proto 'pppoe'            #使用拨号上网
        option device 'eth1'            #接口
        option username '0X520XXXXXXXX' #宽带账号
        option password '123456'        #宽带密码
        option ipv6 'auto'              #自动设置ipv6

config interface 'wan'
        option proto 'dhcp'             #使用DHCP协议自动获取ip上网
        option device 'eth0'            #接口         

config interface 'wan_6'                #配置wan口获取ipv6
        option proto 'dhcpv6'
        option device '@wan'
        option reqaddress 'try'
        option reqprefix 'auto'

OpenWRT安装并配置Zerotier

为了方便远程访问需安装Zerotier进行内网穿透。9

# 更新镜像源
root@OpenWrt:~$ opkg update
# 安装Zerotier
root@OpenWrt:~$ opkg install zerotier
#需要通过网页配置Zerotier可以在https://op.supes.top/packages/下载luci-app-zerotier.ipk包
#官方不提供Zerotier的luci的可视化包

#修改Zerotier的配置文件
root@OpenWrt:~$ vim etc/config/zerotier

option enabled '1' #将此次修改为1
list join '填写第二步的网络id'
#修改完成后,提交修改并重启服务
root@OpenWrt:~$ uci commit zerotier
root@OpenWrt:~$ /etc/init.d/zerotier restart
# 查看连接情况
root@OpenWrt:~$zerotier-cli status

为了让不在家时也能通过zerotierf访问家中设备需添加添加openwrt接口配置防火墙。
添加接口
zerotier接口
配置防火墙
完成后还需要进入zerotier官网配置路由。
Zerotier网络配置

OpenWRT邮件监测IPv6变化

为了防止Zerotier故障后完全访问不了家中设备,需要另外一层保险,我这采用脚本将OpenWRT获取到的公网ipv6发送到我的个人邮箱中,保证远程访问的可靠性。此处参考博客Openwrt使用mutt和msmtp实现发送邮件功能10

  1. 安装软件
# 安装msmtp服务和mutt
root@OpenWrt:~$ opkg update
root@OpenWrt:~$ opkg install msmtp
root@OpenWrt:~$ opkg install mutt

2.配置msmtp,修改配置文件/etc/msmtprc

# Example for a system wide configuration file

# A system wide configuration file is optional.
# If it exists, it usually defines a default account.
# This allows msmtp to be used like /usr/sbin/sendmail.
account default

# SMTP服务器网址
host smtp.189.cn

auth on
# 邮箱账号和密码
user XXXXX@189.cn
password XXXXXXXX

# Use TLS on port 465
port 465
tls on
tls_starttls off
tls_certcheck off

# Construct envelope-from addresses of the form "user@oursite.example"
from XXXXXXXX@189.cn

# Syslog logging with facility LOG_MAIL instead of the default LOG_USER
syslog LOG_MAIL
  1. 配置mutt ,修改配置文件/etc/Muttrc
set from="XXXXX@189.cn"
set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="邮件显示来件人名"
set editor="vim"
  1. 测试
echo "内容" | mutt -s "标题" xxxx@163.com  #收件人邮箱地址
  1. 创建脚本
    在/root/.autoip/目录中创建autoip.sh和lastip两个文件,分别用户保存脚本和ip地址
#!/bin/sh
#获取旧的ip地址
last=$(cat /root/.autoip/lastip)
#获取新的ip地址 此处监测网络连接为pppoe-wan1
curr=$(ip -6 addr show dev pppoe-wan1 | awk '/dynamic / {print $2}' | cut -d/ -f1)
#对比
if [ "$last" != "$curr" ]; then
	{
	echo "通知时间:`date '+%Y-%m-%d %H:%M:%S'`";
	echo ""
	echo "WAN口的IPv6地址:"
	echo "$(ip -6 addr show dev pppoe-wan1 | awk '/dynamic / {print $2}' | cut -d/ -f1)"
	echo "br-lan口的IPv6地址"
	echo "$(ip -6 addr show dev br-lan | awk '/dynamic / {print $2}' | cut -d/ -f1)"
	echo ""
	} | mutt XXXX@foxmail.com -s "【OpenWRT】IP地址变动通知"
	echo $curr > /root/.autoip/lastip
fi
  1. 配置定时运行11
# 在/etc/crontabs/root中加入如下内容,这里表示每5分中运行一次脚本/root/.autoip/autoip.sh
5 * * * *  /root/.autoip/autoip.sh

参考资料


  1. Proxmox VE 7.3 正式发布,开源的服务器虚拟化管理平台 ↩︎

  2. Rufus 是一款格式化和创建 USB 启动盘的辅助工具。 ↩︎

  3. pve虚拟机安装zerotier实现内网穿透 ↩︎

  4. LVM知识梳理 ↩︎

  5. proxmox7(pve7)获取公网ipv6地址 ↩︎

  6. PVE开启硬件显卡直通功能 ↩︎

  7. PVE硬件直通之强制IOMMU分组 ↩︎

  8. PCIe访问控制服务(ACS) ↩︎

  9. OpenWrt 通过安装 ZeroTier 实现异地组网教程 ↩︎

  10. Openwrt使用mutt和msmtp实现发送邮件功能 ↩︎

  11. Linux中Crontab(定时任务)命令详解及使用教程 ↩︎

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐