3.3. 持久性卷(PV)
每个 PV 都会包括一个 spec
和 status
,它们分别代表卷的规格和状态,例如:
PersistentVolume
对象定义示例
apiVersion: v1 kind: PersistentVolume metadata: name: pv0001 1 spec: capacity: storage: 5Gi 2 accessModes: - ReadWriteOnce 3 persistentVolumeReclaimPolicy: Retain 4 ... status: ...
3.3.1. PV 类型
OpenShift Dedicated 支持以下持久性卷插件:
- AWS Elastic Block Store (EBS)
- GCP 持久性磁盘
- GCP Filestore
3.3.2. 容量
一般情况下,一个持久性卷(PV)有特定的存储容量。这可以通过使用 PV 的 capacity
属性来设置。
目前,存储容量是唯一可以设置或请求的资源。以后可能会包括 IOPS 、 throughput 等属性。
3.3.3. 访问模式
一个持久性卷可以以资源供应商支持的任何方式挂载到一个主机上。不同的供应商具有不同的功能,每个 PV 的访问模式可以被设置为特定卷支持的特定模式。例如:NFS 可以支持多个读写客户端,但一个特定的 NFS PV 可能会以只读方式导出。每个 PV 都有自己一组访问模式来描述指定的 PV 功能。
声明会与有类似访问模式的卷匹配。用来进行匹配的标准只包括访问模式和大小。声明的访问模式代表一个请求。比声明要求的条件更多的资源可能会匹配,而比要求的条件更少的资源则不会被匹配。例如:如果一个声明请求 RWO,但唯一可用卷是一个 NFS PV(RWO+ROX+RWX),则该声明与这个 NFS 相匹配,因为它支持 RWO。
系统会首先尝试直接匹配。卷的模式必须与您的请求匹配,或包含更多模式。大小必须大于或等于预期值。如果两个卷类型(如 NFS 和 iSCSI)有相同的访问模式,则一个要求这个模式的声明可能会与其中任何一个进行匹配。不同的卷类型之间没有匹配顺序,在同时匹配时也无法选择特定的一个卷类型。
所有有相同模式的卷都被分组,然后按大小(由小到大)进行排序。绑定程序会获取具有匹配模式的组群,并按容量顺序进行查找,直到找到一个大小匹配的项。。
卷访问模式描述了卷功能。它们不会被强制限制。存储供应商会最终负责处理由于资源使用无效导致的运行时错误。供应商中的错误会在运行时作为挂载错误显示。
下表列出了访问模式:
访问模式 | CLI 缩写 | 描述 |
---|---|---|
ReadWriteOnce |
| 卷只可以被一个节点以读写模式挂载。 |
ReadWriteOncePod [1] |
| 卷可以被一个单独的节点上的单个 pod 以读写模式挂载。 |
- RWOP 使用 SELinux 挂载功能。此功能依赖于驱动程序,在 ODF、AWS EBS、Azure Disk、GCP PD、IBM Cloud Block Storage 卷、Cinder 和 vSphere 中默认启用。如需第三方驱动程序,请联系您的存储厂商。
卷插件 | ReadWriteOnce [1] | ReadWriteOncePod | ReadOnlyMany | ReadWriteMany |
---|---|---|---|---|
AWS EBS [2] |
✅ |
✅ |
|
|
AWS EFS |
✅ |
✅ |
✅ |
✅ |
GCP 持久性磁盘 |
✅ |
✅ |
|
|
GCP Filestore |
✅ |
✅ |
✅ |
✅ |
LVM 存储 |
✅ |
✅ |
|
|
- ReadWriteOnce(RWO)卷不能挂载到多个节点上。如果节点失败,系统不允许将附加的 RWO 卷挂载到新节点上,因为它已经分配给了故障节点。如果因此遇到多附件错误消息,请强制在关闭或崩溃的节点上删除 pod,以避免关键工作负载中的数据丢失,例如在附加动态持久性卷时。
- 为依赖 AWS EBS 的 pod 使用重新创建的部署策略。
- 只有原始块卷支持 ReadWriteMany (RWX) 访问模式用于光纤通道和 iSCSI。如需更多信息,请参阅 "Block volume support"。
3.3.4. 阶段
卷可以处于以下几个阶段:
阶段 | 描述 |
---|---|
Available | 可用资源,还未绑定到任何声明。 |
Bound | 卷已绑定到一个声明。 |
Released | 以前使用这个卷的声明已被删除,但该资源还没有被集群重新声明。 |
Failed | 卷的自动重新声明失败。 |
您可以运行以下命令来查看绑定到 PV 的 PVC 名称:
$ oc get pv <pv-claim>
3.3.4.1. 挂载选项
您可以使用属性 mountOptions
在挂载 PV 时指定挂载选项。
例如:
挂载选项示例
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0001
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
mountOptions: 1
- nfsvers=4.1
nfs:
path: /tmp
server: 172.17.0.2
persistentVolumeReclaimPolicy: Retain
claimRef:
name: claim1
namespace: default
- 1
- 在将 PV 挂载到磁盘时使用指定的挂载选项。
以下 PV 类型支持挂载选项:
- AWS Elastic Block Store (EBS)
- GCE Persistent Disk