Proxmox CSI Plugin 多集群支持:一个 Kubernetes 集群接入多个 Proxmox 集群 📅 2026/8/17 23:38:36 Proxmox CSI Plugin 多集群支持一个 Kubernetes 集群接入多个 Proxmox 集群【免费下载链接】proxmox-csi-pluginProxmox CSI Plugin项目地址: https://gitcode.com/gh_mirrors/pr/proxmox-csi-pluginKubernetes 集群的存储规划常常陷入两难数据放在本地磁盘虽然快但节点一维护就得手动迁移使用集中式存储又担心单点风险。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/regionProxmox 集群名必须设置topology.kubernetes.io/zoneProxmox 节点名给每个节点打上标签后CSI 插件就能根据 Pod 所在节点的标签自动决定把卷创建在哪个 Proxmox 集群、哪个节点的存储上。相关解析逻辑见 pkg/csi/helper.go 中的GetNodeTopology。上图是 Proxmox 中一台 Kubernetes 节点的虚拟机磁盘界面其中scsi2磁盘vm-9999-pvc-*就是由 CSI 插件动态创建、挂载给 Pod 的持久卷——数据实际落在 Proxmox 侧Pod 以块设备方式访问。多集群配置方法clusters 列表详解接入多个 Proxmox 集群只需在配置文件的clusters段下追加条目即可格式见 docs/config.mdclusters: - url: https://cluster-api-1.example.com:8006/api2/json insecure: false token_id: kubernetes-csipve!csi token_secret: secret region: Region-1 - url: https://cluster-api-2.example.com:8006/api2/json insecure: false token_id: kubernetes-csipve!csi token_secret: secret region: Region-2每个集群条目包含 5 个关键字段urlProxmox API 地址/api2/json结尾insecure是否跳过 TLS 证书校验token_id / token_secretAPI 令牌在 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-csipve!csi token_secret: secret region: Region-1 - url: https://cluster-api-2.example.com:8006/api2/json token_id: kubernetes-csipve!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-csipve pveum aclmod / -user kubernetes-csipve -role CSI pveum user token add kubernetes-csipve csi -privsep 0第二步给 Kubernetes 节点打拓扑标签按节点实际所在的 Proxmox 集群与节点打标签kubectl label nodes region1-node-1 topology.kubernetes.io/regionRegion-1 kubectl label nodes region1-node-1 topology.kubernetes.io/zonepve-1 kubectl label nodes region2-node-1 topology.kubernetes.io/regionRegion-2 kubectl label nodes region2-node-1 topology.kubernetes.io/zonepve-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),仅供参考