3.4. 持久性卷声明 (PVC)
每个 PersistentVolumeClaim
对象都会包括一个 spec
和 status
,它们分别代表了声明的规格和状态。例如:
PersistentVolumeClaim
对象定义示例
3.4.1. 存储类 复制链接链接已复制到粘贴板!
另外,通过在 storageClassName
属性中指定存储类的名称,声明可以请求一个特定的存储类。只有具有请求的类的 PV( storageClassName
的值与 PVC 中的值相同)才会与 PVC 绑定。集群管理员可配置动态置备程序为一个或多个存储类提供服务。集群管理员可根据需要创建与 PVC 的规格匹配的 PV。
根据使用的平台,Cluster Storage Operator 可能会安装一个默认的存储类。此存储类由 Operator 拥有和控制。不能在定义注解和标签之外将其删除或修改。如果需要实现不同的行为,则必须定义自定义存储类。
集群管理员也可以为所有 PVC 设置默认存储类。当配置了默认存储类时, PVC 必须明确要求将存储类 StorageClass
或 storageClassName
设为 ""
, 以便绑定到没有存储类的 PV。
如果一个以上的存储类被标记为默认,则只能在 storageClassName
被显式指定时才能创建 PVC。因此,应只有一个存储类被设置为默认值。
3.4.2. 访问模式 复制链接链接已复制到粘贴板!
声明在请求带有特定访问权限的存储时,使用与卷相同的格式。
3.4.3. Resources 复制链接链接已复制到粘贴板!
象 pod 一样,声明可以请求具体数量的资源。在这种情况下,请求用于存储。同样的资源模型适用于卷和声明。
3.4.4. 声明作为卷 复制链接链接已复制到粘贴板!
pod 通过将声明作为卷来访问存储。在使用声明时,声明需要和 pod 位于同一个命名空间。集群在 pod 的命名空间中找到声明,并使用它来使用这个声明后台的PersistentVolume
。卷被挂载到主机和 pod 中,例如:
挂载卷到主机和 pod 示例
3.4.5. 查看 PVC 用量统计 复制链接链接已复制到粘贴板!
您可以查看持久性卷声明 (PVC) 的用量统计。
PVC usage statistics 命令只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
3.4.5.1. 查看 PVC 用量统计所需的用户权限 复制链接链接已复制到粘贴板!
要查看 PVC 用量统计,您必须具有所需的权限。
使用所需权限登录:
- 如果您有 admin 特权,请以 admin 身份登录。
如果您没有 admin 权限:
运行以下命令,创建并向用户添加集群角色:
oc create clusterrole routes-view --verb=get,list --resource=routes oc adm policy add-cluster-role-to-user routes-view <user-name> oc adm policy add-cluster-role-to-user cluster-monitoring-view <user-name>
$ oc create clusterrole routes-view --verb=get,list --resource=routes $ oc adm policy add-cluster-role-to-user routes-view <user-name>
1 $ oc adm policy add-cluster-role-to-user cluster-monitoring-view <user-name>
2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.5.2. 查看 PVC 用量统计 复制链接链接已复制到粘贴板!
要查看集群中的统计信息,请运行以下命令:
oc adm top pvc -A
$ oc adm top pvc -A
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看指定命名空间的 PVC 用量统计,请运行以下命令:
oc adm top pvc -n <namespace-name>
$ oc adm top pvc -n <namespace-name>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 其中
<namespace-name>
是指定命名空间的名称。
命令输出示例
NAMESPACE NAME USAGE(%) namespace-1 data-etcd-2 3.81% namespace-1 data-etcd-0 3.81% namespace-1 data-etcd-1 3.82%
NAMESPACE NAME USAGE(%) namespace-1 data-etcd-2 3.81%
1 namespace-1 data-etcd-0 3.81% namespace-1 data-etcd-1 3.82%
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在本例中,指定的命名空间是
namespace-1
。
要查看指定 PVC 和指定命名空间的用量统计,请运行以下命令:
oc adm top pvc <pvc-name> -n <namespace-name>
$ oc adm top pvc <pvc-name> -n <namespace-name>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 其中
<pvc-name>
是指定的 PVC 的名称,<namespace-name>
是指定命名空间的名称。
命令输出示例
NAMESPACE NAME USAGE(%) namespace-1 data-etcd-0 3.81%
NAMESPACE NAME USAGE(%) namespace-1 data-etcd-0 3.81%
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在本例中,指定的命名空间是
namespace-1
,指定的 PVC 是data-etcd-0
。
3.4.6. 卷属性类 复制链接链接已复制到粘贴板!
卷属性类为管理员提供了描述它们所提供的存储的"类"的方式。不同的类可能对应于不同的服务质量级别。
卷属性类只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
OpenShift Container Platform 中的卷属性类仅适用于 AWS Elastic Block Storage (EBS) 和 Google Cloud Platform (GCP) 持久磁盘 (PD) 容器存储接口 (CSI)。
您可以将卷属性类应用到持久性卷声明 (PVC)。如果集群中有新卷属性类,如果需要,您可以使用新卷属性类更新 PVC。
卷属性类具有描述属于它们的卷的参数。如果省略了参数,则在卷置备过程中会使用默认值。如果用户使用带有忽略参数的不同 Volume Attributes Class 应用 PVC,则参数的默认值可能会根据 CSI 驱动程序实现使用。如需更多信息,请参阅相关的 CSI 驱动程序文档。
3.4.6.1. 限制: 复制链接链接已复制到粘贴板!
卷属性类有以下限制:
- 使用 GCP PD 时,只有超磁盘平衡的磁盘类型才可以使用卷属性类修改。
-
对于
VolumeAttributesClass
,不能定义超过 512 个参数。 - 参数对象的总长度(包括其键和值)不能超过 256 KiB。
- 如果将卷属性类应用到 PVC,您可以更改该 PVC 应用的卷属性类,但您无法从 PVC 中删除它。要从 PVC 中删除卷属性类,您必须删除 PVC,然后重新创建 PVC。
- 无法编辑卷属性类参数。如果您需要更改 Volume Attributes Class 参数,创建一个带有所需参数的新 Volume Attributes Class,然后将其应用到 PVC。
3.4.6.2. 启用卷属性类 复制链接链接已复制到粘贴板!
默认情况下不启用卷属性类。
要启用卷属性类,请按照使用 FeatureGate 启用 OpenShift Container Platform 功能中的步骤操作。
3.4.6.3. 定义卷属性类 复制链接链接已复制到粘贴板!
以下是 AWS EBS 的 Volume Attributes Class YAML 文件示例。
VolumeAttributesClass
AWE EBS 定义示例
以下是 GPC PD 的 Volume Attributes Class YAML 文件示例。
VolumeAttributesClass
GPC PD 定义示例
3.4.6.4. 将卷属性类应用到 PVC 复制链接链接已复制到粘贴板!
除了新创建的 PVC 外,您还可以使用卷属性类更新现有的绑定 PVC。
将卷属性类应用到 PVC:
将 PVC 的
volumeAttributesClassName
参数设置为 Volume Attributes Class 的名称:指定卷属性类的 PVC 定义示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定为这个 PVC 使用卷属性类 "silver"。
3.4.6.5. 删除卷属性类 复制链接链接已复制到粘贴板!
在 PVC 使用时,您无法删除卷属性类。
如果您在 PVC 仍然在使用时尝试删除卷属性类,则命令不会完成,直到所有使用 Volume Attributes Class 的资源都被更新以不使用它。
删除卷属性类:
运行以下命令,搜索使用卷属性类的 PVC:
oc get pvc -A -o jsonpath='{range .items[?(@.spec.volumeAttributesClassName=="<vac-name>")]}{.metadata.name}{"\n"}{end}'
$ oc get pvc -A -o jsonpath='{range .items[?(@.spec.volumeAttributesClassName=="<vac-name>")]}{.metadata.name}{"\n"}{end}'
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- <vac-name> = 卷属性类名称
命令输出示例
mypvc
$ mypvc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 然后:
在 PVC 的
volumeAttributesClassName
参数中指定不同的卷属性类名称:指定卷属性类的 PVC 定义示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定不同的卷属性类。在本例中,"silver"。
或者
运行以下命令,删除所有指定 Volume Attributes Class 的 PVC:
oc delete pvc <pvc-name>
$ oc delete pvc <pvc-name>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 要删除的 PVC 名称。
现在,任何 PVC 不再使用卷属性类,请运行以下命令删除卷属性类:
oc delete vac <vac-name>
$ oc delete vac <vac-name>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 要删除的卷属性类的名称。