1 - 创建PVC
华为CSI支持在华为存储上创建存储资源(LUN/文件系统),并根据用户的设置供给容器使用。具体支持的特性请参考表 华为企业存储支持的特性及约束或者表 华为分布式存储支持的特性及约束。
创建PVC的方式分为动态卷供应和静态卷供应。
- 动态卷供应不需要事先创建PV,华为CSI会根据StorageClass自动在存储设备上创建PV所需要的资源。并且可以在创建PVC时同时创建PV。
- 静态卷供应需要管理员事先在存储设备上创建好所需要的资源,通过创建PV的方式使用已存在的资源。并且可以在创建PVC时指定关联的PV。
1.1 - 动态卷供应
动态卷供应(Dynamic Volume Provisioning)允许按需创建存储卷。动态卷供应依赖StorageClass对象。 集群管理员可以根据需要定义多个StorageClass对象,在声明PV或者PVC时,指定满足业务要求的StorageClass。华为CSI在从华为存储设备上申请资源时,会根据StorageClass的预置定义,创建满足业务要求的存储资源。
为了完成动态卷供应,需要完成如下两步:
配置StorageClass
根据业务需要,参考动态卷供应典型场景StorageClass配置示例和动态卷供应StorageClass参数说明,创建StorageClass配置文件,如本例从的mysc.yaml文件。
执行命令,使用配置文件创建StorageClass。
kubectl apply -f mysc.yaml
执行命令,查看已创建的StorageClass信息。
命令结果示例如下:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
mysc csi.huawei.com Delete Immediate true 8s
配置PVC
根据业务需要,参考本节描述和PVC配置文件示例,修改具体参数,生成本次需要创建的PVC配置文件,如本例中mypvc.yaml文件。
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
使用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 - 动态卷供应典型场景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。
执行以下命令,基于该yaml文件创建StorageClass。
kubectl create -f mysc.yaml
执行以下命令,查看当前已经创建的StorageClass信息。
命令结果示例如下。
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.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:所有类型卷均支持,RWOP需Kubernetes 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.2 - 纳管卷供应
纳管卷供应(Manage Volume Provisioning)允许管理员使用已经在存储侧创建的资源做为PV,并能够支持动态卷的特性,例如:扩容,快照,克隆等,属于华为CSI自定义能力。使用该特性可满足如下场景:
- 容器化应用的改造场景,需要使用已有的存储卷。
- 重建Kubernetes集群。
- 容灾场景下,对存储数据进行迁移。
在多Kubernetes集群场景下,使用纳管卷特性对同一存储资源进行管理时,在任一集群中对该资源对应的PVC进行管理操作后,不会同步到其他集群中。
例如:在某一集群中对PVC进行扩容时,其他集群对应的PVC不会自动扩容,需要在其他集群中手动根据扩容PVC中的扩容命令进行扩容。
前提条件
- 已在CSI中注册需要纳管卷所在存储。
- 已登录存储设备获取需要纳管卷的名称和容量。
配置StorageClass
根据业务需要,参考动态卷供应典型场景StorageClass配置示例和动态卷供应StorageClass参数说明,创建StorageClass配置文件,如本例从的mysc.yaml文件。
执行命令,使用配置文件创建StorageClass。
kubectl apply -f mysc.yaml
执行命令,查看已创建的StorageClass信息。
命令结果示例如下:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
mysc csi.huawei.com Delete Immediate true 8s
配置PVC
根据业务需要,参考本节描述和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
执行命令,使用配置文件创建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
使用PVC
与动态卷供应使用PVC方式相同。
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。
执行以下命令,基于该yaml文件创建StorageClass。
kubectl create -f mysc.yaml
执行以下命令,查看当前已经创建的StorageClass信息。
命令结果示例如下。
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
mysc csi.huawei.com Delete Immediate false 34s
创建StorageClass后,就可以使用该StorageClass进行创建PV或者PVC。
在纳管卷供应场景下,StorageClass的使用中请注意如下事项:
- 针对StorageClass进行的修改将不会在已经创建的PV上生效。您需要删除这些PV,并重新使用修改后的StorageClass创建才能应用修改的参数。
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 | 主机文件系统类型。支持类型为: | 否 | 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.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:所有类型卷均支持,RWOP需Kubernetes 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.3 - 静态卷供应
静态卷供应(Static Volume Provisioning)允许管理员使用已经在存储侧创建的资源做为PV,供集群中的容器使用。
为了完成静态卷供应,需要完成如下两步:
前提条件
存储侧已经存在待创建PV所需要的存储资源,如LUN或者文件系统。如果存储资源是文件系统,还需要创建文件系统的共享和客户端信息。
配置PV
准备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。
执行以下命令,基于准备好的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
配置PVC
当PV以静态卷供应的方式创建完成后,可以基于该PV创建PVC,从而供容器使用。
首先准备PVC配置文件。如下示例是一个使用静态卷供应的PVC配置文件。
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
使用PVC
与动态卷供应使用PVC方式相同。
2 - 扩容PVC
当容器使用的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.4.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文件系统时,容量限制见表 ext4容量的规格;当使用的是XFS文件系统时,容量限制见表 XFS容量的规格。如果使用的是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
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特性矩阵。
操作步骤
执行以下命令,基于克隆卷的配置文件创建PVC。
kubectl create -f myclone.yaml
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特性矩阵。
操作步骤
执行以下命令,基于从快照创建卷的配置文件创建PVC。
kubectl create -f myrestore.yaml