Proxmox CSI Plugin 多集群支持:一个 Kubernetes 集群接入多个 Proxmox 集群
【免费下载链接】proxmox-csi-pluginProxmox CSI Plugin项目地址: https://gitcode.com/gh_mirrors/pr/proxmox-csi-plugin
Kubernetes 集群的存储规划常常陷入两难:数据放在本地磁盘虽然快,但节点一维护就得手动迁移;使用集中式存储又担心单点风险。Proxmox CSI Plugin提供了一条新思路——让 Kubernetes 直接使用 Proxmox VE 的存储作为持久卷,并且最吸引人的特性是:一个 Kubernetes 集群可以同时接入多个独立的 Proxmox 集群,用一套 CSI 插件统一管理分布在不同机房、不同物理服务器的存储资源,实现跨区域的调度与容灾。
本文将以新手视角,带你理解它的多集群支持原理,并给出可直接照做的配置方法。
为什么需要多集群支持?
在传统方案里,一个 CSI 驱动通常只对接一个存储后端。如果你的业务横跨多个机房,往往要部署多套存储方案、维护多个存储类(StorageClass),管理成本直线上升。
Proxmox CSI Plugin 的做法是:在云配置文件中声明一个clusters列表,每个 Proxmox 集群对应一个region(区域),插件会在内部为每个区域维护独立的 API 客户端。你在配置里加多少个集群,插件就自动接入多少个,代码层面由 pkg/proxmoxpool/pool.go 中的ProxmoxPool统一管理这些客户端连接。
这意味着:一套插件、一个 StorageClass,就能覆盖多个机房,Pod 通过拓扑约束(topology)被调度到离数据最近的节点上。
核心概念:Region 与 Zone 的映射关系
要理解多集群支持,先记住两个映射:
- Region(区域)= 一个 Proxmox 集群,名称在配置文件的
region字段中定义 - Zone(可用区)= Proxmox 集群中的一个物理节点,名称就是节点名
这个映射关系直接落到 Kubernetes 的标准拓扑标签上:
| 拓扑标签 | 含义 |
|---|---|
topology.kubernetes.io/region | Proxmox 集群名(必须设置) |
topology.kubernetes.io/zone | Proxmox 节点名 |
给每个节点打上标签后,CSI 插件就能根据 Pod 所在节点的标签,自动决定把卷创建在哪个 Proxmox 集群、哪个节点的存储上。相关解析逻辑见 pkg/csi/helper.go 中的GetNodeTopology。
上图是 Proxmox 中一台 Kubernetes 节点的虚拟机磁盘界面,其中scsi2磁盘(vm-9999-pvc-*)就是由 CSI 插件动态创建、挂载给 Pod 的持久卷——数据实际落在 Proxmox 侧,Pod 以块设备方式访问。
多集群配置方法:clusters 列表详解
接入多个 Proxmox 集群,只需在配置文件的clusters段下追加条目即可,格式见 docs/config.md:
clusters: - url: https://cluster-api-1.example.com:8006/api2/json insecure: false token_id: "kubernetes-csi@pve!csi" token_secret: "secret" region: Region-1 - url: https://cluster-api-2.example.com:8006/api2/json insecure: false token_id: "kubernetes-csi@pve!csi" token_secret: "secret" region: Region-2每个集群条目包含 5 个关键字段:
- url:Proxmox API 地址(
/api2/json结尾) - insecure:是否跳过 TLS 证书校验
- token_id / token_secret:API 令牌,在 Proxmox 中为 CSI 用户创建
- region:区域名,必须与节点的
topology.kubernetes.io/region标签完全一致
配置解析和校验逻辑位于 pkg/config/config.go,它会逐一检查每个集群的 URL、凭证和 region 是否合法,缺一不可。
使用 Helm 安装时如何配置多集群
如果使用 Helm 安装,同样的多集群配置写在 values 文件中,字段完全对应:
config: clusters: - url: https://cluster-api-1.example.com:8006/api2/json token_id: "kubernetes-csi@pve!csi" token_secret: "secret" region: Region-1 - url: https://cluster-api-2.example.com:8006/api2/json token_id: "kubernetes-csi@pve!csi" token_secret: "secret" region: Region-2 storageClass: - name: proxmox-data-xfs storage: data fstype: xfs volumeBindingMode: WaitForFirstConsumer详细的 Helm 参数说明可以参考 charts/proxmox-csi-plugin/values.yaml。
三步完成多集群环境准备
第一步:Proxmox 侧创建 CSI 专用账号
在每个 Proxmox 集群上都执行一次,创建专用角色、用户和 API 令牌:
pveum role add CSI -privs "VM.Audit VM.Config.Disk Datastore.Allocate Datastore.AllocateSpace Datastore.Audit" pveum user add kubernetes-csi@pve pveum aclmod / -user kubernetes-csi@pve -role CSI pveum user token add kubernetes-csi@pve csi -privsep 0第二步:给 Kubernetes 节点打拓扑标签
按节点实际所在的 Proxmox 集群与节点打标签:
kubectl label nodes region1-node-1 topology.kubernetes.io/region=Region-1 kubectl label nodes region1-node-1 topology.kubernetes.io/zone=pve-1 kubectl label nodes region2-node-1 topology.kubernetes.io/region=Region-2 kubectl label nodes region2-node-1 topology.kubernetes.io/zone=pve-2注意:
topology.kubernetes.io/region标签必须设置,否则插件无法判断卷应该创建在哪个 Proxmox 集群。
第三步:创建 StorageClass 并部署
多集群场景下建议使用WaitForFirstConsumer绑定模式,让卷在 Pod 调度到具体节点后才创建,从而落到正确的区域:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: proxmox-data-xfs provisioner: csi.proxmox.sinextra.dev parameters: csi.storage.k8s.io/fstype: xfs storage: data reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true把配置文件上传为 Secret 后,按 docs/install.md 中的说明用kubectl apply或 Helm 完成部署即可。安装完成后,插件会自动巡检所有已配置的 Proxmox 集群连接是否可用(对应ProxmoxPool.CheckClusters)。
多集群支持带来的实际收益
- 一套存储类管理多个机房:无需为每个 Proxmox 集群创建独立的 StorageClass 和驱动实例
- 区域感知调度:Pod 会优先调度到卷所在区域的节点,避免跨机房 I/O
- 容量感知:插件通过
GetCapacity接口上报每个区域、每台节点的存储容量,Kubernetes 调度器可据此做出更聪明的调度决策 - 平滑扩展:后期新增机房时,只需在
clusters列表中追加一条配置,无需重建任何资源
使用场景建议
- 跨机房高可用:将多个 Proxmox 集群分布在不同的物理位置,配合 region/zone 反亲和实现容灾
- 家庭实验室(Homelab):用两台以上物理机组建多个 Proxmox 集群,集中管理所有虚拟机与持久卷
- 混合存储环境:不同集群使用不同的存储后端(如 LVM、ZFS、Ceph),通过 StorageClass 的
storage参数区分,但统一由插件调度
Proxmox CSI Plugin 的多集群支持,让「一个 Kubernetes 集群接入多个 Proxmox 集群」从配置到落地都变得简单直观。无论是小规模的 Homelab 还是跨机房的生产环境,它都能帮你把存储管理统一到一套体系之下,少一份运维负担,多一分数据安全感。
【免费下载链接】proxmox-csi-pluginProxmox CSI Plugin项目地址: https://gitcode.com/gh_mirrors/pr/proxmox-csi-plugin
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考