# 前言
在 Matrix 实验室用电子垃圾搭了一个小集群。
起因是 jygg 拿了一台被淘汰的存储型服务器给 cjl 玩,(据说是以前买来发现性能太差了,于是就把里面的 64T 的硬盘全部拿走了装到别的服务器上了,这台就废弃了),cjl 整了个 500g 的机械硬盘给服务器装上了,同时把不知为啥留在这里的一个台式 PC 给我玩,然后索性就装上了 PVE,在 jygg 的帮助下非常顺利搭了一个两台物理机组成的集群。
# 安装 PVE
到官网下载 PVE,这是一个只有 1G 大小左右的基于 debian 的装好了 proxmox 相关软件、服务的镜像,然后用 U 盘给物理机安装。
安装过程可以用 proxmox 提供的图形化安装页面,当然安装好的 debian 本身不会有 GUI。会需要用到键盘,以及鼠标 (除非键盘技巧特别好)。
安装过程有一些需要额外注意:
- hostname 会设置采取 FQDN 域名,但是实际上 proxmox 只会检查输入的是不是默认的
.invalid
结尾,只需改掉这个即可- jygg 说这个域名最好不要填可以被解析到的域名
- 不需要设置登陆 debian 的用户名,web 控制台登陆用的超级管理员用户名即 root 即可
- 安装过程设置的 ip 地址后面改起来也比较麻烦(尤其是组建集群时)最好提前确定好
- jygg 的帮助下我们安装时就给 2 个物理机设置了校园网内可供访问的 ip(Matrix 从校园网络中心租的网段)
- DNS Server 在这个界面里只能设置一个,可以安装完后再加
- 安装结束,及时拔掉 U 盘,然后重启即可
- 此后不再需要显示器键盘鼠标等外设,物理机插着电源和网线即可
重启后,用浏览器可以直接访问 https://ip:8006
或 https://域名:8006
,登陆 proxmox 的控制台,需要注意 PVE 强制只能使用 https 协议
按照先前 jygg 说的安装过程最好不使用可被解析的域名,此时应该没法使用域名访问,用 ip 访问即可
此外还需记得配置 dns 服务器:
# ssl 证书
这里介绍两种方法,都可以通过 PVE 控制台操作实现。需要注意,两种方法最后节点网页使用的 ssl 证书的路径在该节点 /etc/pve/nodes/节点名/
目录下,名字默认是:
pveproxy-ssl.pem
pveproxy-ssl.key
# 插件自动申请 ssl 证书
为了 https 访问能够不被浏览器阻挡,也为了安全,还需给自己的域名申请 ssl 证书,此后就用 https://域名:8006
对此 PVE 提供了基于 acme.sh 的自动化脚本,根据不同运营商给 proxmox 安装对应的插件,就可以实现自动申请 ssl 证书
# 注册 ACM 账号
数据中心 -> ACME -> 账户
# 添加 ACME 插件
数据中心 -> ACME -> 质询插件,或者指令 pvenode acme plugin add
ACME 插件的配置存放在 /etc/pve/priv/acme/plugins.cfg
中 ,一个插件可供整个集群使用
我们当然没有公网 ip,只能选择 dns 挑战。按照我们购买域名的运营商选择对应 api 接口,在运营商网页 API 相关部分获取对应的接口所需数据,填入数据,然后创建 acme 插件即可。
如图是以 Porkbun 运营商为例创建 acme 插件
# 添加节点域名
每一个物理机节点都可以设置一个节点域名(node domain),但实际上一个集群只需要一台机器的 ip 绑定对应域名即可。选择这个 “主节点”:
机器 -> Certificate / 凭证 -> ACME -> Add / 添加
选择刚刚创建好的 acme 插件,填入你想要绑定的域名即可:
最后点击 Order Certificate Now / 立即预约凭证 ,api 填写无误将顺利完成任务得到 OK 状态,后续不再需要手动申请证书,PVE 将利用 acme 插件定期自动申请凭证。
# 手动上传 ssl 证书
另一种方式是使用自己申请的 ssl 证书:
如图上传对应的 pem
和 key
文件即可。当然这种方式需要记得 ssl 过期前重新申请并上传文件。
# 更换 apt 软件源
PVE 实际上是一个 Debian ,按照 debian 换源方式操作即可。
需要注意的是 PVE 内置了一个 enterprise
软件源,但是这个软件源必须向 Proxmox 订阅(充钱)才能使用。我们当然只想白嫖,也不是商业用途,所以我们要把 /etc/apt/sources.list.d/pve-enterprise.list
里的这个软件源注释掉(当然删掉这个文件也是可以的):
deb https://enterprise.proxmox.com/debian/pve buster pve-enterprise |
或者可以在 web 控制台操作禁用这些包含 enterprise 字眼的软件源
最后还需创建一个 /etc/apt/sources.list.d/pve-no-subscription.list
文件,(当然其实文件名只是给人看的,名字自定义即可)然后在文件内添加无需订阅的 PVE 软件源:
# PVE pve-no-subscription repository provided by proxmox.com, | |
# NOT recommended for production use | |
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription |
注意其中 bookworm
是我们的 debian12 版本名,如果你的版本不一样还需换成对应的名字
最后结果:
# 动态配置网络
默认在 PVE 里更改宿主机的网络配置是需要重启才能生效的,此时所有虚拟机业务都会中断。所以我们需要让 PVE 支持 Reload 网络配置,方法很简单:
apt install ifupdown2
如果安装时提示说需要卸载 proxmox-ve,请确保已经加入了 pve-no-subscription
这个软件源并 apt update
# 配置防火墙
PVE 的防火墙层级比较复杂,分为三个部分:
- 集群
- 主机
- VM
每个部分都由各自的开关,并且在每个虚拟机网卡上也有开关。
** 首先要打开集群(Cluster)的防火墙开关。** 然后你可以配置整个集群的防火墙规则,比如限制对主机的 22 端口访问。
但是你会发现没有起作用。这是因为主机(Host)的防火墙开关没开。所以还需要开一下主机(Host)的防火墙开关。
此时主机的防火墙规则应当已经工作,如果还没有工作,请检查网卡的防火墙开关是否开启。
Please however check that you:
Enabled firewalling on Data Centre options
Enabled firewalling on Node(s)
Enabled firewalling on VM
Set individual VM network interfaces to firewall
https://forum.proxmox.com/threads/pve-firewall-doesnt-have-any-effect.47393/
为了搭建 Kubernetes 节点,下一步需要创建对应的 VM 节点。但手动创建 VM 节点、安装系统也是痛苦的,所以应该使用 Terraform 来简化这个过程,并自始至终保持可管理性。
# 参考资料
参考了 Matrix 的知识库。官方文档是全英文的,非常详细,但是英文不太适合快速上手,可以考虑参考中文翻译版本,这个翻译不一定及时更新到最新 proxmox 版本