这是本节的多页打印视图。
点击此处打印.
返回本页常规视图.
持久卷管理
根据业务的需求,容器中的文件需要在磁盘上进行持久化。当容器被重建或者重新分配至新的节点时,可以继续使用这些持久化数据。
为了可以将数据持久化到存储设备上,您需要在发放容器时使用
持久卷(PersistentVolume,PV)
以及
持久卷申领(PersistentVolumeClaim,PVC)
。
- PV:是Kubernetes集群中的一块存储,可以由管理员事先制备, 或者使用
存储类(StorageClass)
来动态制备。
- PVC:是用户对存储的请求。PVC会耗用 PV 资源。PVC可以请求特定的大小和访问模式 (例如,可以要求 PV能够以 ReadWriteOnce、ReadOnlyMany 或 ReadWriteMany 模式之一来挂载,参见
访问模式
)。
本章将介绍如何使用华为CSI对PV/PVC进行创建、扩容、克隆等操作。
1 - 配置持久卷
华为CSI支持在华为存储上创建存储资源(LUN/文件系统),并根据用户的设置供给容器使用。具体支持的特性请参考存储自身的
特性表
。
配置持久卷的方式按类型可分为配置动态持久卷、配置静态持久卷和纳管持久卷。
- 配置动态持久卷不需要事先创建PV,华为CSI会根据StorageClass自动在存储设备上创建PV所需要的资源。并且可以在创建PVC时同时创建PV。
- 配置静态持久卷需要管理员事先在存储设备上创建好所需要的资源,通过创建PV的方式使用已存在的资源。并且可以在创建PVC时指定关联的PV。
- 纳管持久卷不需要事先创建PV,通过在PVC中指定StorageClass与存储上的资源信息,在创建PVC时同时创建PV,并将已有存储资源纳管至集群。
1.1 - 配置动态持久卷
动态卷供应(Dynamic Volume Provisioning)允许按需创建存储卷。动态卷供应依赖StorageClass对象。 集群管理员可以根据需要定义多个StorageClass对象,在声明PV或者PVC时,指定满足业务要求的StorageClass。华为CSI在从华为存储设备上申请资源时,会根据StorageClass的预置定义,创建满足业务要求的存储资源。
配置说明
请根据以下步骤配置使用动态持久卷:
前置准备
在开始配置动态持久卷前,请参考
配置存储类
,完成StorageClass的配置。
配置PVC
准备PVC配置文件mypvc.yaml,示例如下,其他配置参数请参考
表1
。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
storageClassName: mysc
resources:
requests:
storage: 100Gi
执行命令,使用配置文件创建PVC。
kubectl create -f mypvc.yaml
等待一段时间后,执行以下命令,查看已经创建的PVC信息。
命令结果示例如下,如果PVC的状态是“Bound”时,则说明该PVC已经创建成功,后续可以被Pod使用。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mypvc Bound pvc-840054d3-1d5b-4153-b73f-826f980abf9e 100Gi RWO mysc 12s

表 1 配置动态卷持久卷PVC参数说明
参数 | 说明 | 必选参数 | 默认值 | 备注 |
---|
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。 | 是 | 10Gi | 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:所有类型卷均支持,RWOP需Kubernetes 1.22版本以上支持。Kubernetes 1.29版本以下需要参考开启ReadWriteOncePod功能门章节开启该特性。
- RWX支持情况如下:
- NAS存储:所有卷均支持。
- SAN存储:仅volumeMode设置为Block的卷支持。
|
表 2 ext4容量的规格
存储类型 | 存储规格限制 | ext4规格限制 | CSI规格限制 |
---|
OceanStor Dorado | 512Ki~256Ti | 50Ti | 512Ki~50Ti |
OceanStor Pacific系列 | 64Mi~512Ti | 50Ti | 64Mi~50Ti |
OceanDisk | 512Ki~256Ti | 50Ti | 512Ki~50Ti |
表 3 XFS容量的规格
存储类型 | 存储规格限制 | XFS规格限制 | CSI规格限制 |
---|
OceanStor Dorado | 512Ki~256Ti | 500Ti | 512Ki~256Ti |
OceanStor Pacific系列 | 64Mi~512Ti | 500Ti | 64Mi~500Ti |
OceanDisk | 512Ki~256Ti | 500Ti | 512Ki~256Ti |
使用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

