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

返回本页常规视图.

使用华为CSI

本章节主要介绍如何使用华为CSI对PV、快照的生命周期进行管理。

  • 使用华为CSI进行卷管理操作期间,请勿删除存储后端。
  • 在映射block卷时,华为CSI会自动创建创建主机、主机组、LUN组等这些卷映射需要的关联对象,以及映射视图。如果手动在存储上创建了这些对象,会影响华为CSI的映射逻辑,请确保在使用华为CSI映射卷前删除这些对象。

1 - PVC管理

根据业务的需求,容器中的文件需要在磁盘上进行持久化。当容器被重建或者重新分配至新的节点时,可以继续使用这些持久化数据。

为了可以将数据持久化到存储设备上,您需要在发放容器时使用持久卷(PersistentVolume,PV)以及持久卷申领(PersistentVolumeClaim,PVC)

  • PV:是Kubernetes集群中的一块存储,可以由管理员事先制备, 或者使用存储类(StorageClass)来动态制备。
  • PVC:是用户对存储的请求。PVC会耗用 PV 资源。PVC可以请求特定的大小和访问模式 (例如,可以要求 PV能够以 ReadWriteOnce、ReadOnlyMany 或 ReadWriteMany 模式之一来挂载,参见访问模式)。

本章将介绍如何使用华为CSI对PV/PVC进行创建、扩容、克隆以及从快照创建PVC。

1.1 - 创建PVC

华为CSI支持在华为存储上创建存储资源(LUN/文件系统),并根据用户的设置供给容器使用。具体支持的特性请参考表 华为企业存储支持的特性及约束或者表 华为分布式存储支持的特性及约束

创建PVC的方式分为动态卷供应和静态卷供应。

  • 动态卷供应不需要事先创建PV,华为CSI会根据StorageClass自动在存储设备上创建PV所需要的资源。并且可以在创建PVC时同时创建PV。
  • 静态卷供应需要管理员事先在存储设备上创建好所需要的资源,通过创建PV的方式使用已存在的资源。并且可以在创建PVC时指定关联的PV。

1.1.1 - 动态卷供应

动态卷供应(Dynamic Volume Provisioning)允许按需创建存储卷。动态卷供应依赖StorageClass对象。 集群管理员可以根据需要定义多个StorageClass对象,在声明PV或者PVC时,指定满足业务要求的StorageClass。华为CSI在从华为存储设备上申请资源时,会根据StorageClass的预置定义,创建满足业务要求的存储资源。

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

  • 配置StorageClass
  • 配置PVC

配置StorageClass

  1. 根据业务需要,参考动态卷供应典型场景StorageClass配置示例动态卷供应StorageClass参数说明,创建StorageClass配置文件,如本例从的mysc.yaml文件。

  2. 执行命令,使用配置文件创建StorageClass。

    kubectl apply -f mysc.yaml
    
  3. 执行命令,查看已创建的StorageClass信息。

    kubectl get sc mysc
    

    命令结果示例如下:

    NAME   PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    mysc   csi.huawei.com   Delete          Immediate           true                   8s
    

配置PVC

  1. 根据业务需要,参考本节描述和PVC配置文件示例,修改具体参数,生成本次需要创建的PVC配置文件,如本例中mypvc.yaml文件。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: mypvc
    spec:
      accessModes:
        - ReadWriteOnce
      volumeMode: Filesystem
      storageClassName: mysc
      resources:
        requests:
          storage: 100Gi
    
  2. 执行命令,使用配置文件创建PVC。

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

    kubectl get pvc mypvc
    

    命令结果示例如下,如果PVC的状态是“Bound”时,则说明该PVC已经创建成功,后续可以被Pod使用。

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

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

使用PVC

在完成PVC创建后,就可以使用PVC来创建Pod。如下示例是一个简单的使用PVC示例,在该示例中,创建的Pod使用了刚刚创建的 mypvc

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers: 
      - image: nginx:alpine
        name: container-0 
        volumeMounts: 
        - mountPath: /tmp
          name: pvc-mypvc 
      restartPolicy: Always 
      volumes: 
      - name: pvc-mypvc 
        persistentVolumeClaim: 
          claimName:  mypvc  # name of PVC

1.1.1.1 - 动态卷供应典型场景StorageClass配置示例

存储类(StorageClass)为管理员提供了描述存储 “类” 的方法。 不同的类型可能会映射到一组不同的能力定义。Kubernetes集群用户可基于StorageClass进行动态卷制备。

使用SAN存储时可参考示例文件/examples/sc-lun.yaml,使用NAS存储时可参考示例文件/examples/sc-fs.yaml。

典型场景下StorageClass配置请参考如下示例:

StorageClass中设置后端和存储池

如果在一个Kubernetes集群中配置了多个华为后端,或者一个华为后端提供多个存储池,建议在StorageClass中配置指定的后端和存储池信息,避免华为CSI随机选择后端和存储池,导致卷所在的存储不符合规划。

SAN存储设置后端和存储池可以参考如下配置示例。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
provisioner: csi.huawei.com
allowVolumeExpansion: true
parameters:
  backend: "san-181" # 存储后端名称
  pool: "pool001" # 存储池名称
  volumeType: lun
  allocType: thin

NAS存储设置后端和存储池可以参考如下配置示例。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
provisioner: csi.huawei.com
allowVolumeExpansion: true
parameters:
  backend: "san-181" # 存储后端名称
  pool: "pool001" # 存储池名称
  volumeType: fs
  allocType: thin
  authClient: "*"

StorageClass中设置NFS访问方式

容器使用NFS文件系统作为存储资源时,可以参考如下配置示例。该示例中,NFS挂载时指定版本为4.1。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
provisioner: csi.huawei.com
parameters:
  backend: nfs-nas-181
  pool: pool001
  volumeType: fs
  allocType: thin
  authClient: "192.168.0.10;192.168.0.0/24;myserver1.test"
