概念定位
访问模式描述的是「卷能被怎样挂载使用」,不是文件权限开关:RWO 是单节点读写,ROX 是多节点只读,RWX 是多节点读写,RWOP 是仅单个 Pod 读写。适用平台是 Kubernetes。关键认知有两点:其一,某个模式能不能用由底层存储驱动决定(块存储多数只支持 RWO,共享文件系统才支持 RWX);其二,RWO 的「单节点」语义意味着同一节点上的多个 Pod 可以同时挂载同一个卷。
基本信息
| 适用平台 | Kubernetes,PVC 的 spec.accessModes 与 PV 的 spec.accessModes |
|---|---|
| 四种模式 | ReadWriteOnce、ReadOnlyMany、ReadWriteMany、ReadWriteOncePod |
| 决定方 | 底层驱动能力,PVC 只做声明 |
| 校验时机 | 绑定与挂载时校验,不满足则 PVC 无法绑定或 Pod 起不来 |
典型使用场景
- 数据库持久化:云盘类存储用 RWO,单节点读写即可满足
- 共享静态资源:NFS 或 CephFS 提供 RWX,多副本同时读取配置或上传目录
- 只读分发:把模型文件、镜像数据以 ROX 挂给多个节点
- 避免同卷多 Pod 冲突:用 RWOP 明确只允许一个 Pod 挂载
- 存储选型评审:先确认业务需要的访问模式,再反推可选的存储类型
声明
声明
spec:
accessModes:
- ReadWriteOnce
storageClassName: fast-ssd
resources:
requests:
storage: 50Gi核对
核对
kubectl get pvc mysql-data -o jsonpath='{.spec.accessModes}' # PVC 声明的模式
kubectl get pv <pv-name> -o jsonpath='{.spec.accessModes}' # PV 支持的模式
kubectl get storageclass fast-ssd -o yaml | grep -i -A3 volumeBindingMode
kubectl describe pvc mysql-data | grep -A5 Events # 模式不匹配时的报错
kubectl get pvc -A -o custom-columns='NS:.metadata.namespace,NAME:.metadata.name,MODES:.spec.accessModes'四种模式对照
| 模式 | 含义 | 常见支持 |
|---|---|---|
| ReadWriteOnce (RWO) | 单节点读写挂载(同节点多 Pod 可共享) | 云盘、块存储、本地盘 |
| ReadOnlyMany (ROX) | 多节点只读挂载 | 部分文件与块存储驱动 |
| ReadWriteMany (RWX) | 多节点读写挂载 | NFS、CephFS 等共享文件系统 |
| ReadWriteOncePod (RWOP) | 仅单个 Pod 读写(1.22 起引入) | 支持该语义的 CSI 驱动 |
访问模式是声明不是保证:驱动不支持时不会静默降级,而是 PVC 绑定失败或 Pod 挂载报错,选型前先看驱动的能力矩阵。
RWOP 的粒度比 RWO 更细(单 Pod 而非单节点),适合需要严格防止并发写入又不希望同节点多 Pod 共享的场景。