若使用PVC批量创建Pod,Pod长时间处于ContainerCreating状态,且huawei-csi-node服务状态为OOMKilled,说明当前huawei-csi-node服务内存不足。请根据
表1
,将huawei-csi-node内存限制增大。
1.2 - 配置静态持久卷
静态卷供应(Static Volume Provisioning)允许管理员使用已经在存储侧创建的资源做为PV,供集群中的容器使用。
配置说明
请根据以下步骤配置使用静态持久卷:
前置准备
存储侧已经存在待创建PV所需要的存储资源,如LUN或者文件系统。如果存储资源是文件系统,还需要创建文件系统的共享和客户端信息。
配置PV
准备PV配置文件mypv.yaml,示例如下,其他配置参数请参考
表1
。
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。
执行以下命令,基于准备好的yaml文件创建PV。
kubectl create -f mypv.yaml
等待一段时间后,执行以下命令,查看已经创建的PV信息。
命令结果示例如下,当PV状态为“Available”时,表明PV创建成功。
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mypv 100Gi RWO Retain Available 4s
表 1 配置静态卷持久卷PV参数说明
参数 | 说明 | 必选参数 | 默认值 | 备注 |
---|
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:所有类型卷均支持,RWOP需Kubernetes 1.22版本以上支持。请参考开启ReadWriteOncePod功能门章节,检查您的Kubernetes集群是否开启该特性。
- RWX支持情况如下:
- NAS存储:所有卷均支持。
- SAN存储:仅volumeMode设置为Block的卷支持。
|
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 | 指定主机文件系统类型。可选参数。支持类型为: | 否 | - | 如果不设置,默认为ext4。仅当volumeMode配置为“Filesystem”时生效。 |
spec.csi.volumeAttributes.dTreeParentName | 卷资源类型为Dtree时,其父文件系统名称。 | 条件必选 | - | 纳管对象为Dtree资源,且存储后端中未配置parentname参数时,必须配置该参数。 若仅在PV中配置了dTreeParentName,而对应的存储后端中未配置parentname时,要求在安装CSI时根据表5将CSIDriverObject.attachRequired设置为true。 |
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 | 同步刷盘模式,即关闭命名空间下的文件时立即刷盘。 | 否 | - | 默认使用同步刷盘模式。 |
配置PVC
当PV以静态卷供应的方式创建完成后,可以基于该PV创建PVC,从而供容器使用。
准备PVC配置文件mypvc.yaml,示例如下,其他配置参数请参考
表2
。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mypvc
spec:
storageClassName: ""
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 100Gi
volumeName: mypv # 对应PV名称
执行以下命令,基于已配置的yaml文件创建PVC。
kubectl create -f mypvc.yaml
等待一段时间后,执行以下命令,查看已经创建的PVC信息。
命令结果示例如下,当PVC状态为“Bound“时,表明PVC创建成功。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mypvc Bound pvc-840054d3-1d5b-4153-b73f-826f980abf9e 100Gi RWO 12s

表 2 配置静态持久卷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版本以上支持。Kubernetes 1.29版本以下需要参考开启ReadWriteOncePod功能门章节开启该特性。
- RWX支持情况如下:
- NAS存储:所有卷均支持。
- SAN存储:仅volumeMode设置为Block的卷支持。
|
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文件系统时,容量限制见表2;当使用的是XFS文件系统时,容量限制见表3。如果使用的是NFS或者裸设备,容量需满足使用的华为存储设备型号和版本所要求的规格约束。 如果PVC容量不在规格范围内,可能会由于存储规格限制或主机文件系统规格限制导致创建PVC或Pod失败。 在通过静态PV创建PVC时,若PVC容量小于绑定PV容量,最终PVC容量大小为绑定PV容量,若PVC容量大于绑定PV容量,PVC将无法被创建。 |
spec.volumeName | PV对象名称。 | 是 | - | 静态创建PVC时必选。 |
spec.storageClassName | StorageClass对象名称。 | 是 | - | 创建PVC时传空字符串,不设置该参数会使用默认的StorageClass对象名称。 |
使用PVC
与动态卷供应
使用PVC
方式相同。
1.3 - 纳管持久卷
纳管卷供应(Manage Volume Provisioning)允许管理员使用已经在存储侧创建的资源做为PV,并能够支持动态卷的特性,例如:扩容,快照,克隆等,属于华为CSI自定义能力。使用该特性可满足如下场景:
- 容器化应用的改造场景,需要使用已有的存储卷。
- 重建Kubernetes集群。
- 容灾场景下,对存储数据进行迁移。

