PVE跨版本升级6.x to 7.x

平滑升级PVE 6.x到7.x

背景

不知觉中,PVE已经更新到版本7,采用Debian 11 (bullseye);在基于QEMU/KVM的虚拟化平台中,PVE算是个不错的选择,尤其对于非商业用户,可以采用开源的版本进行小规模的搭建,对我来说,承载homelabs的架构和技术是个优选的;众所周知,VMware vSphere的Esxi对于螃蟹卡(PC的Realtek网卡)的支持不好,尤其是新版本7,在某些方面不使用了Linux驱动栈,导致安装的时候不能识别网卡,继而无法继续,毕竟VMware是商业软件,面对的都是服务器之类的配件;

在获取PVE新版本发布之后,我尝试将我的后台服务器进行跨版本升级,并记录这个过程;由于我只使用了基础的功能(没有使用ceph和共享存储),所以本次升级平滑;

升级准备

首先基于官方的文档;把整个过程讲述的清楚明了,只要参照这个文档执行下去,就可以完成跨版本升级。

Upgrade from 6.x to 7.0 - Proxmox VE

先决条件

  1. 升级到最新版本的PVE6.4;
  2. 如果使用了Ceph,则需要先把Ceph Nautilus集群升级到Ceph 15.2 Octopus
  3. PVE备份服务器1.1升级到1.2
  4. 确保对升级机器的可靠访问,(SSH、IKVM/IPMI或物理访问)
  5. 一个健康的集群
  6. 备份重要的VM和CT(防止出现问题)
  7. 根目录大于4GB的可用空间
  8. 检查已知的升级问题

测试升级

如果情况比较复杂的话,需要进行足够的测试,如单机升级测试、硬件兼容性测试、虚拟机和容器的在新版本的运行状态、原配置文件对于新版本的兼容等等;

由于我本次是单机升级,所以相对来说比较简单。

预处理

需要集群中每个节点都执行一下操作;首先确保连接到目标机器的链路状态,避免升级中发生中断的情况,不要通过web控制台的shell去执行升级;必须要连接到母机上。

升级到最新版本

apt update && apt upgrade -y

# 可能会遇到不需要的软件包,提示可以移除的
he following packages were automatically installed and are no longer required:
  pve-kernel-5.4.114-1-pve pve-kernel-5.4.124-1-pve
Use 'apt autoremove' to remove them.

apt autoremove

预检查脚本

首先使用预检查脚本,检查升级的环境是否符合,并且对于检查结果的提示和警告进行处理;

# 进行初步检查
pve6to7

# 输出
= SUMMARY =

TOTAL:    21
PASSED:   16
SKIPPED:  3
WARNINGS: 2
FAILURES: 0

ATTENTION: Please check the output for detailed information!

# 将会存在2个警告;这2个可以忽略;后面会自动解决
WARN: updates for the following packages are available:
  zfs-initramfs, zfs-zed, libnvpair3linux, libuutil3linux, libzfs4linux, zfsutils-linux, libnvpair3linux, libuutil3linux, libzfs4linux, libzpool4linux

