前提条件
CSI中已经存在PVC。
在执行此操作之前,请确保源卷(PVC)的所有数据已持久化,即如果源卷已被客户端挂载,需确保客户端的数据都已经同步到卷上。创建克隆卷前:
如果是block模式的卷:在客户端执行sync命令。
如果是filesystem模式的卷:sync版本大于等于8.6版本时(可以通过sync --version命令查看版本信息),在客户端执行sync -f命令;sync版本低于8.6版本时,在客户端执行sync命令。
操作步骤
创建克隆卷的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 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的名称。 是 parameters.clusterID csi-configMap.yaml中配置的HBlock的标识。需要与源卷的clusterID保持一致。 是 parameters.flattenVolumeFromSnapshot 是否断开克隆卷与快照的关系链。
取值:
"true"。
"false"。
默认值为"false"。
注意
这里需要输入字符串,即"true"或"false"。
否 parameters.maxCloneDepth 最大克隆卷深度,当超过设置的最大深度时,新创建的克隆卷会自动执行断链。
取值:整数,取值范围是[0, 15],默认值为5。
否 parameters.maxSessions iSCSI Target允许建立的最大会话数。
取值:整数,取值范围是[1, 1024],默认值为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-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: csi-stor-sc-local dataSource: kind: PersistentVolumeClaim name: csi-pvc-local
克隆卷的配置文件参数:
参数 描述 是否必填 metadata.name 克隆卷的名称。 是 spec.resource.request.storage 克隆卷的卷容量。
取值:整数形式,大于等于快照对应的源卷容量,单位是Gi。
是 spec.storageClassName 克隆卷的storageClass。
说明
可以使用源卷的storageClass,如果使用源卷的storageClass,可以省略此字段。
否 spec.dataSource.kind 数据源的类型,取值为PersistentVolumeClaim,表示数据源是一个卷。 是 spec.dataSource.name CSI中PVC的名称。 是 应用配置文件。
kubectl apply -f StorageClass.yaml kubectl apply -f clone.yaml
查看克隆卷。
kubectl describe pvc clonename