4.3.3.3. 访问模式
一个 PersistentVolume
可以以资源供应商支持的任何方式挂载到一个主机上。提供商将具有不同的功能,每个 PV 的访问模式设置为该特定卷支持的特定模式。例如:NFS 可以支持多个读/写客户端,但一个特定的 NFS PV 可能会以只读方式导出。每个 PV 都有自己一组访问模式来描述指定的 PV 功能。
声明会与有类似访问模式的卷匹配。用来进行匹配的标准只包括访问模式和大小。声明的访问模式代表一个请求。比声明要求的条件更多的资源可能会匹配,而比要求的条件更少的资源则不会被匹配。例如:如果一个声明请求 RWO,但唯一可用卷是一个 NFS PV(RWO+ROX+RWX),则该声明与这个 NFS 相匹配,因为它支持 RWO。
系统会首先尝试直接匹配。卷的模式必须与您的请求匹配,或包含更多模式。大小必须大于或等于预期值。如果两种类型的卷(例如,NFS 和 iSCSI)具有相同的访问模式,则其中任何一个模式都可与这些模式匹配。不同的卷类型之间没有匹配顺序,在同时匹配时也无法选择特定的一个卷类型。
所有具有相同模式的卷都被分组,然后按大小排序(从小到大)。绑定器获取具有匹配模式的组,并逐一(按大小顺序)进行迭代,直至一个大小匹配。
下表列出了访问模式:
访问模式 | CLI 缩写 | 描述 |
---|---|---|
ReadWriteOnce |
| 卷只可以被一个节点以读写模式挂载。 |
ReadOnlyMany |
| 卷可以被多个节点以只读形式挂载。 |
ReadWriteMany |
| 卷可以被多个节点以读写模式挂载。 |
卷的 AccessModes
只是卷功能的一个描述符。它们不会被强制限制。存储供应商会最终负责处理由于资源使用无效导致的运行时错误。
例如,Ceph 提供 ReadWriteOnce 访问模式。如果您需要卷的访问模式为 ROX,则需要在声明中指定 read-only
。供应商中的错误会在运行时作为挂载错误显示。
iSCSI 和 Fibre Channel(光纤通道)卷目前没有隔离机制。您必须保证在同一时间点上只在一个节点使用这些卷。在某些情况下,比如对节点进行 drain 操作时,卷可以被两个节点同时使用。在对节点进行 drain 操作前,需要首先确定使用这些卷的 pod 已被删除。
下表列出了不同的 PV 支持的访问模式:
卷插件 | ReadWriteOnce | ReadOnlyMany | ReadWriteMany |
---|---|---|---|
AWS EBS | ✅ | - | - |
Azure File | ✅ | ✅ | ✅ |
Azure Disk | ✅ | - | - |
Ceph RBD | ✅ | ✅ | - |
Fibre Channel | ✅ | ✅ | - |
GCE Persistent Disk | ✅ | - | - |
GlusterFS | ✅ | ✅ | ✅ |
gluster-block | ✅ | - | - |
HostPath | ✅ | - | - |
iSCSI | ✅ | ✅ | - |
NFS | ✅ | ✅ | ✅ |
OpenStack Cinder | ✅ | - | - |
VMWare vSphere | ✅ | - | - |
本地 | ✅ | - | - |
为依赖 AWS EBS、GCE Persistent Disks 或 Openstack Cinder PV 的 pod 使用重新创建的部署策略。