纳管卷供应支持将已有存储资源纳管至Kubernetes,不允许将一个存储资源纳管多次和针对同一个存储资源进行并发删除/创建操作。
当同一个存储资源被多个集群纳管时,在单个集群中针对该纳管卷的操作仅在当前集群内生效,不会同步到其他集群中,需要使用者自行在其他集群中对该纳管卷进行数据同步操作。
例如:在某一集群中对PVC进行扩容时,其他集群对应的PVC不会自动扩容,需要在其他集群中手动根据
扩容持久卷
中的扩容命令进行扩容。
配置说明
请根据以下步骤纳管使用持久卷:
前置准备
- 已在CSI中注册需要纳管卷所在存储。
- 已登录存储设备获取需要纳管卷的名称和容量。
- 已完成StorageClass的配置,参考
配置存储类
(关注表格中的“纳管卷是否生效”字段)。
配置PVC
准备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
执行命令,使用配置文件创建PVC。
kubectl create -f mypvc.yaml
等待一段时间后,执行以下命令,查看已经创建的PVC信息。
命令结果示例如下,如果PVC的状态是“Bound”时,则说明该PVC已经创建成功,后续可以被Pod使用。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mypvc Bound pvc-840054d3-1d5b-4153-b73f-826f980abf9e 100Gi RWO mysc 12s

表 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:所有类型卷均支持,RWOP需Kubernetes 1.22版本以上支持。Kubernetes 1.29版本以下需要参考开启ReadWriteOncePod功能门章节开启该特性。
- RWX支持情况如下:
- NAS存储:所有卷均支持。
- SAN存储:仅volumeMode设置为Block的卷支持。
|
使用PVC
与动态卷供应
使用PVC
方式相同。
2.1 - 扩容持久卷

OceanStor V700R001C10和OceanStor Dorado V700R001C10及以后版本,扩容后文件系统的容量存在最小限制,具体限制值参考对应存储的产品手册。
当容器使用的PVC容量不足时,需要对该PVC进行扩容操作。
前提条件
PVC已创建,所在的backend存在且支持扩容。
支持扩容的存储请参考
兼容性和特性
章节中的特性表格,支持扩容的Kubernetes版本请参考
Kubernetes特性矩阵
。
huawei-csi-controller启用了csi-resizer服务。
kubectl describe deploy huawei-csi-controller -n huawei-csi | grep csi-resizer
命令回显示例如下则说明已启用csi-resizer服务。
csi-resizer:
Image: k8s.gcr.io/sig-storage/csi-resizer:v1.9.0
操作步骤
执行命令,查询StorageClass是否支持扩容。其中,mysc 为需要查看的StorageClass名称。
命令结果示例如下:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
mysc csi.huawei.com Delete Immediate true 172m
如果ALLOWVOLUMEEXPANSION的值为true,表示当前StorageClass已经支持扩容,请跳转至步骤
3
。
执行以下命令,将“allowVolumeExpansion“的值修改为“true“。其中,mysc 为需要修改的StorageClass名称。
kubectl patch sc mysc --patch '{"allowVolumeExpansion":true}'
执行命令,查询PVC的StorageClass名称。其中,mypvc 为需要扩容的PVC名称。
命令结果示例如下:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mypvc Bound pvc-3383be36-537c-4cb1-8f32-a415fa6ba384 2Gi RW0 mysc 145m
执行以下命令进行扩容。
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文件系统时,容量限制见
表2
;当使用的是XFS文件系统时,容量限制见
表3
。如果使用的是NFS或者裸设备,容量需满足使用的华为存储设备型号和版本所要求的规格约束。
- 如果PVC容量不在规格范围内,可能会由于存储规格限制或主机文件系统规格限制导致创建PVC或Pod失败。
- 如果扩容的目标容量超过存储池容量导致扩容失败,请参考
PVC扩容的目标容量超过存储池容量导致扩容失败
。
执行命令,检查容量修改是否生效。
命令结果示例如下,如果CAPACITY字段已变更为指定容量,说明扩容成功。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mypvc Bound pvc-3383be36-537c-4cb1-8f32-a415fa6ba384 120Gi RWO mysc 24s
2.2 - 克隆持久卷
本章节描述如何克隆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特性矩阵
。
操作步骤
执行以下命令,基于克隆卷的配置文件创建PVC。
kubectl create -f myclone.yaml
2.3.1 - 开启PVC变更特性
当前华为CSI安装时默认关闭PVC变更特性,如需要使用该特性,请按照以下步骤开启。
2.3.2.1 - 创建PVC变更
前提条件
待变更PVC关联的存储后端已经组成双活存储后端,若未组成双活存储后端,请参考
更新存储后端信息
章节配置。
PVC变更文件说明
PVC变更文件样例模板为/examples/volumemodifyclaim.yaml,具体配置项如下表所示:
表 1 参数说明
参数 | 描述 | 必选参数 | 默认值 | 备注 |
---|
apiVersion | API组,string类型 | 是 | xuanwu.huawei.io/v1 | 固定填写xuanwu.huawei.io/v1 |
kind | 资源的类型,string类型 | 是 | VolumeModifyClaim | 固定填写VolumeModifyClaim |
metadata.name | 集群资源对象的名称,string类型 | 是 | - | 名称必须满足DNS 子域名的命名规则,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以小写字母数字字符开头和结尾,最大长度不超过63个字符。 注意:在PVC变更过程中,会对原StorageClass进行备份,备份StorageClass的名称为“<原StorageClass名称><VolumeModifyClaim名称>”,且需符合StorageClass命名规则。 |
spec.source.kind | 数据源类型,string类型 | 是 | StorageClass | 仅支持设置为:StorageClass |
spec.source.name | 数据源名称,string类型 | 是 | - | 仅支持设置StorageClass名称 |
spec.parameters.hyperMetro | 是否将普通卷变更为双活卷。当前取值仅支持"true"。 | 是 | - | 仅支持主站点普通存储卷变更为双活存储卷。 |
spec.parameters.metroPairSyncSpeed | 双活Pair同步速率。支持配置为1~4。 可选值: | 否 | - | 当且仅当spec.parameters.hyperMetro为"true"时生效。 注意: - 未配置该参数时,双活Pair存储速率由存储决定。
- 最高速率同步时可能导致主机时延增大。
|

