这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

静态卷供应

静态卷供应(Static Volume Provisioning)允许管理员使用已经在存储侧创建的资源做为PV,供集群中的容器使用。

为了完成静态卷供应,需要完成如下两步:

  • 配置PV
  • 配置PVC

前提条件

存储侧已经存在待创建PV所需要的存储资源,如LUN或者文件系统。如果存储资源是文件系统,还需要创建文件系统的共享和客户端信息。

配置PV

  1. 准备PV配置文件mypv.yaml,示例如下,其他配置参数请参考静态卷供应PV参数说明

    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: mypv
    spec:
      volumeMode: Filesystem
      storageClassName: "" # 必须配置为""
      accessModes:
        - ReadWriteOnce
      csi:
        driver: csi.huawei.com # csi驱动名称
        volumeHandle: iscsi-dorado-181.lun0001 # 卷名称
        fsType: xfs # 文件系统类型
      capacity:
        storage: 100Gi
    

    静态卷供应的配置文件中,storageClassName参数必须配置为‘“”’,如果不配置,Kubernetes会使用系统默认的StorageClass。

  2. 执行以下命令,基于准备好的yaml文件创建PV。

    kubectl create -f mypv.yaml
    
  3. 等待一段时间后,执行以下命令,查看已经创建的PV信息。

    kubectl get pv
    

    命令结果示例如下,当PV状态为“Available”时,表明PV创建成功。

    NAME       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM               STORAGECLASS   REASON   AGE
    mypv       100Gi      RWO            Retain           Available                                               4s
    

配置PVC

当PV以静态卷供应的方式创建完成后,可以基于该PV创建PVC,从而供容器使用。

  1. 首先准备PVC配置文件。如下示例是一个使用静态卷供应的PVC配置文件。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: mypvc
    spec:
      storageClassName: ""
      accessModes:
        - ReadWriteOnce
      volumeMode: Filesystem
      resources:
        requests:
          storage: 100Gi
      volumeName: mypv # 对应PV名称
    
  2. 执行以下命令,基于已配置的yaml文件创建PVC。

    kubectl create -f mypvc.yaml
    
  3. 等待一段时间后,执行以下命令,查看已经创建的PVC信息。

    kubectl get pvc
    

    命令结果示例如下,当PVC状态为“Bound“时,表明PVC创建成功。

    NAME        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    mypvc       Bound    pvc-840054d3-1d5b-4153-b73f-826f980abf9e   100Gi      RWO                           12s
    

    • 完成创建PVC操作后,如果长时间后(如一分钟后)PVC的状态是Pending,请参考创建PVC时, PVC的状态为Pending
    • 建议每批次最多批量创建/删除100个PVC。

使用PVC

与动态卷供应使用PVC方式相同。

1 - 静态卷供应PV参数说明

表 1 静态卷供应参数

参数

说明

必选参数

默认值

备注

metadata.name

自定义的PV对象名称。

-

以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字开头和结尾。

spec.volumeMode

卷模式。可选参数。 当使用LUN类型的卷时,支持配置以下类型:

  • Filesystem:本地文件系统。
  • Block:裸设备。

Filesystem

该参数在挂载PV时生效,默认为Filesystem。

  • Filesystem表示在容器通过一个本地文件系统访问PV,本地文件系统类型为指定StorageClass中的fsType字段指定。
  • Block表示使用裸卷的方式访问访问PV。

spec.storageClassName

StorageClass对象名称。必选参数。

-

此处须设置为空字符串(即输入"")。

spec.accessModes

指定卷访问模式。

  • RWO(ReadWriteOnce):卷可以被一个节点以读写方式挂载。 该模式也允许运行在同一节点上的多个 Pod 访问卷。
  • ROX(ReadOnlyMany):卷可以被多个节点以只读方式挂载。
  • RWX(ReadWriteMany):卷可以被多个节点以读写方式挂载。
  • RWOP(ReadWriteOncePod):卷只能被单个 Pod 以读写方式挂载。该特性需要 Kubernetes 1.22 以上版本。

ReadWriteOnce

  • RWO/ROX/RWOP:所有类型卷均支持,RWOPKubernetes 1.22版本以上支持。请参考开启ReadWriteOncePod功能门章节,检查您的Kubernetes集群是否开启该特性。
  • RWX支持情况如下:

spec.csi.driver

CSI驱动名称。

csi.huawei.com

该字段需要指定为安装华为CSI时设置的驱动名称。

spec.csi.volumeHandle

存储资源的唯一标志。必选参数。

格式为:<backendName>.<volume-name>

-

该参数值由以下两部分构成:

  • <backendName>:该卷所在的后端名称,可使用如下命令获取配置的后端信息:

    oceanctl get backend

  • <volume-name>:存储上资源(LUN/文件系统)的名称,可通过DeviceManager查看。

spec.csi.fsType

指定主机文件系统类型。可选参数。支持类型为:

  • ext2
  • ext3
  • ext4
  • xfs

-

