3.4. 持久性卷声明 (PVC)


每个 PersistentVolumeClaim 对象都会包括一个 specstatus,它们分别代表了声明的规格和状态。例如:

PersistentVolumeClaim 对象定义示例

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim 
1

spec:
  accessModes:
    - ReadWriteOnce 
2

  resources:
    requests:
      storage: 8Gi 
3

  storageClassName: gold 
4

status:
  ...
Copy to Clipboard Toggle word wrap

1
PVC 的名称。
2
访问模式,用来指定读写权限及挂载权限。
3
PVC 可用的存储量。
4
声明所需的 StorageClass 的名称。

3.4.1. 存储类

另外,通过在 storageClassName 属性中指定存储类的名称,声明可以请求一个特定的存储类。只有具有请求的类的 PV( storageClassName的值与 PVC 中的值相同)才会与 PVC 绑定。集群管理员可配置动态置备程序为一个或多个存储类提供服务。集群管理员可根据需要创建与 PVC 的规格匹配的 PV。

重要

根据使用的平台,Cluster Storage Operator 可能会安装一个默认的存储类。此存储类由 Operator 拥有和控制。不能在定义注解和标签之外将其删除或修改。如果需要实现不同的行为,则必须定义自定义存储类。

集群管理员也可以为所有 PVC 设置默认存储类。当配置了默认存储类时, PVC 必须明确要求将存储类 StorageClassstorageClassName设为 "", 以便绑定到没有存储类的 PV。

注意

如果一个以上的存储类被标记为默认,则只能在 storageClassName 被显式指定时才能创建 PVC。因此,应只有一个存储类被设置为默认值。

3.4.2. 访问模式

声明在请求带有特定访问权限的存储时,使用与卷相同的格式。

3.4.3. Resources

象 pod 一样,声明可以请求具体数量的资源。在这种情况下,请求用于存储。同样的资源模型适用于卷和声明。

3.4.4. 声明作为卷

pod 通过将声明作为卷来访问存储。在使用声明时,声明需要和 pod 位于同一个命名空间。集群在 pod 的命名空间中找到声明,并使用它来使用这个声明后台的PersistentVolume。卷被挂载到主机和 pod 中,例如:

挂载卷到主机和 pod 示例

kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: dockerfile/nginx
      volumeMounts:
      - mountPath: "/var/www/html" 
1

        name: mypd 
2

  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: myclaim 
3
Copy to Clipboard Toggle word wrap

1
在 pod 中挂载卷的路径。
2
要挂载的卷的名称。不要挂载到容器 root、/ 或主机和容器中相同的任何路径。如果容器有足够权限,可能会损坏您的主机系统(如主机的 /dev/pts 文件)。使用 /host 挂载主机是安全的。
3
要使用的 PVC 名称(存在于同一命名空间中)。

3.4.5. 查看 PVC 用量统计

您可以查看持久性卷声明 (PVC) 的用量统计。

重要

PVC usage statistics 命令只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

3.4.5.1. 查看 PVC 用量统计所需的用户权限

要查看 PVC 用量统计,您必须具有所需的权限。

使用所需权限登录:

  • 如果您有 admin 特权,请以 admin 身份登录。
  • 如果您没有 admin 权限:

    1. 运行以下命令,创建并向用户添加集群角色:

      $ 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 Toggle word wrap
      1 2
      用户名称。

3.4.5.2. 查看 PVC 用量统计

  • 要查看集群中的统计信息,请运行以下命令:

    $ oc adm top pvc -A
    Copy to Clipboard Toggle word wrap

    命令输出示例

    NAMESPACE     NAME         USAGE(%)
    namespace-1   data-etcd-1  3.82%
    namespace-1   data-etcd-0  3.81%
    namespace-1   data-etcd-2  3.81%
    namespace-2   mypvc-fs-gp3 0.00%
    default       mypvc-fs     98.36%
    Copy to Clipboard Toggle word wrap

  • 要查看指定命名空间的 PVC 用量统计,请运行以下命令:

    $ oc adm top pvc -n <namespace-name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    其中 <namespace-name> 是指定命名空间的名称。

    命令输出示例

    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 Toggle word wrap

    1
    在本例中,指定的命名空间是 namespace-1
  • 要查看指定 PVC 和指定命名空间的用量统计,请运行以下命令:

    $ oc adm top pvc <pvc-name> -n <namespace-name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    其中 <pvc-name> 是指定的 PVC 的名称,<namespace-name> 是指定命名空间的名称。

    命令输出示例

    NAMESPACE   NAME        USAGE(%)
    namespace-1 data-etcd-0 3.81% 
    1
    Copy to Clipboard Toggle word wrap

    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 定义示例

