前提条件
CSI中已经存在快照。
操作步骤
创建克隆卷的StorageClass配置文件(可选)。
说明
如果下列参数在克隆卷的StorageClass和源卷StorageClass都存在,但是取值不同,则以克隆卷StorageClass中的取值为准。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-stor-sc-local provisioner: stor.csi.k8s.io parameters: clusterID: clusterID storageMode: Local sectorSize: sectorSize localStorageClass: localStorageClass minReplica: minReplica redundancyOverlap: redundancyOverlap ECfragmentSize: ECfragmentSize highAvailability: highAvailability writePolicy: writePolicy isMultipath: isMultipath pool: pool cachePool: cachePool flattenVolumeFromSnapshot: "false" maxCloneDepth: maxCloneDepth maxSessions: maxSessions serverNumbers: serverNumbers faultDomains: faultDomains chapEnable: "false" chapUser: username chapPassword: password reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true
克隆卷的StorageClass配置文件参数:
参数 描述 是否必填 metadata.name StorageClass的名称。 是 provisioner HBlock CSI驱动名称。
取值:HBlock CSI安装时的驱动名称。
是 parameters.clusterID csi-configMap.yaml中配置的HBlock的标识。 是 parameters.storageMode 卷的存储类型。
取值:Local。默认值为Local。
否 parameters.sectorSize 扇区大小。根据客户端文件系统 I/O 操作的最小单位设定卷扇区大小。
取值:"512"、"4096",单位为字节。默认值为"4096"。
否 parameters.localStorageClass 本地存储冗余模式。单机版不能设置此参数。
取值:
single-copy:单副本;
2-copy:两副本;
3-copy:三副本;
EC N+M:纠删码模式。其中N、M为正整数,N>M,且N+M<=128。表示将数据分割成N个片段,并生成M个校验数据。
默认值为EC 2+1。
否 parameters.minReplica 最小副本数(仅集群版支持)。
对于副本模式的卷,假设卷副本数为X,最小副本数为Y(Y必须≤X),该卷每次写入时,至少Y份数据写入成功,才视为本次写入成功。对于EC N+M模式的卷,假设该卷最小副本数设置为Y(必须满足N≤Y≤N+M),必须满足总和至少为Y的数据块和校验块写入成功,才视为本次写入成功。
取值:整数。对于副本卷,取值范围是[1, N],N为副本模式卷的副本数,默认值为1。对于EC卷,取值范围是[N, N+M],默认值为N。
否 parameters.redundancyOverlap 卷的折叠副本数(仅集群版支持)。在数据冗余模式下,同一份数据的不同副本/分片默认分布在不同的故障域,当故障域损坏时,允许根据卷的冗余折叠原则,将多份数据副本放在同一个故障域中,但是分布在不同的path上。
注意
如果存储池故障域级别为path,此参数不生效。
取值:对副本模式,取值范围是[1,副本数],默认值为1;对于EC模式,取值范围是[1,M+N],默认值为1。
否 parameters.ECfragmentSize 纠删码模式分片大小。卷冗余模式为EC模式时,此设置才生效,否则忽略。
取值:1、2、4、8、16、32、64、128、256、512、1024、2048、4096,单位是KiB。默认值为16。
否 parameters.highAvailability 是否选择高可用模式。单机版不能设置此参数。
取值:
ActiveStandby:启动主备,该卷关联对应Target下的所有IQN。
Disabled:禁用高可用模式,该卷关联对应Target下的一个IQN。
默认值为ActiveStandby。
否 parameters.writePolicy 卷的写策略。
取值:
WriteBack:回写,即数据写入到内存后,立刻返回给客户端写成功,之后再异步写入磁盘。适用于对性能要求较高,稳定性要求不高的场景。
WriteThrough:透写,即数据同时写入内存和磁盘,并在两处都写成功后,再返回客户端写成功。适用于稳定性要求较高,写性能要求不高,且最近写入的数据会较快被读取的场景。
WriteAround:绕写,即数据写入磁盘后即释放相应内存,写入磁盘成功后,立刻返回客户端写成功。适用于稳定性要求较高,性能要求不高,且写多读少的场景。
默认值为WriteBack。
否 parameters.isMultipath 是否使用Multipath。
取值:
"true"。
"false"。
默认值为"true"。
注意
这里需要输入字符串,即"true"或"false"。
如果HBlock集群版使用的HBlock卷没有启用高可用模式,即highAvailability为Disabled,此处需要设置为"false",否则会导致pod启动失败。
如果是HBlock单机版,此处需要设置为"false"。
条件 parameters.path 指定存储卷数据的数据目录(仅单机版支持)。
如果创建卷时不指定数据目录,使用服务器设置的默认数据目录。
否 parameters.pool 存储池名称,表示最终存储池,卷数据最终落在该存储池内(仅集群版支持)。
取值:长度范围是1~16,只能由字母、数字和短横线(-)、下划线(_)组成,字母区分大小写,且仅支持以字母和数字开头。
默认使用基础存储池。
否 parameters.cachePool 存储池名称,表示高速缓存存储池,卷数据首先写入该存储池内(仅集群版支持)。
取值:长度范围是1~16,只能由字母、数字和短横线(-)、下划线(_)组成,字母区分大小写,且仅支持以字母和数字开头。
如果不填写则代表不设置高速缓存存储池。
注意
存储池与缓存存储池不能是同一个存储池。
否 parameters.flattenVolumeFromSnapshot 是否断开克隆卷与快照的关系链。
取值:
"true"。
"false"。
默认值为"false"。
注意
这里需要输入字符串,即"true"或"false"。
否 parameters.maxCloneDepth 最大克隆卷深度,当超过设置的最大深度时,新创建的克隆卷会自动执行断链。
取值:整数,取值范围是[0, 15],默认值为5。
否 parameters.maxSessions iSCSI Target允许建立的最大会话数。
取值:整数,取值范围是[1, 1024],默认值为1。
注意
卷模式为filesystem,取值只能为1。
否 parameters.serverNumbers Target所在的服务器数量(仅集群版支持)。
整数形式,取值为[2, n],n为集群内服务器的数量。默认值为2。
否 parameters.faultDomains 卷的服务端连接位置信息。根据存储池的故障域,创建Target所在服务器的列表(仅集群版支持),以便创建LUN时,LUN关联的Target优先从该服务器列表中选择所在服务器。例如存储池为rack级别,其拓扑图涵盖rack1、rack2、rack3、rack4中的节点,且faultDomains指定rack1、rack2,那么创建LUN时,LUN关联的Target优先从rack1、rack2所包含的此存储池的服务器列表里进行选择。
注意
存储池的故障域为path级别时,不能设置该参数。
如果LUN指定了高速缓存池和最终存储池,则从高速缓存池池中选择节点列表。如果LUN只指定了最终存储池,则从最终存储池中选择节点列表。
取值:以节点的形式添加,节点的级别可以到room、rack、server。可以指定多个节点,但是节点的个数要小于等于serverNumbers。支持一个节点添加多次,但是每次只能选一个server,并且选择的server不能与前面重复。如果一个节点出现的次数过多导致节点内的全部server都被选择,则系统会忽略此节点,从后面的节点中继续选择。
否 parameters.chapEnable 是否使用CHAP认证,取值:
"true"。
"false"。
默认值为"false"。
注意
这里需要输入字符串,即"true"或"false"。
否 parameters.chapUser CHAP认证的用户名。如果配置文件csi-secret-decrypt.yaml中的decryptFlag为true,需要对CHAP认证的用户名使用DecryptData配置的密钥对进行AES(ECP、paddingcs7)加密,加密后的结果进行Base64编码,具体详见配置加密模式。
加密前取值:字符串形式,长度范围是3~64,只能由字母、数字、句点( . )、短横线( - )、下划线( _ )、冒号( : )组成,字母区分大小写,且仅支持以字母或数字开头。
否 parameters.chapPassword CHAP认证的密码。如果配置文件csi-secret-decrypt.yaml中的decryptFlag为true,需要对CHAP认证的密码使用DecryptData配置的密钥对进行AES(ECP、paddingcs7)加密,加密后的结果进行Base64编码,具体详见配置加密模式。
加密前取值:字符串形式,长度范围是12~16,必须包含大写字母、小写字母、数字、下划线(_)中的至少两种字符,字母区分大小写。
否 创建克隆卷的配置文件。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: clone-pvc-from-snapshot # Set to the actual namespace namespace: default spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: csi-stor-sc-local dataSource: kind: VolumeSnapshot name: csi-dynamic-snapshot apiGroup: snapshot.storage.k8s.io
克隆卷的配置文件参数:
参数 描述 是否必填 metadata.name 克隆卷的名称。 是 metadata.namespace 命名空间。
取值:HBlock CSI安装时绑定的Kubernetes命名空间名称。
是 spec.resource.request.storage 克隆卷的卷容量。
取值:整数形式,大于等于快照对应的源卷容量,单位是Gi。
是 spec.storageClassName 克隆卷的storageClass。
说明
可以使用源卷的storageClass,如果使用源卷的storageClass,可以省略此字段。
否 spec.dataSource.kind 数据源的类型,取值为VolumeSnapshot,表示数据源是一个快照。 是 spec.dataSource.name CSI中快照的名称。 是 spec.dataSource.apiGroup 指定数据源的API组,取值是snapshot.storage.k8s.io。 是 应用配置文件。
kubectl apply -f StorageClass.yaml kubectl apply -f clone.yaml
查看克隆卷。
kubectl describe pvc clonename [ -n namespace ]