mountOptions:
  - nfsvers=4.1 # NFS挂载时指定版本为4.1

StorageClass中设置Dtree类型

容器使用Dtree作为存储资源时,可以参考如下配置示例。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
provisioner: csi.huawei.com
parameters:
  backend: nfs-dtree
  volumeType: dtree # 卷类型配置为 dtree
  allocType: thin
  authClient: "*" 
mountOptions:
  - nfsvers=4.1

StorageClass中设置本地文件系统访问方式

容器使用企业存储或者分布式存储的LUN作为存储资源时,且需要格式化文件系统为本地文件系统时,可以参考如下示例。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
provisioner: csi.huawei.com
parameters:
  backend: iscsi-lun-181
  pool: pool001
  volumeType: lun
  allocType: thin
  fsType: xfs

StorageClass中设置DPC访问方式

当容器使用OceanStor Pacific系列存储,且存储支持DPC协议访问时,可以在StorageClass中配置DPC访问的挂载参数。本例中设置挂载时使用“acl”做鉴权参数,使用“cnflush”为设置异步刷盘模式。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
provisioner: csi.huawei.com
parameters:
  backend: nfs-dpc-101
  pool: pool001
  volumeType: fs
  allocType: thin
  authClient: "*"
mountOptions:
  - acl # 鉴权参数
  - cnflush # 设置异步刷盘模式

StorageClass中设置应用类型

当容器使用OceanStor Dorado存储的LUN作为存储时,如果使用存储默认的应用类型无法满足某些业务的I/O模型要求(如容器对外提供数据库OLAP服务),可以在StorageClass中配置应用类型,提升存储性能。具体需要使用的应用类型请参考对应存储产品的产品文档说明。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
provisioner: csi.huawei.com
parameters:
  backend: iscsi-lun-181
  pool: pool001
  volumeType: lun
  allocType: thin
  fsType: xfs
  applicationType: Oracle_OLAP # 配置应用类型

StorageClass中设置软配额

当容器使用OceanStor Pacific系列存储的文件系统作为存储时,可以在StorageClass中配置软配额信息,可以参考如下配置示例。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
provisioner: csi.huawei.com
parameters:
  backend: nfs-pacific-101
  pool: pool001
  volumeType: fs
  allocType: thin
  authClient: "*"
  storageQuota: '{"spaceQuota": "softQuota", "gracePeriod": 100}' # 配置软配额
mountOptions:
  - nfsvers=3

StorageClass中设置QoS

容器使用企业存储或者分布式存储作为存储资源时,可以为容器使用的存储资源设置QoS,从而保证这些容器对存储读写满足一定的服务等级。

不同型号或版本的存储支持的QoS设置不同,请参考表 支持的QoS配置找到对应存储的配置项。本示例中的后端是OceanStor Dorado存储,其他存储可以参考本例设置。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
provisioner: csi.huawei.com
parameters:
  backend: iscsi-qos-181
  pool: pool001
  volumeType: lun
  allocType: thin
  fsType: xfs
  qos: '{"IOTYPE": 2, "MINIOPS": 1000}' # 配置QoS

  • OceanStor V5 租户用户不支持配置QoS策略。
  • 配置QoS后只能在新建的PVC上生效;对于同名StorageClass已经发放的PVC,不能自动添加QoS

StorageClass中设置双活

容器使用NFS双活文件系统作为存储资源时,可以参考如下配置示例。该示例中,使用的后端是支持双活的后端,且配置“hyperMetro”参数为“true”。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
provisioner: csi.huawei.com
parameters:
  backend: nfs-hypermetro-dorado-181
  pool: pool001
  volumeType: fs
  hyperMetro: "true" # 发放双活卷
  allocType: thin
  authClient: "*"

  • 发放NAS双活卷前,需要在两台存储设备之间配置双活关系,包含远端设备、双活域等,仅支持文件系统双活域工作模式为双活AA模式,配置操作请参考对应存储型号的产品文档。
  • 若存储发生故障,逻辑管理端口可能产生漂移,在漂移状态下删除NAS双活卷后,需手动清理对应的存储资源。

StorageClass中设置挂载目录权限

当需要修改容器内挂载目录的权限时,可以在StorageClass中配置目录权限信息,可以参考如下配置示例。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
provisioner: csi.huawei.com
allowVolumeExpansion: true
parameters:
  volumeType: fs
  allocType: thin
  authClient: "*"
  fsPermission: "777"
  rootSquash: "no_root_squash"  # 该参数仅支持NAS存储
  allSquash: "no_all_squash"   # 该参数仅支持NAS存储

完成StorageClass配置后,进行如下步骤创建StorageClass。

  1. 执行以下命令,基于该yaml文件创建StorageClass。

    kubectl create -f mysc.yaml
    
  2. 执行以下命令,查看当前已经创建的StorageClass信息。

    kubectl get sc
    

    命令结果示例如下。

    NAME   PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    mysc   csi.huawei.com   Delete          Immediate           false                  34s
    

    创建StorageClass后,就可以使用该StorageClass进行创建PV或者PVC。


在StorageClass的使用中请注意如下事项:

  • 针对StorageClass进行的修改将不会在已经创建的PV上生效。您需要删除这些PV,并重新使用修改后的StorageClass创建才能应用修改的参数。

CCE / CCE Agile平台中配置StorageClass

在CCE / CCE Agile平台中创建NAS类型StorageClass,可以参考如下配置示例。其中provisioner保持和values.yaml文件中driverName一致。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
  annotations:
    storageclass.kubernetes.io/storageType: file 
provisioner: csi.oceanstor.com  
allowVolumeExpansion: true
parameters:
  volumeType: fs
  allocType: thin
  authClient: "*"

