# 前言

在 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:8006https://域名:8006 ,登陆 proxmox 的控制台,需要注意 PVE 强制只能使用 https 协议

按照先前 jygg 说的安装过程最好不使用可被解析的域名,此时应该没法使用域名访问,用 ip 访问即可

此外还需记得配置 dns 服务器:

dns

# ssl 证书

这里介绍两种方法,都可以通过 PVE 控制台操作实现。需要注意,两种方法最后节点网页使用的 ssl 证书的路径在该节点 /etc/pve/nodes/节点名/ 目录下,名字默认是:

  • pveproxy-ssl.pem
  • pveproxy-ssl.key

证书位置

# 插件自动申请 ssl 证书

为了 https 访问能够不被浏览器阻挡,也为了安全,还需给自己的域名申请 ssl 证书,此后就用 https://域名:8006 对此 PVE 提供了基于 acme.sh 的自动化脚本,根据不同运营商给 proxmox 安装对应的插件,就可以实现自动申请 ssl 证书

ssl

# 注册 ACM 账号

数据中心 -> ACME -> 账户

注册ACM账号

# 添加 ACME 插件

数据中心 -> ACME -> 质询插件,或者指令 pvenode acme plugin add

ACME 插件的配置存放在 /etc/pve/priv/acme/plugins.cfg 中 ,一个插件可供整个集群使用

我们当然没有公网 ip,只能选择 dns 挑战。按照我们购买域名的运营商选择对应 api 接口,在运营商网页 API 相关部分获取对应的接口所需数据,填入数据,然后创建 acme 插件即可。

acme-plugin

如图是以 Porkbun 运营商为例创建 acme 插件

# 添加节点域名

每一个物理机节点都可以设置一个节点域名(node domain),但实际上一个集群只需要一台机器的 ip 绑定对应域名即可。选择这个 “主节点”:

机器 -> Certificate / 凭证 -> ACME -> Add / 添加

选择刚刚创建好的 acme 插件,填入你想要绑定的域名即可:

节点域名

最后点击 Order Certificate Now / 立即预约凭证 ,api 填写无误将顺利完成任务得到 OK 状态,后续不再需要手动申请证书,PVE 将利用 acme 插件定期自动申请凭证。

# 手动上传 ssl 证书

另一种方式是使用自己申请的 ssl 证书:

自己上传ssl证书

如图上传对应的 pemkey 文件即可。当然这种方式需要记得 ssl 过期前重新申请并上传文件。

# 更换 apt 软件源

PVE 实际上是一个 Debian ,按照 debian 换源方式操作即可。

需要注意的是 PVE 内置了一个 enterprise 软件源,但是这个软件源必须向 Proxmox 订阅(充钱)才能使用。我们当然只想白嫖,也不是商业用途,所以我们要把 /etc/apt/sources.list.d/pve-enterprise.list 里的这个软件源注释掉(当然删掉这个文件也是可以的):

javascript
deb https://enterprise.proxmox.com/debian/pve buster pve-enterprise

或者可以在 web 控制台操作禁用这些包含 enterprise 字眼的软件源

最后还需创建一个 /etc/apt/sources.list.d/pve-no-subscription.list 文件,(当然其实文件名只是给人看的,名字自定义即可)然后在文件内添加无需订阅的 PVE 软件源:

javascript
# 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 版本名,如果你的版本不一样还需换成对应的名字

最后结果:

apt

# 动态配置网络

默认在 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 版本

Edited on Views times