WARN: No Debian security repository detected in /etc/apt/sources.list and /etc/apt/sources.list.d/*.list

# 进行全盘检查
pve6to7 --full

备份虚拟机和容器

如果有VM和CT不能停机,可以在执行升级之前进行迁移;但是这个迁移过程是单向的,即从旧的版本到新的版本,反之则不行;意味着升级的顺序需要做些规划和编排。

检查网桥的MAC

升级后,网桥的MAC地址可能会发生改变;在一些场景中,这点影响很大;有2个方法可以规避这个问题;

方案1:使用ifupdown2

新版本中的ifupdown2包的策略进行了一些调整,便于它始终从桥接端口获取Mac地址;如果你在当前6.x的版本安装了ifupdown2,则新版本7的ifupdown2(3.1.0-1+pmx1或更高的版本)向后兼容配置。

方案2:写入Mac地址到配置文件

将当前的Mac地址写入到配置文件中,这样在升级后,就可以继续使用原Mac地址;

使用ip -c link 命令显示当前所有网卡设备的Mac地址;记录下每个接口和其Mac地址,到 /etc/network/interfaces 文件中,使用hwaddress MAC的语法添加进去;默认情况下,主网桥是vmbr0,以此为例;如果有多个接口的,依次添加。

auto vmbr0
iface vmbr0 inet static
    address 192.168.X.Y/24
    hwaddress aa:bb:cc:12:34

如果安装ifupdown2,使用 ifreload -a来应用变更;如果没有安装,则需要重启机器或使用 ifdown vmbr0; ifup vmbr0 (一次性输入两个以分号分分隔的命令)。

更新APT仓库

apt update
apt dist-upgrade # 这条命令会解决上面第1个警告。

变更仓库配置从buster到bullseye;

sed -i 's/buster\/updates/bullseye-security/g;s/buster/bullseye/g' /etc/apt/sources.list

新版本7的PVE使用Debian 11,它为了一致性,把安全库的地址做了改变,上面第一个s替换的就是新版的安全库配置。

我也使用了非企业版的更新源,那么这里也需要进行更新; /etc/apt/sources.list.d/pve-no-subscription.list

# 原配置
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian buster pve-no-subscription

# 更新后的配置;
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian bullseye pve-no-subscription

如果使用了Ceph,也同样需要更新

echo "deb http://download.proxmox.com/debian/ceph-octopus Bullseye main" > /etc/apt/sources.list.d/ceph.list

如果有backports行,可以选择删除或注释掉它,因为升级还没有在这个库中的软件包进行测试。

刷新一下APT源

apt update

刷新源列表后,检查所有的源为bullseye;

升级到新版

升级过程取决于系统性能,尤其是根分区的IOPS和带宽,慢速的硬盘估计要1小时或更久,而SSD则5分钟就可以完成。

apt dist-upgrade

# 输出
...
593 upgraded, 110 newly installed, 19 to remove and 0 not upgraded.
Need to get 520 MB of archives.
After this operation, 872 MB of additional disk space will be used.
Do you want to continue? [Y/n] y

在升级过程中,会弹出是否替换配置文件的对话框,这些与PVE无关,可根据自己的情况选择

最后一步确认;按回车继续,按Ctrl+c终止。

之后会读取变更日志,并且打印出来;上下键滚动,按q退出。

Fetched 520 MB in 1min 18s (6,701 kB/s)                                                                              
W: (pve-apt-hook) !! ATTENTION !!
W: (pve-apt-hook) You are attempting to upgrade from proxmox-ve '6.4-1' to proxmox-ve '7.0-2'. Please make sure to read the Upgrade notes at
W: (pve-apt-hook) 	https://pve.proxmox.com/wiki/Upgrade_from_6.x_to_7.0
W: (pve-apt-hook) before proceeding with this operation.
W: (pve-apt-hook) 
W: (pve-apt-hook) Press enter to continue, or C^c to abort

对话框1

y继续

Configuration file '/etc/issue'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** issue (Y/I/N/O/D/Z) [default=N] ? y

对话框2

如果要是通过物理控制台登录的,可以选择yes,否则建议选择否;大意为在更新过程中是否自动重启服务;如果是通过SSH或其他方式远程登录的,重启这个远程服务就可能会断开。

pve升级对话框1

对话框3

重启postfix、ssh和cron服务;(这里并不会断开SSH)

pve升级对话框2

对话框4

pve升级对话框3

对话框5

是否添加订阅更新源(付费),如果是购买了付费,可以选择y,否则n

Configuration file '/etc/apt/sources.list.d/pve-enterprise.list'
 ==> Deleted (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** pve-enterprise.list (Y/I/N/O/D/Z) [default=N] ?n

执行结束后,重启机器;

reboot

升级完成

pve升级完成

小瑕疵;这里会显示没有启动任何PVE源;但其实并不影响使用,如果使用了官方源,则可以在非订阅源的最后添加 /pve;但是国内的清华PVE源现在还不能这么写;官方论坛说在未来的版本会解决这个问题。

pve7.x显示没有仓库开启
pve提示仓库无效

后记

如果在升级过程中出现问题,则可以参照官方wiki的升级文档进行解决。