- spec.source.kind和spec.source.name用于指定卷变更范围,例如配置为StorageClass和对应名称时,将会变更使用目标StorageClass发放的所有的处于Bound状态的PVC。
- 当所有关联的PVC完成变更后,华为CSI会替换原有的StorageClass,并增加VolumeModifyClaim的spec.parameters参数,使得PVC满足StorageClass定义。
典型场景配置请参考如下示例:
变更普通卷为双活卷
配置变更普通卷为双活卷示例如下:
apiVersion: xuanwu.huawei.io/v1
kind: VolumeModifyClaim
metadata:
name: myvmc
spec:
source:
kind: StorageClass
name: mysc
parameters:
hyperMetro: "true"
创建PVC变更资源

- 变更的双活卷仅支持双活AA模式。
- 如果变更场景为普通卷变更为双活卷,则仅支持变更主站点端存储卷。
- 创建PVC变更资源期间,请勿使用华为CSI管理PVC。
- 不支持对同一个PVC创建多个VolumeModifyClaim资源,若存在对目标PVC的多次变更,请在单次变更完成之后再执行。
使用PVC变更文件创建PVC变更资源步骤如下。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令,创建PVC变更。
kubectl create -f volumemodifyclaim.yaml
参考
查询PVC变更
查询创建结果。
2.3.2.2 - 查询PVC变更
本章节介绍如何使用Kubectl查询PVC变更状态,当前华为CSI通过CRD提供以下API。
查询VolumeModifyClaim
使用kubectl查询VolumeModifyClaim步骤如下。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令,查询PVC变更。其中 vmc-name 为VolumeModifyClaim资源名称。
kubectl get volumemodifyclaims <vmc-name> -owide
命令结果示例如下:
NAME STATUS READY SOURCEKIND SOURCENAME STARTEDAT COMPLETEDAT AGE
myvmc Completed 1/1 StorageClass mysc 2024-06-06T03:19:13Z 2024-06-06T03:19:16Z 2m2s
表 1 回显说明
名称 | 说明 |
---|
NAME | VolumeModifyClaim资源名称。 |
STATUS | VolumeModifyClaim资源状态,可取值如下: - Pending:初始状态。
- Creating:VolumeModifyClaim完成基本校验,且服务端已经接收变更任务,但是该任务还未执行完成。
- Completed:所有关联的PVC均完成变更。
- Rollback:关联的PVC部分完成变更时,用户执行了删除PVC变更操作。
- Deleting:关联的PVC全部完成变更时,用户执行了删除PVC变更操作。
|
READY | 完成变更PVC数量/全部待变更PVC数量。 |
SOURCEKIND | 数据源类型,例如StorageClass。 |
SOURCENAME | 数据源名称,例如StorageClass名称。 |
STARTEDAT | 变更开始时间,指服务端接收该任务并开始处理的时间戳。 |
COMPLETEDAT | 变更完成时间,指所有关联的PVC均完成变更后的时时间戳,仅STATUS为Completed时,存在该值。 |
AGE | VolumeModifyClaim从创建至当前的存活时间。 |

VolumeModifyClaim支持使用kubectl查看Events信息,当VolumeModifyClaim无法满足创建要求,或者创建过程中出现错误时,服务端将记录Events信息。参考命令如下:
kubectl describe volumemodifyclaims local-to-hypermetro
查询VolumeModifyContent
VolumeModifyContent由VolumeModifyClaim资源创建,记录了单个PVC的变更详情,使用kubectl查询VolumeModifyContent步骤如下。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行命令,查询PVC变更。其中myvmc-uid为VolumeModifyContent资源名称。
kubectl get volumemodifycontents myvmc-uid -owide
命令结果示例如下:
NAME STATUS MODIFYCLAIMNAME SOURCEVOLUME STARTEDAT COMPLETEDAT AGE
myvmc-uid Completed myvmc default/mypvc 2024-06-06T03:19:07Z 2024-06-06T03:19:09Z 36m
表 2 回显说明
名称 | 说明 |
---|
NAME | VolumeModifyContent资源名称,格式为:VolumeModifyClaim名称-关联PVC的UID。 |
STATUS | VolumeModifyContent资源状态,可取值如下: - Pending:初始状态。
- Creating:VolumeModifyContent完成基本校验,且服务端已经接收变更任务,但是该任务还未执行完成。
- Completed:关联的PVC完成变更。
- Rollback:正在回滚PVC变更。
|
MODIFYCLAIMNAME | 关联的VolumeModifyClaim名称。 |
SOURCEVOLUME | 关联的PVC信息,格式为:命名空间名称/PVC名称。 |
STARTEDAT | PVC变更开始时间,指服务端接收该任务并开始处理的时间戳。 |
COMPLETEDAT | PVC变更完成时间,指所有关联的PVC均完成变更后的时时间戳,仅STATUS为Completed时,存在该值。 |
AGE | 即VolumeModifyContent从创建至当前的存活时间。 |

VolumeModifyContent支持使用kubectl查看Events信息,当VolumeModifyContent无法满足创建要求,或者变更PVC出现错误时,服务端将记录Events信息。参考命令如下:
kubectl describe volumemodifycontents myvmc-uid
2.3.2.3 - 删除PVC变更

- 当VolumeModifyClaim的STATUS值为Creating时,删除VolumeModifyClaim资源,将会在存储侧删除此次变更创建的资源,然后移除集群资源。在删除后,如果继续使用原有的StorageClass进行PVC管理,需要将关联的存储后端恢复为非双活存储后端。
- 当VolumeModifyClaim的STATUS值为Pending或Completed时,删除VolumeModifyClaim资源,仅会移除集群资源,不会和存储交互,即不会在存储侧删除变更创建的资源。
- VolumeModifyContent被VolumeModifyClaim管理,请勿手动管理VolumeModifyContent资源。
- 若待变更PVC中已有部分PVC满足变更要求,当批量变更失败时,会移除掉所有PVC的变更,导致已满足变更条件的PVC不再满足。
- 若待变更PVC已经在存储侧被手动管理,则可能导致变更失败。使用变更特性时,请勿手动管理存储卷。
当前章节介绍如何使用kubectl删除PVC变更,基于步骤如下。
操作步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行 命令,删除PVC变更。其中 vmc-name 为VolumeModifyClaim资源名称。
kubectl delete volumemodifyclaims <vmc-name>
参考
查询PVC变更
查询创建结果。