在CCE / CCE Agile平台中创建Block类型StorageClass,可以参考如下配置示例。其中provisioner保持和values.yaml文件中driverName一致。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
  annotations:
    storageclass.kubernetes.io/storageType: block 
provisioner: csi.oceanstor.com
allowVolumeExpansion: true
parameters:
  volumeType: lun
  allocType: thin

1.1.1.2 - 动态卷供应StorageClass参数说明

表 1 StorageClass配置参数说明

参数

说明

必选参数

默认值

备注

metadata.name

自定义的StorageClass对象名称。

-

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

provisioner

制备器名称。

csi.huawei.com

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

取值和values.yaml文件中driverName一致。

reclaimPolicy

回收策略。支持如下类型:

  • Delete:自动回收资源。
  • Retain:手动回收资源

Delete

  • Delete:删除PV/PVC时会关联删除存储上的资源。
  • Retain:删除PV/PVC时不会删除存储上的资源。

allowVolumeExpansion

是否允许卷扩展。参数设置为true 时,使用该StorageClass的PV可以进行扩容操作。

false

此功能仅可用于扩容PV,不能用于缩容PV。

扩容PV功能在Kubernetes 1.14 (alpha)后才支持

parameters.backend

待创建资源所在的后端名称。

-

如果不设置,华为CSI随机选择一个满足容量要求的后端创建资源。

建议指定后端,确保创建的资源在预期的后端上。

parameters.pool

待创建资源所在的存储资源池名称。如果设置,则必须设置parameters.backend。

-

如果不设置,华为CSI会在所选后端上随机选择一个满足容量要求的存储池创建资源。建议指定存储池,确保创建的资源在预期的存储池上。

parameters.volumeType

待创建卷类型。支持如下类型:

  • lun:存储侧发放的资源是LUN。
  • fs:存储侧发放的资源是文件系统。
  • dtree:存储侧发放的资源是Dtree类型的卷

-

  • 使用NAS存储时,必须配置为fs。
  • 使用SAN存储时,必须配置为lun。
  • 使用Dtree类型的NAS存储时,必须配置为dtree

parameters.allocType

待创建卷的分配类型。支持如下类型:

  • thin:创建时不会分配所有需要的空间,而是根据使用情况动态分配。
  • thick:创建时分配所有需要的空间。

-

传空相当于传thin,创建时不会分配所有需要的空间,而是根据使用情况动态分配。

OceanStor Dorado/OceanStor Dorado V3 不支持thick

parameters.fsType

主机文件系统类型。支持类型为:

  • ext2
  • ext3
  • ext4
  • xfs

ext4

仅当StorageClass的volumeType设置为“lun”,且PVC的volumeMode配置为“Filesystem”时生效。

parameters.authClient

可访问该卷的NFS客户端IP地址信息,在指定volumeType为“fs”时必选。

支持输入客户端主机名称(建议使用全称域名)、客户端IP地址、客户端IP地址段。

条件必选

-

可以使用“*”表示任意客户端。当您不确定访问客户端IP信息时,建议使用“*”防止客户端访问被存储拒绝。

当使用客户端主机名称时建议使用全称域名。

IP地址支持IPv4、IPv6地址或两者的混合IP地址。

可以同时输入多个主机名称、IP地址或IP地址段,以英文分号,空格或按回车键隔开。如示例:"192.168.0.10;192.168.0.0/24;myserver1.test"

parameters.cloneSpeed

克隆速度。支持配置为1~4。

3

4速度最快。配置克隆PVC或从快照创建PVC时生效,参考克隆PVC从快照创建PVC

parameters.applicationType

后端为OceanStor Dorado存储时,指定创建LUN/NAS时的应用类型名称。

-

  • “volumeType”为“lun”时,在DeviceManager管理界面,选择“服务 > 块服务 > LUN组 > LUN > 创建 > 应用类型”,获取应用类型名称。
  • “volumeType”为“fs”时,在DeviceManager管理界面,选择“服务 > 文件服务 > 文件系统 > 创建 > 应用类型”,获取应用类型名称。

parameters.qos

PV在存储侧的LUN/NAS的QoS设置。

配置项值是字典格式的JSON字符串(字符串两边由单引号修饰,字典key由双引号修饰)。如:'{"maxMBPS": 999, "maxIOPS": 999}'

-

支持的QoS配置请参考表2说明。

parameters.storageQuota

PV在存储侧配额设置。仅在对接OceanStor Pacific系列存储使用NAS时生效。

配置项值是字典格式的JSON字符串(字符串两边由单引号修饰,字典key由双引号修饰)。如:'{"spaceQuota": "softQuota", "gracePeriod": 100}'

-

支持的配额配置请参考表3说明。

parameters.hyperMetro

是否创建双活卷。当使用的后端是双活类型的后端需要配置。

  • "true":创建的卷为双活卷。对接存储后端为双活后端时,该值必须为true。
  • "false":创建的卷为普通卷。

条件必选

false

当使用的后端是双活类型的后端,且需要发放双活卷时,设置该参数为"true",若设置为"false",在后端对接的逻辑管理端口漂移的场景下,有业务中断的风险。

parameters.metroPairSyncSpeed

双活Pair同步速率。支持配置为1~4。

可选值:

  • 1:低
  • 2:中
  • 3:高
  • 4:最高

-

配置创建双活卷时生效。

注意:

  • 未配置该参数时,双活Pair存储速率由存储决定。
  • 最高速率同步时可能导致主机时延增大。

parameters.fsPermission

挂载到容器内的目录权限。

-

配置格式参考Linux权限设置,如“777”、“755”等。

支持所有的SAN存储,NAS存储仅支持OceanStor Dorado 、OceanStor、OceanStor Pacific 8.1.2及之后版本的存储设备。

parameters.rootSquash

用于设置是否允许客户端的root权限。

可选值:

  • root_squash:表示不允许客户端以root用户访问,客户端使用root用户访问时映射为匿名用户。
  • no_root_squash:表示允许客户端以root用户访问,保留root用户的权限。

