2

HomeLab | 1 Proxmox Virtual Environment(PVE) 安装及配置

 1 year ago
source link: https://miaotony.xyz/2022/12/18/Server_HomeLab_1_PVEsetup/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

0x00 引言

哪个男孩子不想整个自己的 HomeLab 呢?

说来一直想玩好久了,蹭着暑假回家有空,直接花了点钱组了台鸡鸡,折腾着折腾着时间一下过去了

干脆开个新的 HomeLab 专题,这个系列具体说说喵喵折腾机器(搞机)的故事。

这一篇博客算是开篇,主要就记录一下咱折腾 PVE 安装和配置的过程 喵~

请注意!!!

本系列的文章是断断续续写的,最早写于2022年9月,可能有些信息已经过时!

(咕咕咕,喵喵是大鸽子

0x01 PVE 简介 & 硬件配置

PVE 的全称是 Proxmox Virtual Environment,是一个基于 QEMU/KVM 的 Linux 下的虚拟机。

主要的好处就是可以拿来跑虚拟化开一堆的虚拟机(生小鸡),还能支持硬件直通,几个节点放一起组集群等等。

Proxmox 支持的虚拟化:

  • 硬件抽象层全虚拟化,基于内核的 KVM(Kernel-based Virtual Machine)
  • 基于容器的虚拟化技术 LXC(Linux Containers)

喵喵的预算比较有限,最初是想当 NAS 用想要挺多存储,于是大概的配置如下:

  • 主板: 华硕 H610M-E
  • CPU: Intel i5-12400
  • GPU: 核显,暂无独显
  • RAM: 8G 2666MHz * 2
  • SSD: SN570 500GB
  • HDD: 西数紫盘/监控盘 4TB * 4 (大存储捏
  • 电源: 技嘉 P450B
  • 机箱: 挑战者H6(硬盘位贼多,不过买来发现贼大贼厚重

除了内存条是二手的之外,其他是全新采购的,没记错的话大概加起来四五k(硬盘都2k了)?(懒得查订单了

(后来一想感觉为了节约预算更好的方案应该是做垃圾佬,去海鲜市场淘点垃圾?或者整点服务器的 板U 貌似也不错。但是质量不敢保证就是了

(算了,买都买了,大不了再加

0x02 下载并刷写 PVE 镜像

直接去 Proxmox 官网下载 Proxmox Virtual Environment ISO 镜像

https://www.proxmox.com/en/downloads/category/iso-images-pve

目前(2022年9月)最新的版本是 7.2-1,这是基于 Debian GNU/Linux 11 (bullseye) 进行构建的。

Update: 2023年4月,最新版本是 7.4-1 了。

准备一个 U 盘,喵喵这里用了 Rufus 这个开源工具来刷新镜像

Rufus是一个帮助格式化和创建可启动USB闪存驱动器的工具,如USB钥匙/软盘、记忆棒等。

在如下场景中会非常有用:

  • 你需要把一些可引导的ISO格式的镜像(Windows,Linux,UEFI等)创建成USB安装盘的时候
  • 你需要使用一个还没有安装操作系统的设备的时候
  • 你需要从DOS系统刷写BIOS或者其他固件的时候
  • 你需要运行一个底层的工具的时候

Rufus 麻雀虽小,五脏俱全,体积虽小,功能全面,提供了一切你所需要的功能。

https://rufus.ie/zh/

选择你的 U 盘,选择下载好的镜像文件,然后发现会有下面这样的提示,说强制使用 DD 镜像写入模式。

image-20220829183934938.png

然后点开始,等他刷完就完事了。

当然你也可以直接 dd 命令来操作(

其实之前喵喵用的 Rufus 老版本,先试了试用 iso 模式刷写,但是发现后续的步骤启动不起来,进到 grub rescue mode 了。

之后升级了新版本,用 dd 模式就成功进安装界面了。

0x03 安装 PVE 系统

插上 U 盘,然后上电,开机。

根据主板的不同,不停按键盘上的类似于 F2 或者 DEL 这样的按键,进入 BIOS,修改 U 盘为优先启动。

当然还要打开 CPU 的虚拟化,比如 Intel® Virtualization Technology for Directed I/O (VT-d)

如果你的盘之前没装过系统,那就直接进入到安装 PVE 的界面了。

但是喵喵之前的盘装过 Windows 10,于是调用 U 盘启动的时候锅了,提示违反了安全启动(Secure Boot Violation)。

image-20220829201719888.png

这应该是主板的 feature 吧,需要在 BIOS 的设置里把安全启动给关了。

咱用的是 ASUS 的主板,也不确定下面的操作对不对,反正能用就是了。

在 启动 栏目里,把 操作系统类型 改成 其他系统,Secure Boot Mode 改成 Standard,然后保存配置并退出。

(图中是修改前的配置)

安全启动
安全启动

这样重启之后再从 U 盘引导,就能成功进入安装 PVE 的界面了。

PVE安装界面
PVE安装界面

接下来的就一路顺着安装就完事了。

选择安装的硬盘,这里的 options 里可以修改硬盘分区的大小 hdsize,比如总共分 100GB 用来装 PVE 这样,那这个 hdsize 就填 100.

image-20220829205908008.png

详细的说明可以看 官方文档的安装这部分

image-20220829210657288.png

之后配好密码,这个密码就是之后用来登录 web/ssh/ftp 的密码了,用户名默认就是 root。邮箱的话填个自己的就行。

接下来是 IP、网卡这些信息,网口如果是单网口就没啥问题,如果是还要用来跑 openwrt 系统之类的话就配成管理网口,不要设成 WAN 所在的网口。

如果你是连接在路由器下,那就填目前获得的那个网口 IP 和网关地址,主机名 hostname 就填个类似于 pve1.miaotony.xyz 这样的域名,这样填的话之后会以 pve1 作为 hostname。

然后确认好信息,耐心等系统安装完,就会出现个黑乎乎的控制台,里面就提示你管理这台 PVE 的 IP 和 Port 了。

默认情况下应该有一个类似于 https://192.168.1.20:8006 的链接,IP 就是之前给机器配的 IP。

登录界面
登录界面
web管理界面
web管理界面

登录进来就可以远程管理机器了,点击 Shell 就能远程执行命令了,好耶!

当然你可以直接用自己设置的密码在 tty 登录,其中用户名是 root

然后跑个 neofetch 吧。

先更新一下源,安装脚本(可能这时候还没换源会比较慢):

apt update && apt install -y neofetch

然后执行 neofetch

neofetch
neofetch

接下来就可以把显示器、键盘、鼠标啥的拔了,直接远程登录来管理了。

0x04 换源

去除企业源

(毕竟咱没钱钱也还没必要用企业版

rm /etc/apt/sources.list.d/pve-enterprise.list

或者把文件里的东西注释掉也行。

Debian,Proxmox

喵喵这里使用的是 USTC 的软件源,主要参考的是 其帮助文档

修改基础系统(Debian)的源文件

sed -i 's|^deb http://ftp.debian.org|deb https://mirrors.ustc.edu.cn|g' /etc/apt/sources.list
sed -i 's|^deb http://security.debian.org|deb https://mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list

修改 Proxmox 的源文件

source /etc/os-release
echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve $VERSION_CODENAME pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list

然后 apt update 更新索引

CT Templates

也就是 LXC 的仓库源(?

cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back
sed -i 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm

针对 /usr/share/perl5/PVE/APLInfo.pm 文件的修改,重启后生效。

更换 ceph 软件源

sed -i 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /etc/apt/sources.list.d/ceph.list

cp /usr/share/perl5/PVE/CLI/pveceph.pm /usr/share/perl5/PVE/CLI/pveceph.pm.bak
sed -i "s|http://download.proxmox.com/debian|https://mirrors.ustc.edu.cn/proxmox/debian|g" /usr/share/perl5/PVE/CLI/pveceph.pm

这之后正好先更新下系统

apt update
apt upgrade
apt dist-upgrade

然后 reboot 重启机器。

0x05 存储相关 & 扩容 root

PVE 存储

通过 ISO 镜像安装 Proxmox 后 Proxmox 会自动创建一个 pve 的 Volume Group,并在其上面创建 root, data 和 swap 三个逻辑卷。

默认情况下 Proxmox 会自动创建 local(pve) 和 local-lvm(pve) 这两个 Storage,分别用来存放镜像和磁盘:

  • local 是 Directory 类型,用来存放 VZDump backup file, ISO Images, Container template
  • local-lvm 是 LVM-Thin 类型,用来存放 Disk image, Container

LVM:Logical Volume Manager 逻辑卷管理

咱把 PVE 装在了一块 500GB 的 SSD 上,全新安装的系统上可以看到一块硬盘被划分了三个分区

root@pve1:~# fdisk -l
Disk /dev/nvme0n1: 465.76 GiB, 500107862016 bytes, 976773168 sectors
Disk model: WD Blue SN570 500GB SSD                 
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: xxxxxxxxxxx

Device           Start       End   Sectors  Size Type
/dev/nvme0n1p1      34      2047      2014 1007K BIOS boot
/dev/nvme0n1p2    2048   1050623   1048576  512M EFI System
/dev/nvme0n1p3 1050624 209715200 208664577 99.5G Linux LVM


Disk /dev/mapper/pve-swap: 8 GiB, 8589934592 bytes, 16777216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/pve-root: 24.75 GiB, 26575110144 bytes, 51904512 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
  • BIOS boot 分区是 GNU GRUB 来引导基于 Legacy BIOS 但是启动设备上有 GPT 格式分区表的操作系统时使用的分区。
  • EFI System 分区是一块 FAT32 格式的分区,存储 EFI 引导程序以及启动时固件使用的应用程序。
  • Linux LVM 分区则是系统真正可以使用的分区。LVM 是逻辑卷管理器,可以用来创建和管理逻辑卷,而不是直接管理磁盘,这就使得我们之后对分区大小进行调整变得可能。对 LVM 逻辑卷的扩大缩小并不会影响其中的已存储的数据。

可见创建了两个逻辑卷分区:

  • /dev/mapper/pve-swap swap 分区
  • /dev/mapper/pve-root root 分区

利用 lvdisplay 命令可以看到逻辑卷的详细信息

image-20220830023255792.png

Proxmox 安装的时候实际上创建了一个叫做 pve 的卷组 (Volume Group),然后在上面分别创建了 swap, root, data 三个逻辑卷 (Logical Volume)。

先给 pve 卷组 / Volume Group 扩容,或者说这个 VG 所在的分区扩容

安装 parted,列出分区信息

apt update && apt install -y parted
parted -l
Model: WD Blue SN570 500GB SSD (nvme)
Disk /dev/nvme0n1: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  1049kB  1031kB                     bios_grub
 2      1049kB  538MB   537MB   fat32              boot, esp
 3      538MB   107GB   107GB                      lvm

可以看到 PVE 安装在 /dev/nvme0n1 这块盘上

因为安装的时候改了 hdsize,这里并没有占满整块盘,我们可以对 LVM 这个分区进行扩容。

然后用 parted 交互式操作分区,注意小心操作!!!

这里扩容分区号为 3 的分区

root@pve1:~# parted /dev/nvme0n1
GNU Parted 3.4
Using /dev/nvme0n1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: WD Blue SN570 500GB SSD (nvme)
Disk /dev/nvme0n1: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  1049kB  1031kB                     bios_grub
 2      1049kB  538MB   537MB   fat32              boot, esp
 3      538MB   107GB   107GB                      lvm

(parted) resizepart 3 100%
(parted) print
Model: WD Blue SN570 500GB SSD (nvme)
Disk /dev/nvme0n1: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  1049kB  1031kB                     bios_grub
 2      1049kB  538MB   537MB   fat32              boot, esp
 3      538MB   500GB   500GB                      lvm

(parted) quit
Information: You may need to update /etc/fstab.

然后 更新物理卷的大小

root@pve1:~# pvresize /dev/nvme0n1p3
  Physical volume "/dev/nvme0n1p3" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

扩容逻辑卷

查看 Proxmox 的逻辑卷内容

root@pve1:~# cat /etc/pve/storage.cfg
dir: local
        path /var/lib/vz
        content iso,vztmpl,backup

lvmthin: local-lvm
        thinpool data
        vgname pve
        content rootdir,images

使用 pvs 查看物理卷的使用情况

root@pve1:~# pvs
  PV             VG  Fmt  Attr PSize    PFree
  /dev/nvme0n1p3 pve lvm2 a--  <465.26g <378.14g

可见在 PFree 里面有大量空间没有使用

而后利用 lvextend 命令进行逻辑卷的扩容

如果要把全部空间都给 data:

lvextend -l +100%FREE /dev/pve/data

如果指定给 data 增加 10GB:

lvextend -L +10G /dev/pve/data

如果熟悉 lvresize 也可以:

lvresize --extents +100%FREE --resizefs /dev/pve/data

另外这个 G 试了试发现是 GiB(

当然也可以给 root 增加个 10GiB:

lvextend -L +10GiB /dev/pve/root

可以使用 pvslvdisplay 进行查看分区情况有没有变化

image-20220830034103033.png

重新加载逻辑卷

df 发现 root 的容量还没变,于是需要 重新加载逻辑卷,从而使 LV 扩容生效

root@pve1:~# resize2fs /dev/pve/root
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/pve/root is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 5
The filesystem on /dev/pve/root is now 9109504 (4k) blocks long.

root@pve1:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
udev                  7.7G     0  7.7G   0% /dev
tmpfs                 1.6G  1.7M  1.6G   1% /run
/dev/mapper/pve-root   35G   12G   22G  35% /s
tmpfs                 7.7G   46M  7.7G   1% /dev/shm
tmpfs                 5.0M     0  5.0M   0% /run/lock
/dev/nvme0n1p2        511M  328K  511M   1% /boot/efi
/dev/fuse             128M   16K  128M   1% /etc/pve
tmpfs                 1.6G     0  1.6G   0% /run/user/0

这样就成功扩容了!

(看这个数字不太好看,于是又凑了个整数,后面有需要再继续扩容吧

image-20220830035927082.png

0x06 PVETools

搜着搜着正好搜到了个一键配置的工具 PVE Tools

proxmox ve tools script(debian9+ can use it).Including email, samba, NFS set zfs max ram, nested virtualization ,docker , pci passthrough etc. for english user,please look the end of readme.

这是一个为proxmox ve写的工具脚本(理论上debian9+可以用)。包括配置邮件sambaNFSzfs嵌套虚拟化docker硬盘直通等功能。

https://github.com/ivanhao/pvetools

可以用他这里的一键无脑安装

echo "nameserver  8.8.8.8" >> /etc/resolv.conf && rm /etc/apt/sources.list.d/pve-enterprise.list && export LC_ALL=en_US.UTF-8 && apt update && apt -y install git && git clone https://github.com/ivanhao/pvetools.git && cd pvetools && chmod +x pvetools.sh && ./pvetools.sh

(咱这里顺便加了个 chmod,可能直接 clone 下来没执行权限

image-20220829214302782.png

显示传感器温度、CPU 频率

比如配置显示传感器温度啥的,执行完成之后 Ctrl + F5 强制刷新 web 界面更新缓存,概要里就有相关的信息了

image-20220829214732730.png

去除订阅提示

这个其实就是把前端代码里的那个弹出窗口的部分给干掉了,hhh

https://github.com/ivanhao/pvetools/blob/e7404a53a37dd5e082f56bee9c8ad9edf2df291a/pvetools.sh#L1345

image-20220829220426677.png

CPU 省电

噢对了,顺便吐槽一下,现在这个版本(2.3.3)脚本里的 CPU 省电进行配置之后,如果还原配置会发现 CPU 睿频没了,或者说原来的超频回不去了。

然后在 Issue 里找到了类似的:

image-20220830011907776.png

作者修复在 https://github.com/ivanhao/pvetools/commit/dbd1532d78cc8ade72a32aab17a6fef9af3b4b3f ,感觉有点奇怪。。

image-20220830012126614.png
image-20220830012148165.png

相当于他把原来的 b) 还原配置改成了重新配置最大频率,但咱试之后并没有什么用,好迷啊。

么得办法,咱也先不管啥节能了,总得恢复回去吧。

于是把 cpufrequtils 给卸载了。(得,咱不要你了!)

再把 /etc/default/grub 里的 intel_pstate=disable 给删了。最后重启宿主机。

查了下,关了 pstate 好像是为了固定频率?或者让 cpufrequtils 来接管?(不大懂

cat << EOF > /etc/default/cpufrequtils
ENABLE="true"
GOVERNOR="performance"
EOF
systemctl restart cpufrequtils
apt -y remove cpufrequtils
rm -rf /etc/default/cpufrequtils

sed -i 's/ intel_pstate=disable//g' /etc/default/grub
update-grub

reboot

重启之后睿频就回来了

不过咱后来为了节能还是把 CPU 省电给打开了,放着吃灰而且产热的话太费电了(x

0x07 监控硬盘温度

如果跳过了上面的 PVETools,这里可以使用 lm-sensors 监控 CPU 温度,hddtemp 监控硬盘温度。

(不过 web 界面里还没有 hdd 温度倒是了

# 安装
apt install lm-sensors hddtemp -y
# 查看
sensors
hddtemp /dev/sda

当然也可以参考 国光大佬的教程,在 web 界面上加一个显示。

(这里略了)

0x08 配置 IPv6

参考 Proxmox网桥通过SLAAC配置公网ipv6地址,通过修改网口的 accept_ra 来实现。

Proxmox 使用的是 ifupdown2,非 debian/ubuntu 使用 ifupdown。

查看内核也已经开启ipv6自动配置:

# cat /proc/sys/net/ipv6/conf/vmbr0/accept_ra
1
# cat /proc/sys/net/ipv6/conf/vmbr0/autoconf
1

查看已开启ipv6转发:

# cat /proc/sys/net/ipv6/conf/vmbr0/forwarding
1

修改 /etc/sysctl.conf 文件,需要将 accept_ra 值改成 2 才能自动配置 SLAAC ipv6 地址:

# nano /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

再应用一下配置

sysctl -p

可能需要再重启一下,之后就能看到 ipv6 地址了。

0x09 小结

这篇博客是喵喵 HomeLab 系列的第一篇,大概介绍了 PVE 系统的大体情况以及初始上手的安装与配置方法。

后面几篇就来和大家分享一下喵喵在 PVE 系统上 生小鸡 的一些具体应用,可以期待一下(咕

0xFF References

溜了溜了喵(


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK