纳管持久卷

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

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


纳管卷供应支持将已有存储资源纳管至Kubernetes,不允许将一个存储资源纳管多次和针对同一个存储资源进行并发删除/创建操作。 当同一个存储资源被多个集群纳管时,在单个集群中针对该纳管卷的操作仅在当前集群内生效,不会同步到其他集群中,需要使用者自行在其他集群中对该纳管卷进行数据同步操作。 例如:在某一集群中对PVC进行扩容时,其他集群对应的PVC不会自动扩容,需要在其他集群中手动根据 扩容持久卷 中的扩容命令进行扩容。

配置说明

请根据以下步骤纳管使用持久卷:

前置准备

  • 已在CSI中注册需要纳管卷所在存储。
  • 已登录存储设备获取需要纳管卷的名称和容量。
  • 已完成StorageClass的配置,参考 配置存储类 (关注表格中的“纳管卷是否生效”字段)。

配置PVC

  1. 准备PVC配置文件mypvc.yaml,示例如下,其他配置参数请参考 表1

    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。

表 1 纳管持久卷PVC参数说明

参数

说明

必选参数

默认值

备注

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。

-

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版本以上支持。Kubernetes 1.29版本以下需要参考开启ReadWriteOncePod功能门章节开启该特性。
  • RWX支持情况如下:
    • NAS存储:所有卷均支持。
    • SAN存储:仅volumeMode设置为Block的卷支持。

使用PVC

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