3.3. 持久性卷(PV)
每个 PV 都会包括一个 spec 和 status,它们分别代表卷的规格和状态,例如:
PersistentVolume 对象定义示例
您可以运行以下命令来查看绑定到 PV 的 PVC 名称:
oc get pv <pv_name> -o jsonpath='{.spec.claimRef.name}'
$ oc get pv <pv_name> -o jsonpath='{.spec.claimRef.name}'
3.3.1. PV 类型 复制链接链接已复制到粘贴板!
Red Hat OpenShift Service on AWS 经典架构支持以下持久性卷存储选项:
- 默认情况下安装的 AWS Elastic Block Store (EBS)。
- AWS Elastic File Store (EFS)
Red Hat OpenShift Service on AWS 经典架构功能,带有来自其他存储供应商的 Kubernetes Container Storage Interface (CSI)兼容卷置备程序。有关 Red Hat OpenShift Service on AWS 经典架构中 CSI 驱动程序的更多信息,请参阅附加资源部分中的 配置 CSI 卷。
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 |
| 卷可以被一个单独的节点上的单个 pod 以读写模式挂载。 |
| 卷插件 | ReadWriteOnce [1] | ReadWriteOncePod | ReadOnlyMany | ReadWriteMany |
|---|---|---|---|---|
| AWS EBS [2] |
✅ |
✅ |
|
|
| AWS EFS |
✅ |
✅ |
✅ |
✅ |
| LVM 存储 |
✅ |
✅ |
|
|
- ReadWriteOnce(RWO)卷不能挂载到多个节点上。如果节点失败,系统不允许将附加的 RWO 卷挂载到新节点上,因为它已经分配给了故障节点。如果因此遇到多附件错误消息,请强制在关闭或崩溃的节点上删除 pod,以避免关键工作负载中的数据丢失,例如在附加动态持久性卷时。
- 为依赖 AWS EBS 的 pod 使用重新创建的部署策略。
-
只有 raw 块卷支持 Fibre Channel 和 iSCSI 的
ReadWriteMany(RWX)访问模式。如需更多信息,请参阅 "Block volume support"。 对于 GCP hyperdisk-balanced 磁盘:
支持的访问模式有:
-
ReadWriteOnce -
ReadWriteMany
-
-
对于启用了
ReadWriteMany访问模式的磁盘,克隆和快照会被禁用。 -
您可以将
ReadWriteMany中的单个超磁盘卷附加到最多 8 个实例。 -
如果您从所有实例分离磁盘,您只能在
ReadWriteMany中重新定义磁盘大小。 - 其他限制.
3.3.4. 阶段 复制链接链接已复制到粘贴板!
卷可以处于以下几个阶段:
| 阶段 | 描述 |
|---|---|
| Available | 可用资源,还未绑定到任何声明。 |
| Bound | 卷已绑定到一个声明。 |
| Released | 以前使用这个卷的声明已被删除,但该资源还没有被集群重新声明。 |
| Failed | 卷的自动重新声明失败。 |
3.3.4.1. 最后的阶段过渡时间 复制链接链接已复制到粘贴板!
LastPhaseTransitionTime 字段具有时间戳,每次将持久性卷(PV)转换为不同的阶段(pv.Status.Phase)时更新。要查找 PV 最后一次阶段转换的时间,请运行以下命令:
oc get pv <pv_name> -o json | jq '.status.lastPhaseTransitionTime'
$ oc get pv <pv_name> -o json | jq '.status.lastPhaseTransitionTime'
- 1
- 指定您要看到最后一次阶段转换的 PV 名称。
3.3.4.2. 挂载选项 复制链接链接已复制到粘贴板!
您可以使用属性 mountOptions 在挂载 PV 时指定挂载选项。
例如:
挂载选项示例
- 1
- 在将 PV 挂载到磁盘时使用指定的挂载选项。
以下 PV 类型支持挂载选项:
- AWS Elastic Block Store (EBS)
- AWS Elastic File Storage (EFS)