安装 PVE 驱动的个人虚拟化实验环境
status
Published
type
Post
slug
my-homelab-powered-by-pve-install
date
Dec 26, 2023
tags
PVE
Linux
Config
DevOps
summary
PVE 是一款个人虚拟化环境软件,可以在小型主机或老旧笔记本上安装,提供虚拟化环境来构建自己的 HomeLab。安装 PVE 的步骤包括准备引导工具、下载安装 PVE 镜像、配置软件源、创建模板等。通过 PVE,可以方便地管理和部署虚拟机,进行基础设施即代码的实践。
准备
引导工具
使用 Ventoy 来将U盘制作为启动设备
2023-12 当前正式版 Ventoy 无法启动 PVE 8.1,需使用 CI 版本:https://github.com/ventoy/Ventoy/actions/runs/7088423200
PVE 镜像
当前最新版本 8.1
安装
可参考官方 wiki 说明:
安装完成后,即可根据过程中配置的IP地址,在同一局域网其他机器浏览器访问
https://
IP
:8006
用户名 root ,密码为安装过程中所配置的,登录成功即可看到如下界面
配置
订阅弹窗去除
sed -Ezi.bak "s/(Ext.Msg.show\(\{\s+title: gettext\('No valid sub)/orig_cmd\(\); void\(\{ \/\/\1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js systemctl restart pveproxy.service
软件源
- 删除企业订阅源
rm /etc/apt/sources.list.d/pve-enterprise.list
- Proxmox 软件源镜像
# 中科大源 echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list # 更新(可选) apt update && apt dist-upgrade
- 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 # 加入 non-free 仓库(可选) sed -i 's|contrib$|contrib non-free|g' /etc/apt/sources.list # 更新 apt update && apt-get install -y apt-transport-https ca-certificates --fix-missing
- LXC 源镜像(CT Templates)
sed -i.bak "s#http://download.proxmox.com/images#https://mirrors.ustc.edu.cn/proxmox/images#g" /usr/share/perl5/PVE/APLInfo.pm wget -O /var/lib/pve-manager/apl-info/mirrors.ustc.edu.cn https://mirrors.ustc.edu.cn/proxmox/images/aplinfo-pve-7.dat systemctl restart pvedaemon
- Ceph 源
echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription" > /etc/apt/sources.list.d/ceph.list sed -i.bak "s#http://download.proxmox.com/debian#https://mirrors.ustc.edu.cn/proxmox/debian#g" /usr/share/perl5/PVE/CLI/pveceph.pm
如果是使用的老旧的笔记本电脑安装,可考虑如下配置
# 3 分钟后关闭屏幕,下次重启前有效 setterm -blank 3 # 持久化设置,需修改配置文件 vi /etc/default/grub # 修改内容如下 GRUB_CMDLINE_LINUX="consoleblank=120" # 保存后应用配置 update-grub # 合盖不休眠 sed -i 's/#HandleLidSwitch=suspend/HandleLidSwitch=ignore/g' /etc/systemd/logind.conf systemctl restart systemd-logind.service
创建模板
创建 Debian Cloud-Init Template
- 选择镜像
这里我们选用
genericcloud-amd64.qcow2
- 下载镜像
打开 PVE Shell
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2
- 创建虚拟机
# 创建 id 为 100,名为 debian-12-cloudinit-template,2C/2G 的虚拟机,其网卡 net0 桥接到 vmbr0,且跟随宿主机重启 qm create 100 --name "debian-12-cloudinit-template" --onboot 1 --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0 # 将下载好的 debian 12 cloud init 镜像导入到上一步创建的虚拟机,存储在 local-lvm qm importdisk 100 debian-12-genericcloud-amd64.qcow2 local-lvm # 将导入的磁盘镜像以 scsi 驱动器的方式装载到虚拟机的 scsi 控制器 qm set 100 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-100-disk-0 # 将上面导入了 debian-12 镜像的磁盘设置为可启动并限制 BIOS 仅从该磁盘启动 qm set 100 --boot c --bootdisk scsi0 # 添加 cloud-init CD ROM 驱动器,用来提供 cloud-init 参数给虚拟机 qm set 100 --ide2 local-lvm:cloudinit # 如果没有通过 xterm.js 访问虚拟机的需求,可不执行 qm set 100 --serial0 socket --vga serial0 # 启用 QEMU Guest Agent 功能 qm set 100 --agent enabled=1 # 核对确认虚拟机配置 qm config 100
此时如无特殊需要或问题,就可以把此虚拟机转换成模板了,执行命令:
qm template 100
。但为了使用更顺手,我还希望对此虚拟机做一些配置后再转换为模板。Cloud-Init
页面配置说明
用户
- 系统内第一个非 root 用户的名称,可自定义(建议配置)
- 若未配置
- 系统启动后不会新增用户,默认使用 root 用户
- 默认允许 root 用户通过 SSH 登录
密码
- 系统内第一个非 root 用户的密码,可自定义(建议配置)
- 若【用户】未配置,则此处的密码则为 root 密码
DNS 域 / DNS 服务器
- 留空则使用 DHCP,配置了则使用静态 DNS
SSH 公钥
- 若未配置,则 SSH 允许通过密码登录
- 若已配置,则 SSH 禁止通过密码登录,仅允许通过公钥对应的私钥登录
IP 配置
- 可分别配置对应网卡的 IPv4 和 IPv6 地址策略
- 支持静态 IP 或 DHCP
- 配置虚拟机
启动刚刚配置的虚拟机,进入 Shell
软件源修改,文件位于
/etc/apt/mirrors/
下echo "https://mirrors.ustc.edu.cn/debian" | sudo tee /etc/apt/mirrors/debian.list echo "https://mirrors.ustc.edu.cn/debian-security" | sudo tee /etc/apt/mirrors/debian-security.list
# sudo 免密码 (可选,cloud-init 似乎默认配置了) sudo tee /etc/sudoers.d/hk <<< 'hk ALL=(ALL) NOPASSWD: ALL' # 设置时区 sudo timedatectl set-timezone Asia/Shanghai # 更新 sudo apt update # 安装 qemu 代理 sudo apt install -y qemu-guest-agent # 启动 qemu 代理 sudo systemctl enable --now qemu-guest-agent # 安装软件包 sudo apt install -y htop git neofetch tree acpid # 清理 sudo apt clean sudo apt autoclean sudo apt autoremove # 清空 machine-id sudo truncate -s 0 /etc/machine-id /var/lib/dbus/machine-id
以上配置完成后,将虚拟机关机,执行命令
qm template 100
转换为模板。在 Web 页面上可以查看该模板,后续即可在页面上基于此模板快速创建虚拟机了。当然也可以执行命令
qm clone 100 101 --name vm101 --full
来进行该操作。克隆配置说明
模式
- 两种模式的区别
链接克隆
:类似快照,磁盘上仅存储「克隆后的副本相对于模板发生变化的部分」,克隆后的虚拟机无法使用迁移功能,但优势是占用的磁盘空间较小完整克隆
:直接将模板对应的虚拟机磁盘文件全量复制一份,虚拟机中的任何改动,只会存储在自己的虚拟磁盘文件中,可以在 PVE 集群中自由地迁移
- 如果 PVE 宿主机只有一台,即 PVE 是单节点模式部署的,那么此处可以随意选择
- 如果 PVE 宿主机不止一台,且组成了集群,有节点迁移和高可用的需求,那么此处最好选择
完整克隆
VM ID
- 可以自定义,也可以使用 PVE 默认的自增 ID
名称
- 需要自己定义一个,开机后,cloud-init 会使用虚拟机名称作为虚拟机的 hostname
克隆完成后进入虚拟机的「硬件」页面,按实际需要调整虚拟机的硬件配置:硬盘、内存
处理器、网络等。
下一步准备使用
Terraform
来管理部署 PVE 中的虚拟机,体验一下基础设施即代码 (IaaS
)。