3. Kubernetes 存储基础:PV/PVC/StorageClass 概念、CSI 驱动与 MinIO Operator 简介
在 Kubernetes 上运行有状态应用(如 MinIO)之前,必须理解其存储抽象层。本章将梳理 PV/PVC/StorageClass 的核心概念、CSI 驱动的插件化机制,以及 MinIO Operator 如何利用这些基础实现自动化部署。
3.1 核心存储抽象:PV、PVC 与 StorageClass
Kubernetes 通过三个资源对象将存储的供给与消费解耦:
| 资源 | 全称 | 角色 | 生命周期 |
|---|---|---|---|
| PV | PersistentVolume | 集群级别的存储资源(由管理员预先创建或动态供给) | 独立于 Pod,删除 Pod 后 PV 默认保留 |
| PVC | PersistentVolumeClaim | 用户对存储的请求(指定大小、访问模式) | 与 Pod 绑定,Pod 删除后 PVC 可保留或删除 |
| StorageClass | StorageClass | 存储模板(定义后端类型、回收策略、参数) | 集群级对象,用于动态 PV 供给 |
关键关系:PVC 像“订单”,PV 像“库存商品”,StorageClass 像“工厂生产线”。PVC 可以匹配已有的 PV(静态供给),也可以通过 StorageClass 自动创建 PV(动态供给)。
以下流程图展示了静态供给与动态供给的完整路径:
3.2 访问模式与回收策略
PV 和 PVC 的匹配依赖以下关键属性:
- 访问模式(Access Modes):
ReadWriteOnce (RWO)— 单节点读写(最常用,MinIO 默认模式)ReadOnlyMany (ROX)— 多节点只读ReadWriteMany (RWX)— 多节点读写(需要共享存储后端支持)
- 回收策略(Reclaim Policy):
Retain— PVC 删除后 PV 保留,需管理员手动回收Delete— PVC 删除后自动删除 PV 和后端存储Recycle— (已弃用)自动清理后重新可用
MinIO 迁移注意事项:MinIO 的 PVC 通常使用
Retain 策略,防止误删 PVC 导致数据丢失。在透明迁移场景中,源集群的 PV 必须保留,直到数据同步完成。
3.3 CSI 驱动:存储插件化标准
CSI(Container Storage Interface)是 Kubernetes 与存储后端之间的标准接口。任何存储厂商只要实现 CSI 规范,即可无缝接入 Kubernetes。
CSI 驱动的核心组件:
| 组件 | 部署方式 | 职责 |
|---|---|---|
| Controller Plugin | Deployment(1 或 3 副本) | 处理 CreateVolume/DeleteVolume/Attach/Detach 等控制面操作 |
| Node Plugin | DaemonSet(每节点一个) | 处理 Mount/Unmount、设备格式化、挂载点管理 |
| Sidecar 容器 | 与 Controller/Node 同 Pod | 将 CSI 调用转换为 Kubernetes API 事件(如 external-provisioner、external-attacher) |
以下架构图展示了 CSI 驱动在 Kubernetes 中的工作位置:
3.4 MinIO Operator 简介
MinIO Operator 是 MinIO 官方提供的 Kubernetes 原生 Operator,它利用上述存储基础实现 MinIO 集群的自动化部署、扩缩容、升级和配置管理。
Operator 的核心能力:
- 自动创建 PVC — 根据
TenantCRD 中声明的存储大小和 StorageClass,自动生成 PVC 并绑定到 MinIO Pod。 - 多池(Pool)管理 — 支持多个存储池,每个池可独立指定节点选择器、存储类和副本数。
- 证书与密钥轮换 — 自动管理 MinIO 的 TLS 证书和访问密钥。
- 升级回滚 — 支持 MinIO 版本的滚动升级和快速回滚。
透明迁移中的 Operator 角色:在迁移方案中,MinIO Operator 负责在目标集群中创建与源集群一致的 Tenant 配置(包括 PVC 模板、StorageClass 名称、访问模式),确保新集群的存储布局与源集群兼容,从而降低数据同步的复杂度。
3.5 本章小结
| 概念 | 对 MinIO 迁移的意义 |
|---|---|
| PV / PVC | MinIO 数据卷的持久化载体,迁移时需保持 PV 的 Retain 策略 |
| StorageClass | 定义后端存储类型,迁移时目标集群需创建同名或兼容的 StorageClass |
| CSI 驱动 | 提供统一的存储挂载接口,确保 MinIO Pod 在不同集群间挂载行为一致 |
| MinIO Operator | 自动化管理 MinIO 集群的生命周期,是透明迁移方案的核心编排工具 |