如果不设置,默认为ext4。仅当volumeMode配置为“Filesystem”时生效。

spec.capacity.storage

指定卷大小。

100Gi

请确保与存储上对应资源的容量保持一致。Kubernetes并不会调用CSI检查此字段值的正确性,所以在PV容量与存储上对应资源的容量不一致也能被成功创建。

spec.mountOptions.nfsvers

主机侧NFS挂载选项。支持如下挂载选项:

nfsvers:挂载NFS时的协议版本。支持配置的参数值为“3”,“4”,“4.0”,“4.1”和“4.2”。

-

在主机执行mount命令时-o参数后的可选选项。列表格式。

指定NFS版本挂载时,当前支持NFS 3/4.0/4.1/4.2协议(需存储设备支持且开启)。当配置参数为nfsvers=4时,因为操作系统配置的不同,实际挂载可能为NFS 4的最高版本协议,如4.2,当需要使用4.0协议时,建议配置nfsvers=4.0。

spec.mountOptions.acl

DPC命名空间支持ACL功能。DPC客户端支持POSIX ACL、NFSv4 ACL、NT ACL的鉴权行为。

-

acl、aclonlyposix、cnflush、cflush参数描述仅供参考,详细参数说明请参考《OceanStor Pacific系列 产品文档》 > 配置 > 文件服务基础业务配置指南 > 配置基础业务(DPC场景) > 客户端访问DPC共享 > 步骤2。

spec.mountOptions.aclonlyposix

DPC命名空间支持POSIX ACL功能,DPC客户端支持POSIX ACL的鉴权行为。

支持POSIX ACL的协议有:DPC、NFSv3、HDFS。如使用NFSv4 ACL或NT ACL,会导致DPC客户端无法识别该类型的ACL,从而导致该类型的ACL不会生效。

-

aclonlyposix与acl参数同时使用时,仅acl参数生效,即命名空间支持ACL功能。

spec.mountOptions.cnflush

异步刷盘模式,即关闭命名空间下的文件时不会立即刷盘。

-

异步刷盘模式,当文件关闭时不会同步将Cache的数据持久化到存储介质中,而是通过Cache异步刷盘的方式将数据写入存储介质,Cache的后台刷盘将在写业务完成后根据刷盘周期定时刷盘。在多客户端场景下,对同一文件进行并行操作,文件Size的更新会受刷盘周期的影响,即当刷盘动作完成后才会更新文件的Size,更新通常会在数秒内完成。同步I/O不受刷盘周期影响。

spec.mountOptions.cflush

同步刷盘模式,即关闭命名空间下的文件时立即刷盘。

-

默认使用同步刷盘模式。

2 - 静态卷供应PVC参数说明

表 1 PVC参数说明

参数

说明

必选参数

默认值

备注

metadata.name

自定义的PVC对象名称。

-

以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字开头和结尾。

spec.accessModes

指定卷访问模式。

  • RWO(ReadWriteOnce):卷可以被一个节点以读写方式挂载。 该模式也允许运行在同一节点上的多个 Pod 访问卷。
  • ROX(ReadOnlyMany):卷可以被多个节点以只读方式挂载。
  • RWX(ReadWriteMany):卷可以被多个节点以读写方式挂载。
  • RWOP(ReadWriteOncePod):卷只能被单个 Pod 以读写方式挂载。该特性需要 Kubernetes 1.22 以上版本。

ReadWriteOnce

  • RWO/ROX/RWOP:所有类型卷均支持,RWOP需Kubernetes 1.22版本以上支持。请参考开启ReadWriteOncePod功能门章节,检查您的Kubernetes集群是否开启该特性。
  • RWX支持情况如下:

spec.volumeMode

卷模式。

Filesystem

可选, 支持Filesystem或Block, 默认为Filesystem。该参数在创建Pod时生效,其中Filesystem表示在PVC上创建一个文件系统访问存储, Block表示使用裸卷的方式访问存储。

spec.resources.requests.storage

指定待创建卷大小。

-

指定待创建卷大小,格式为***Gi,单位为GiB。

PVC容量的规格取决于存储规格限制和主机规格限制。以OceanStor Dorado 6.1.2/OceanStor Pacific系列 8.1.0对接CentOS 7为例,当使用的是ext4文件系统时,容量限制见表 ext4容量的规格;当使用的是XFS文件系统时,容量限制见表 XFS容量的规格。如果使用的是NFS或者裸设备,容量需满足使用的华为存储设备型号和版本所要求的规格约束。

如果PVC容量不在规格范围内,可能会由于存储规格限制或主机文件系统规格限制导致创建PVC或Pod失败。

在通过静态PV创建PVC时,若PVC容量小于绑定PV容量,最终PVC容量大小为绑定PV容量,若PVC容量大于绑定PV容量,PVC将无法被创建。

spec.volumeName

PV对象名称。

-

静态创建PVC时必选。

spec.storageClassName

StorageClass对象名称。

-

创建PVC时传空字符串,不设置该参数会使用默认的StorageClass对象名称。