apiVersion: storage.k8s.io/v1beta1
kind: VolumeAttributesClass 
1

metadata:
  name: silver 
2

driverName: ebs.csi.aws.com 
3

parameters:
  iops: "300"
  throughput: "125"
  type: io2 
4

  ...
Copy to Clipboard Toggle word wrap

1
将对象定义为卷属性类。
2
VolumeAttributesClass 的名称。在本例中,它是 "silver"。
3
决定使用什么卷插件置备持久性卷(PV)的置备程序。在本例中,AWS EBS 是 "ebs.csi.aws.com"。
4
磁盘类型。

以下是 GPC PD 的 Volume Attributes Class YAML 文件示例。

VolumeAttributesClass GPC PD 定义示例

apiVersion: storage.k8s.io/v1beta1
kind: VolumeAttributesClass 
1

metadata:
  name: silver 
2

driverName: pd.csi.storage.gke.io 
3

parameters:
  iops: "3000"
  throughput: "150Mi"
  ...
Copy to Clipboard Toggle word wrap

1
将对象定义为卷属性类。
2
VolumeAttributesClass 的名称。在本例中,它是 "silver"。
3
决定使用什么卷插件置备持久性卷(PV)的置备程序。在本例中,GPC PD 的 "pd.csi.storage.gke.io" 是 "pd.csi.storage.gke.io"。

3.4.6.4. 将卷属性类应用到 PVC

除了新创建的 PVC 外,您还可以使用卷属性类更新现有的绑定 PVC。

将卷属性类应用到 PVC:

  • 将 PVC 的 volumeAttributesClassName 参数设置为 Volume Attributes Class 的名称:

    指定卷属性类的 PVC 定义示例

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: test-pv-claim
    spec:volumeAttributesClassName: silver 
    1
    Copy to Clipboard Toggle word wrap

    1
    指定为这个 PVC 使用卷属性类 "silver"。

3.4.6.5. 删除卷属性类

在 PVC 使用时,您无法删除卷属性类。

如果您在 PVC 仍然在使用时尝试删除卷属性类,则命令不会完成,直到所有使用 Volume Attributes Class 的资源都被更新以不使用它。

删除卷属性类:

  1. 运行以下命令,搜索使用卷属性类的 PVC:

    $ oc get pvc -A -o jsonpath='{range .items[?(@.spec.volumeAttributesClassName=="<vac-name>")]}{.metadata.name}{"\n"}{end}' 
    1
    Copy to Clipboard Toggle word wrap
    1
    <vac-name> = 卷属性类名称

    命令输出示例

    $ mypvc
    Copy to Clipboard Toggle word wrap

  2. 然后:

    • 在 PVC 的 volumeAttributesClassName 参数中指定不同的卷属性类名称:

      指定卷属性类的 PVC 定义示例

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
      name: mypvc
      spec:volumeAttributesClassName: silver 
      1
      Copy to Clipboard Toggle word wrap

      1
      指定不同的卷属性类。在本例中,"silver"。

      或者

    • 运行以下命令,删除所有指定 Volume Attributes Class 的 PVC:

      $ oc delete pvc <pvc-name> 
      1
      Copy to Clipboard Toggle word wrap
      1
      要删除的 PVC 名称。
  3. 现在,任何 PVC 不再使用卷属性类,请运行以下命令删除卷属性类:

    $ oc delete vac <vac-name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    要删除的卷属性类的名称。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat