PV 的访问模式 (Access Modes) 有哪些(RWO, ROX, RWX)?
在 Kubernetes 中,PersistentVolume (PV) 的 访问模式 (Access Modes) 定义了存储卷可以被节点 (Node) 以何种方式挂载。
主要有以下三种标准模式,以及一种较新的模式:
1. RWO - ReadWriteOnce (读写,单节点)
- 全称:ReadWriteOnce
- 含义:该卷可以被单个节点以读写模式挂载。
- 关键点:
- “Once” 指的是节点 (Node),而不是 Pod。这意味着如果同一个节点上有多个 Pod,它们可以同时访问这个卷。
- 一旦该卷被挂载到一个节点上,其他节点就无法挂载它。
- 常见场景:数据库存储、单实例应用。
- 典型后端:块存储(如 AWS EBS, Azure Disk, GCE PD, VMware vSphere)。
2. ROX - ReadOnlyMany (只读,多节点)
- 全称:ReadOnlyMany
- 含义:该卷可以被多个节点同时以只读模式挂载。
- 关键点:
- 所有挂载该卷的 Pod 只能读取数据,不能写入。
- 适用于跨节点共享静态数据。
- 常见场景:加载静态配置、AI 模型数据分发、Web 静态资源。
- 典型后端:NFS, GlusterFS, CephFS, ConfigMap/Secret (逻辑上)。
3. RWX - ReadWriteMany (读写,多节点)
- 全称:ReadWriteMany
- 含义:该卷可以被多个节点同时以读写模式挂载。
- 关键点:
- 这是实现“共享存储”的关键模式。
- 允许多个 Pod 在不同节点上同时读写同一个文件系统。
- 常见场景:共享日志目录、Web 服务器共享上传目录、分布式应用。
- 典型后端:文件存储(如 NFS, AWS EFS, Azure Files, CephFS, GlusterFS)。
- 注意:块存储(如 AWS EBS)通常不支持此模式。
4. RWOP - ReadWriteOncePod (读写,单 Pod) [Kubernetes 1.22+ 新增]
- 全称:ReadWriteOncePod
- 含义:该卷只能被单个 Pod 挂载。
- 为什么需要它?:
- RWO 限制的是节点。如果一个节点上运行了两个 Pod,它们都可以访问 RWO 卷,这可能会导致数据竞争(Race Condition)。
- RWOP 提供了更严格的限制,确保整个集群中只有一个 Pod 能读写该卷。
- 典型后端:CSI 驱动支持的块存储。
总结对比表
| 缩写 | 全称 | 读写权限 | 节点并发数 | Pod 并发数 | 典型存储后端 |
|---|---|---|---|---|---|
| RWO | ReadWriteOnce | 读写 | 1 个 | 同一节点上可多个 | AWS EBS, Azure Disk |
| ROX | ReadOnlyMany | 只读 | 多个 | 多个 | NFS, GlusterFS |
| RWX | ReadWriteMany | 读写 | 多个 | 多个 | NFS, AWS EFS, CephFS |
| RWOP | ReadWriteOncePod | 读写 | 1 个 | 仅 1 个 | (部分 CSI 驱动) |
重要注意事项
- 底层存储决定支持模式:你不能强行要求一个不支持 RWX 的存储(如 AWS EBS)变成 RWX。如果底层存储不支持,PVC 绑定会失败或报错。
- 一次只能使用一种模式:虽然一个 PV 可能在能力上支持多种模式(例如 NFS 支持 RWO, ROX, RWX),但在 PVC 绑定时,通常只能指定一种特定的模式进行挂载。
右滑查看面试常问