-

仅支持NAS存储。

parameters.allSquash

用于设置是否保留共享目录的UID和GID。

可选值:

  • all_squash:表示共享目录的UID和GID映射为匿名用户。
  • no_all_squash:表示保留共享目录的UID和GID。

-

仅支持NAS存储。

parameters.accesskrb5

用于配置krb5安全协议。

  • read_only:只读
  • read_write:读写
  • none:无权限

-

挂载时,可以在mountOptions中指定参数sec。

parameters.accesskrb5i

用于配置krb5i安全协议。

  • read_only:只读
  • read_write:读写
  • none:无权限

-

挂载时,可以在mountOptions中指定参数sec。

parameters.accesskrb5p

用于配置krb5p安全协议。

  • read_only:只读
  • read_write:读写
  • none:无权限

-

挂载时,可以在mountOptions中指定参数sec。

parameters.snapshotDirectoryVisibility

用于设置快照目录是否可见。

可选值:

  • visible:表示快照目录可见。
  • invisible:表示快照目录不可见。

-

仅支持NAS存储。

parameters.reservedSnapshotSpaceRatio

用于配置快照预留空间。

参数类型:字符串

取值范围:"0"~"50"

-

支持OceanStor Dorado 6.1.5+、OceanStor 6.1.5+的NAS存储。

parameters.description

用于配置创建的文件系统/LUN的描述信息。

参数类型:字符串

长度限制:0-255

-

仅支持企业存储文件系统及LUN。

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。

mountOptions.acl

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

-

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

mountOptions.aclonlyposix

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

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

-

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

mountOptions.cnflush

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

-

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

mountOptions.cflush

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

-

默认使用同步刷盘模式。

mountOptions.sec

用于指定Kerberos 5协议挂载NFS文件系统。

-

  • 使用Kerberos 5协议时,请配置krb5。
  • 使用Kerberos 5i协议时,请配置krb5i。
  • 使用Kerberos 5p协议时,请配置krb5p。
  • Kerberos仅支持NFSv4.0或NFSv4.1

mountOptions.proto

指定NFS挂载时使用的传输协议。

支持配置参数值为:“rdma”。

-

  • 确保存储系统已启用NFS over RDMA。
  • 支持OceanStor Dorado 6.1.7及以上的NAS存储。

mountOptions.port

指定NFS挂载时使用的协议端口

条件必选

-

传输协议方式使用“rdma”时,请设置为:20049。

mountOptions.discard

挂载文件系统时自动触发Trim/Discard操作。该操作会通知块设备释放未使用的块

-

支持xfs、ext4文件系统。

表 2 支持的QoS配置

存储类型

参数名

参数描述

备注

OceanStor V5

IOTYPE

控制读写类型。

可选参数(未明确指定将使用后端存储默认值,具体参考相关存储资料)。

有效值如下:

  • 0:读I/O
  • 1:写I/O
  • 2:读写I/O

MAXBANDWIDTH

最大带宽限制策略。

单位MB/s,有效值为>0的整数。

MINBANDWIDTH

最小带宽保护策略。

单位MB/s,有效值为>0的整数。

MAXIOPS

最大IOPS限制策略。

有效值为>0的整数。

MINIOPS

最小IOPS保护策略。

有效值为>0的整数。

LATENCY

最大时延保护策略。

单位ms,有效值为>0的整数。

OceanStor Dorado V3

IOTYPE

控制读写类型。

有效值如下:

  • 2:读写I/O

MAXBANDWIDTH

最大带宽限制策略。

单位MB/s,整数, 范围1~999999999。

MAXIOPS

最大IOPS限制策略。

类型为整数, 范围100~999999999。

OceanStor Dorado/OceanStor

IOTYPE

控制读写类型。

有效值如下:

  • 2:读写I/O

MAXBANDWIDTH

最大带宽限制策略。

单位MB/s,类型为整数, 范围1~999999999。

MINBANDWIDTH

最小带宽保护策略。

单位MB/s,类型为整数, 范围1~999999999。

MAXIOPS

最大IOPS限制策略。

类型为整数, 范围100~999999999。

MINIOPS

最小IOPS保护策略。

类型为整数, 范围100~999999999。

LATENCY

最大时延保护策略。

单位ms,仅支持配置0.5或1.5。

FusionStorage/OceanStor Pacific系列

maxMBPS

最大带宽限制策略。

必填。有效值为大于0的整数,单位MB/s。最大值请参考存储设备实际限制,如OceanStor Pacific NAS最大值为1073741824。

maxIOPS

最大IOPS限制策略。

必填。有效值为大于0的整数。最大值请参考存储设备实际限制,如OceanStor Pacific NAS最大值为1073741824000。

表 3 支持的配额配置

参数名

参数描述

备注

spaceQuota

文件配额类型。

必选。仅支持配置“softQuota”或者“hardQuota”

gracePeriod

配置软配额时,允许的超限天数。

条件可选,当“spaceQuota”配置为“softQuota”时可选。

类型为整数,支持范围为0~4294967294。

1.1.1.3 - 动态卷供应PVC参数说明

在完成配置StorageClass以后,就可以用该StorageClass来配置PVC。PVC的配置模板请参考华为CSI软件包中的examples目录下的pvc*.yaml文件示例。

表 1 pvc*.yaml文件示例参数说明

参数

说明

必选参数

默认值

备注

metadata.name

自定义的PVC对象名称。

-

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

spec.volumeMode

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

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

Filesystem

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

  • Filesystem表示在容器通过一个本地文件系统访问PV,本地文件系统类型为指定StorageClass中的fsType字段指定, Dtree类型存储也使用此参数进行描述。
  • Block表示使用裸卷的方式访问访问PV。

spec.storageClassName

StorageClass对象名称。

-

业务需要的StorageClass对象名称。

spec.resources.requests.storage

指定待创建卷大小,格式为***Gi,单位为GiB。需要满足大小为512字节的整数倍。

10Gi

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

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

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支持情况如下:

表 2 ext4容量的规格

存储类型

存储规格限制

ext4规格限制

CSI规格限制

OceanStor Dorado 6.1.2

512Ki~256Ti

50Ti

512Ki~50Ti

OceanStor Pacific系列 8.1.0

64Mi~512Ti

50Ti

64Mi~50Ti

表 3 XFS容量的规格

存储类型

存储规格限制

XFS规格限制

CSI规格限制

OceanStor Dorado 6.1.2

512Ki~256Ti

500Ti

512Ki~500Ti

OceanStor Pacific系列 8.1.0

64Mi~512Ti

500Ti

64Mi~500Ti

1.1.2 - 纳管卷供应

纳管卷供应(Manage Volume Provisioning)允许管理员使用已经在存储侧创建的资源做为PV,并能够支持动态卷的特性,例如:扩容,快照,克隆等,属于华为CSI自定义能力。使用该特性可满足如下场景:

  • 容器化应用的改造场景,需要使用已有的存储卷。
  • 重建Kubernetes集群。
  • 容灾场景下,对存储数据进行迁移。

在多Kubernetes集群场景下,使用纳管卷特性对同一存储资源进行管理时,在任一集群中对该资源对应的PVC进行管理操作后,不会同步到其他集群中。 例如:在某一集群中对PVC进行扩容时,其他集群对应的PVC不会自动扩容,需要在其他集群中手动根据扩容PVC中的扩容命令进行扩容。

前提条件

  • 已在CSI中注册需要纳管卷所在存储。
  • 已登录存储设备获取需要纳管卷的名称和容量。

配置StorageClass

  1. 根据业务需要,参考动态卷供应典型场景StorageClass配置示例动态卷供应StorageClass参数说明,创建StorageClass配置文件,如本例从的mysc.yaml文件。

  2. 执行命令,使用配置文件创建StorageClass。

    kubectl apply -f mysc.yaml
    
  3. 执行命令,查看已创建的StorageClass信息。

    kubectl get sc mysc
    

    命令结果示例如下:

    NAME   PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    mysc   csi.huawei.com   Delete          Immediate           true                   8s
    

配置PVC

  1. 根据业务需要,参考本节描述和PVC配置文件示例,修改具体参数,生成本次需要创建的PVC配置文件,如本例中mypvc.yaml文件。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: mypvc
      annotations:
        csi.huawei.com/manageVolumeName: "*"  # 存储资源名称
        csi.huawei.com/manageBackendName: "*" # 存储后端名称
      labels:
        provisioner: csi.huawei.com
    spec:
      accessModes:
        - ReadWriteOnce
      volumeMode: Filesystem
      storageClassName: mysc
      resources:
        requests:
          storage: 100Gi
    
  2. 执行命令,使用配置文件创建PVC。

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

    kubectl get pvc mypvc
    

    命令结果示例如下。如果PVC的状态是“Bound”时,则说明该PVC已经创建成功,后续可以被Pod使用。

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

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

使用PVC

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

1.1.2.1 - 纳管卷供应典型场景StorageClass配置示例

纳管卷供应典型场景下StorageClass配置请参考如下示例:

StorageClass中设置后端和存储池

如果在一个Kubernetes集群中配置了多个华为后端,或者一个华为后端提供多个存储池,建议在StorageClass中配置指定的后端和存储池信息,避免华为CSI随机选择后端和存储池,导致卷所在的存储不符合规划。

SAN存储设置后端和存储池可以参考如下配置示例。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
provisioner: csi.huawei.com
allowVolumeExpansion: true
parameters:
  backend: "iscsi-san-181"
  pool: "pool001"
  volumeType: lun
  allocType: thin

NAS存储设置后端和存储池可以参考如下配置示例。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
provisioner: csi.huawei.com
allowVolumeExpansion: true
parameters:
  backend: "iscsi-nas-181"
  pool: "pool001"
  volumeType: fs
  allocType: thin
  authClient: "*"

StorageClass中设置NFS访问方式

容器使用NFS文件系统作为存储资源时,可以参考如下配置示例。该示例中,NFS挂载时指定版本为4.1。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
provisioner: csi.huawei.com
parameters:
  backend: nfs-nas-181
  pool: pool001
  volumeType: fs
  allocType: thin
mountOptions:
  - nfsvers=4.1 # NFS挂载时指定版本为4.1

StorageClass中设置本地文件系统访问方式

容器使用企业存储或者分布式存储的LUN作为存储资源时,且需要格式化文件系统为本地文件系统时,可以参考如下示例。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
provisioner: csi.huawei.com
parameters:
  backend: iscsi-lun-181
  pool: pool001
  volumeType: lun
  allocType: thin
  fsType: xfs

StorageClass中设置DPC访问方式

当容器使用OceanStor Pacific系列存储,且存储支持DPC协议访问时,可以在StorageClass中配置DPC访问的挂载参数。本例中设置挂载时使用“acl”做鉴权参数,使用“cnflush”为设置异步刷盘模式。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
provisioner: csi.huawei.com
parameters:
  backend: nfs-dpc-101
  pool: pool001
  volumeType: fs
  allocType: thin
  authClient: "*"
mountOptions:
  - acl # 鉴权参数
  - cnflush # 设置异步刷盘模式

StorageClass中设置挂载目录权限

当需要修改容器内挂载目录的权限时,可以在StorageClass中配置目录权限信息,可以参考如下配置示例。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: mysc
provisioner: csi.huawei.com
allowVolumeExpansion: true
parameters:
  volumeType: fs
  allocType: thin
  authClient: "*"
  fsPermission: "777" # 设置目录权限

完成StorageClass配置后,进行如下步骤创建StorageClass。

  1. 执行以下命令,基于该yaml文件创建StorageClass。

    kubectl create -f mysc.yaml
    
  2. 执行以下命令,查看当前已经创建的StorageClass信息。

    kubectl get sc
    

    命令结果示例如下。

    NAME   PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    mysc   csi.huawei.com   Delete          Immediate           false                  34s
    

    创建StorageClass后,就可以使用该StorageClass进行创建PV或者PVC。


在纳管卷供应场景下,StorageClass的使用中请注意如下事项:

  • 针对StorageClass进行的修改将不会在已经创建的PV上生效。您需要删除这些PV,并重新使用修改后的StorageClass创建才能应用修改的参数。

1.1.2.2 - 纳管卷供应StorageClass参数说明

存储类(StorageClass)为管理员提供了描述存储 “类” 的方法。 不同的类型可能会映射到一组不同的能力定义。Kubernetes集群用户可基于StorageClass进行动态卷制备。

StorageClass支持配置如下参数信息。

使用SAN存储时可参考示例文件/examples/sc-lun.yaml,使用NAS存储时可参考示例文件/examples/sc-fs.yaml。

表 1 StorageClass配置参数说明

参数

说明

必选参数

默认值

备注

metadata.name

自定义的StorageClass对象名称。

-

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

provisioner

制备器名称。

csi.huawei.com

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

取值和values.yaml文件中driverName一致。

reclaimPolicy

回收策略。支持如下类型:

  • Delete:自动回收资源。
  • Retain:手动回收资源

-

  • Delete:删除PV/PVC时会关联删除存储上的资源。
  • Retain:删除PV/PVC时不会删除存储上的资源。

allowVolumeExpansion

是否允许卷扩展。参数设置为true 时,使用该StorageClass的PV可以进行扩容操作。

false

此功能仅可用于扩容PV,不能用于缩容PV。

扩容PV功能在Kubernetes 1.14 (alpha)后才支持

parameters.backend

待创建资源所在的后端名称。

-

如果不设置,华为CSI随机选择一个满足容量要求的后端创建资源。

建议指定后端,确保创建的资源在预期的后端上。

parameters.volumeType

待创建卷类型。支持如下类型:

  • lun:存储侧发放的资源是LUN。
  • fs:存储侧发放的资源是文件系统。

-

  • 使用NAS存储时,必须配置为fs。
  • 使用SAN存储时,必须配置为lun。

parameters.fsType

主机文件系统类型。支持类型为:

  • ext2
  • ext3
  • ext4
  • xfs

ext4

仅当StorageClass的volumeType设置为“lun”,且PVC的volumeMode配置为“Filesystem”时生效。

parameters.applicationType

后端为OceanStor Dorado存储时,指定创建LUN/NAS时的应用类型名称。

说明:

若卷纳管前已配置应用类型,applicationType必须与已配置的应用类型保持一致。

-

  • “volumeType”为“lun”时,在DeviceManager管理界面,选择“服务 > 块服务 > LUN组 > LUN > 创建 > 应用类型”,获取应用类型名称。
  • “volumeType”为“fs”时,在DeviceManager管理界面,选择“服务 > 文件服务 > 文件系统 > 创建 > 应用类型”,获取应用类型名称。

parameters.fsPermission

挂载到容器内的目录权限。

-

配置格式参考Linux权限设置,如“777”、“755”等。

当volumeType为lun时,支持配置该字段。

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协议时,建议配置nfsver:ws=4.0。

mountOptions.acl

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

-

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

mountOptions.aclonlyposix

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

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

-

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

mountOptions.cnflush

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

-

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

mountOptions.cflush

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

-

默认使用同步刷盘模式。

mountOptions.sec

用于指定Kerberos 5协议挂载NFS文件系统。

-

  • 使用Kerberos 5协议时,请配置krb5。
  • 使用Kerberos 5i协议时,请配置krb5i。
  • 使用Kerberos 5p协议时,请配置krb5p。
  • Kerberos仅支持NFSv4.0或NFSv4.1

mountOptions.proto

指定NFS挂载时使用的传输协议。

支持配置参数值为:“rdma”。

-

  • 确保存储系统已启用NFS over RDMA。
  • 支持OceanStor Dorado 6.1.7及以上的NAS存储

mountOptions.port

指定NFS挂载时使用的协议端口

条件必选

-

传输协议方式使用“rdma”时,请设置为:20049。

mountOptions.discard

挂载文件系统时自动触发Trim/Discard操作。该操作会通知块设备释放未使用的块

-

支持xfs、ext4文件系统。

1.1.2.3 - 纳管卷供应PVC参数说明

在完成配置StorageClass以后,就可以用该StorageClass来配置PVC。PVC的配置模板请参考华为CSI软件包中的examples目录下的pvc-manager.yaml文件示例。

表 1 pvc-manager.yaml文件示例参数说明

参数

说明

必选参数

默认值

备注

metadata.annotations

PVC对象的注释。配置以下参数:

  • 驱动名称/manageVolumeName:卷在存储侧的名称。
  • 驱动名称/manageBackendName:卷所属后端的名称。

csi.huawei.com/manageVolumeName: * csi.huawei.com/manageBackendName: *

  • 驱动名称获取请参考表4
  • 驱动名称/manageVolumeName:为存储上已有卷的名称,除英文字符外,其他国家字符不支持。
  • 驱动名称/manageBackendName:CSI中存储后端的名称。

可执行oceanctl get backend -n huawei-csi命令获取后端名称。

metadata.labels

PVC对象的标签。

-

格式:provisioner: 安装时指定的驱动名称。

例如 provisioner: csi.huawei.com。

该参数在创建PVC时生效,用于监听PVC资源,获取metadata.annotations信息。

metadata.name

自定义的PVC对象名称。

-

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

spec.volumeMode

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

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

该参数在挂载PV时生效,需要与纳管卷的使用方式保持一致。

  • 如果卷纳管之前是以裸卷方式使用,volumeMode必须配置为Block。
  • 如果卷纳管之前是以ext2/ext3/ext4方式使用,volumeMode必须配置为Filesystem,且StorageClass中fsType必须指定为ext2/ext3/ext4。
  • 如果卷纳管之前是以XFS方式使用,volumeMode必须配置为Filesystem,且StorageClass中fsType必须指定为xfs。

Filesystem

该参数在挂载PV时生效。

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

spec.storageClassName

StorageClass对象名称。

-

StorageClass的配置需要与纳管卷的配置保持一致。

spec.resources.requests.storage

指定待创建卷大小,格式为***Gi,单位为GiB。需要满足大小为512字节的整数倍。

-

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

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

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支持情况如下:

表 2 ext4容量的规格

存储类型

存储规格限制

ext4规格限制

CSI规格限制

OceanStor Dorado 6.1.2

512Ki~256Ti

50Ti

512Ki~50Ti

OceanStor Pacific系列 8.1.0

64Mi~512Ti

50Ti

64Mi~50Ti

表 3 XFS容量的规格

存储类型

存储规格限制

XFS规格限制

CSI规格限制

OceanStor Dorado 6.1.2

512Ki~256Ti

500Ti

512Ki~500Ti

OceanStor Pacific系列 8.1.0

64Mi~512Ti

500Ti

64Mi~500Ti

1.1.3 - 静态卷供应

静态卷供应(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.1.3.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

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

-

默认使用同步刷盘模式。

1.1.3.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对象名称。

1.2 - 扩容PVC

当容器使用的PVC容量不足时,需要对该PVC进行扩容操作。

前提条件

操作步骤

  1. 执行命令,查询StorageClass是否支持扩容。其中,mysc 为需要查看的StorageClass名称。

    kubectl get sc mysc
    

    命令结果示例如下:

    NAME              PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    mysc              csi.huawei.com   Delete          Immediate           true                  172m
    

    如果ALLOWVOLUMEEXPANSION的值为true,表示当前StorageClass已经支持扩容,请跳转至步骤3

  2. 执行以下命令,将“allowVolumeExpansion“的值修改为“true“。其中,mysc 为需要修改的StorageClass名称。

    kubectl patch sc mysc --patch '{"allowVolumeExpansion":true}'
    
  3. 执行命令,查询PVC的StorageClass名称。其中,mypvc 为需要扩容的PVC名称。

    kubectl get pvc mypvc
    

    命令结果示例如下:

    NAME               STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
    mypvc              Bound    pvc-3383be36-537c-4cb1-8f32-a415fa6ba384   2Gi        RW0            mysc              145m
    
  4. 执行以下命令进行扩容。

    kubectl patch pvc mypvc -p '{"spec":{"resources":{"requests":{"storage":"120Gi"}}}}'
    

    其中,"mypvc“是需要扩容的PVC名称,“120Gi”是扩容后的容量大小。请根据实际情况进行替换。

    • PVC容量的规格取决于存储规格限制和主机规格限制。以OceanStor Dorado 6.1.2/OceanStor Pacific系列 8.1.0对接CentOS 7为例,当使用的是ext4文件系统时,容量限制见表 ext4容量的规格;当使用的是XFS文件系统时,容量限制见表 XFS容量的规格。如果使用的是NFS或者裸设备,容量需满足使用的华为存储设备型号和版本所要求的规格约束。
    • 如果PVC容量不在规格范围内,可能会由于存储规格限制或主机文件系统规格限制导致创建PVC或Pod失败。
    • 如果扩容的目标容量超过存储池容量导致扩容失败,请参考PVC扩容的目标容量超过存储池容量导致扩容失败
  5. 执行命令,检查容量修改是否生效。

    kubectl get pvc
    

    命令结果示例如下,如果CAPACITY字段已变更为指定容量,说明扩容成功。

    NAME        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    mypvc       Bound    pvc-3383be36-537c-4cb1-8f32-a415fa6ba384   120Gi       RWO            mysc           24s
    

1.3 - 克隆PVC

本章节描述如何克隆PVC。

在克隆PVC时,需要指定数据源。如下示例是一个简单的克隆PVC示例,在该示例中,使用“mypvc”作为数据源,新创建了一个名叫“myclone”的PVC。

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclone
spec:
  storageClassName: mysc
  dataSource:
    name: mypvc
    kind: PersistentVolumeClaim
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi

  • 指定的storageClassName必须和dataSource中的源卷的StorageClass需一致。
  • 克隆卷的容量必须不小于源卷容量,建议和源卷容量保持一致。

前提条件

系统中已经存在源PVC,且源PVC所在的backend存在支持克隆。支持克隆的存储请参考表 华为企业存储支持的特性及约束表 华为分布式存储支持的特性及约束,支持克隆的Kubernetes版本请参考Kubernetes特性矩阵

操作步骤

  1. 执行以下命令,基于克隆卷的配置文件创建PVC。

    kubectl create -f myclone.yaml
    

1.4 - 从快照创建PVC

本章节描述如何从快照创建PVC。

在创建这个PVC时,需要指定数据源。如下示例是一个简单的从快照创建PVC示例,在该示例中,使用快照“mysnapshot”作为数据源,新创建了一个名叫“myrestore”的PVC。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myrestore
spec:
  storageClassName: mysc
  dataSource:
    name: mysnapshot
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi

  • 指定的storageClassName必须和dataSource中的快照源卷的StorageClass需一致。
  • 克隆卷的容量必须不小于快照容量,建议和快照容量保持一致。

前提条件

系统中已经存在快照,且快照所在的backend存在支持克隆。支持快照创建PVC的存储请参考表 华为企业存储支持的特性及约束表 华为分布式存储支持的特性及约束,支持快照创建PVC的Kubernetes版本请参考Kubernetes特性矩阵

操作步骤

  1. 执行以下命令,基于从快照创建卷的配置文件创建PVC。

    kubectl create -f myrestore.yaml
    

2 - 创建VolumeSnapshot

在Kubernetes中,卷快照(VolumeSnapshot)是一个存储系统上卷的快照。VolumeSnapshot能力为Kubernetes用户提供了一种标准的方式来在指定时间点复制卷的内容,并且不需要创建全新的卷。 例如,这一功能使得数据库管理员能够在执行编辑或删除之类的修改之前对数据库执行备份。

本章将介绍如何使用华为CSI创建VolumeSnapshot。为了完成创建VolumeSnapshot,需要完成如下三步:

  • 检查卷快照依赖组件信息
  • 配置VolumeSnapshotClass
  • 配置VolumeSnapshot

2.1 - 检查卷快照依赖组件信息

如果您需要在容器环境中使用卷快照以及卷快照关联的特性,请通过检查卷快照依赖组件检查您的环境是否部署了卷快照依赖组件以及卷快照api-versions信息。

2.2 - 配置VolumeSnapshotClass

卷快照类(VolumeSnapshotClass)提供了一种在配置VolumeSnapshot时描述存储“类”的方法。每个VolumeSnapshotClass都包含“driver”、“deletionPolicy” 和“parameters”字段, 在需要动态配置属于该类的VolumeSnapshot时使用。

VolumeSnapshotClass对象的名称很重要,是用户可以请求特定类的方式。 管理员在首次创建VolumeSnapshotClass对象时设置类的名称和其他参数, 对象一旦创建就无法更新。

华为CSI使用的VolumeSnapshotClass示例如下:

  • 如果您的环境中api-versions支持v1,请使用以下示例:

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: mysnapclass
    driver: csi.huawei.com
    deletionPolicy: Delete
    
  • 如果您的环境中api-versions支持v1beta1,请使用以下示例:

    apiVersion: snapshot.storage.k8s.io/v1beta1
    kind: VolumeSnapshotClass
    metadata:
      name: mysnapclass
    driver: csi.huawei.com
    deletionPolicy: Delete
    
  • 如果您的环境中api-versions同时支持v1和v1beta1,我们推荐您使用v1版本。

实际参数可以参考表 VolumeSnapshotClass参数说明中的说明修改。由于当前华为CSI还不支持在VolumeSnapshotClass中设置自定义参数(parameters),因此建议只创建一个VolumeSnapshotClass,供所有快照使用。

表 1 VolumeSnapshotClass参数说明

参数

说明

备注

metadata.name

自定义的VolumeSnapshotClass对象名称。

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

driver

driver标识。必填参数。

该字段需要指定为安装华为CSI时设置的驱动名。默认的驱动名为“csi.huawei.com”。

deletionPolicy

快照删除策略。必填参数。可选值为:

  • Delete
  • Retain
  • 如果删除策略是 Delete,那么存储设备上的快照会和VolumeSnapshotContent对象一起删除
  • 如果删除策略是Retain,那么存储设备上的快照和VolumeSnapshotContent对象都会被保留。

前提条件

华为CSI支持快照且运行所依赖的卷快照组件CRD已经安装。具体CRD信息请参考检查卷快照依赖组件章节说明,支持创建VolumeSnapshot的Kubernetes版本请参考表 Kubernetes版本与支持的特性

操作步骤

  1. 执行以下命令,使用已经创建的VolumeSnapshotClass配置文件创建VolumeSnapshotClass。

    kubectl create -f mysnapclass.yaml
    
  2. 执行以下命令,查看已创建的VolumeSnapshotClass信息。

    kubectl get volumesnapshotclass
    

    命令结果示例如下:

    NAME          DRIVER           DELETIONPOLICY   AGE
    mysnapclass   csi.huawei.com   Delete           25s
    

2.3 - 配置VolumeSnapshot

VolumeSnapshot可以通过两种方式进行制备:预制备或动态制备。华为CSI当前仅支持动态制备。本章节将说明如何使用华为CSI动态制备VolumeSnapshot。

VolumeSnapshot的配置文件示例如下:

  • 如果您的环境中api-versions支持v1,请使用以下示例:

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: mysnapshot
    spec:
      volumeSnapshotClassName: mysnapclass
      source:
        persistentVolumeClaimName: mypvc
    
  • 如果您的环境中api-versions支持v1beta1,请使用以下示例:

    apiVersion: snapshot.storage.k8s.io/v1beta1
    kind: VolumeSnapshot
    metadata:
      name: mysnapshot
    spec:
      volumeSnapshotClassName: mysnapclass
      source:
        persistentVolumeClaimName: mypvc
    
  • VolumeSnapshot中api-versions信息,请和创建VolumeSnapshotClass使用的版本保持一致。

实际参数可以参考表 VolumeSnapshot参数说明中的说明修改。

表 1 VolumeSnapshot参数说明

参数

说明

备注

metadata.name

自定义的VolumeSnapshot对象名称。

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

spec.volumeSnapshotClassName

VolumeSnapshotClass对象名称。

--

spec.source.persistentVolumeClaimName

源PVC对象名称。

快照源PVC对应的名称

前提条件

操作步骤

  1. 执行以下命令,使用已经创建的VolumeSnapshot配置文件创建VolumeSnapshot。

    kubectl create -f mysnapshot.yaml
    
  2. 执行以下命令,查看已创建的VolumeSnapshot信息。

    kubectl get volumesnapshot
    

    命令结果示例如下:

    NAME         READYTOUSE   SOURCEPVC   SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS   SNAPSHOTCONTENT                                    CREATIONTIME   AGE
    mysnapshot   true         mypvc                               100Gi         mysnapclass     snapcontent-1009af0a-24c2-4435-861c-516224503f2d   <invalid>      78s