前提條件
CSI中已經存在HBlock相關的PVC,且對應的HBlock卷為Local模式。
在執行此操作之前,請確保源卷(PVC)的所有數據已持久化,即如果源卷已被客戶端掛載,需確保客戶端的數據都已經同步到卷上。創建克隆卷前:
如果是block模式的卷:在客戶端執行sync命令。
如果是filesystem模式的卷:如果客戶端支持sync -f(可以通過sync --help命令查看是否支持),在客戶端執行sync -f命令;否則在客戶端執行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 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的標識。需要與源卷的clusterID保持一致。 是 parameters.storageMode 卷的存儲類型。
取值:Local。默認與源卷保持一致。
否 parameters.sectorSize 扇區大小。根據客戶端文件系統 I/O 操作的最小單位設定卷扇區大小。
取值:"512"、"4096",單位為字節。默認值為源卷的扇區大小。
否 parameters.localStorageClass 本地存儲冗余模式。單機版不能設置此參數。
注意
如果設置了克隆卷的minReplica或redundancyOverlap,則必須同時指定該參數。
取值:
single-copy:單副本;
2-copy:兩副本;
3-copy:三副本;
EC N+M:糾刪碼模式。其中N、M為正整數,N>M,且N+M<=128。表示將數據分割成N個片段,并生成M個校驗數據。
默認值為源卷的卷冗余模式。
否 parameters.minReplica 最小副本數(僅集群版支持)。
注意
如果指定該參數,則必須指定克隆卷的localStorageClass。
對于副本模式的卷,假設卷副本數為X,最小副本數為Y(Y必須≤X),該卷每次寫入時,至少Y份數據寫入成功,才視為本次寫入成功。對于EC N+M模式的卷,假設該卷最小副本數設置為Y(必須滿足N≤Y≤N+M),必須滿足總和至少為Y的數據塊和校驗塊寫入成功,才視為本次寫入成功。
取值:整數。
如果沒有指定克隆卷的localStorageClass:默認值為源卷的最小副本數。
如果指定了克隆卷的localStorageClass:對于副本卷,取值范圍是[1, N],N為副本模式卷的副本數,默認值為1;對于EC卷,取值范圍是[N, N+M],默認值為N。
否 parameters.redundancyOverlap 卷的折疊副本數(僅集群版支持)。在數據冗余模式下,同一份數據的不同副本/分片默認分布在不同的故障域,當故障域損壞時,允許根據卷的冗余折疊原則,將多份數據副本放在同一個故障域中,但是分布在不同的path上。
注意
如果存儲池故障域級別為path,此參數不生效。如果指定該參數,則必須指定克隆卷的localStorageClass。
取值:整數。
如果沒有指定克隆卷的localStorageClass:默認值為源卷的折疊副本數。
如果指定了克隆卷的localStorageClass:對副本模式,取值范圍是[1,副本數];對于EC卷,取值范圍是[1, N+M]。默認值為1。
否 parameters.ECfragmentSize 糾刪碼模式分片大小。卷冗余模式為EC模式時,此設置才生效,否則忽略。
取值:1、2、4、8、16、32、64、128、256、512、1024、2048、4096,單位是KiB。默認值為源卷的糾刪碼模式分片大小。
否 parameters.highAvailability 是否選擇高可用模式。單機版不能設置此參數。
取值:
ActiveStandby:啟動主備,該卷關聯對應Target下的所有IQN。
Disabled:禁用高可用模式,該卷關聯對應Target下的一個IQN。
默認值為源卷的高可用類型。
否 parameters.writePolicy 卷的寫策略。
取值:
WriteBack:回寫,即數據寫入到內存后,立刻返回給客戶端寫成功,之后再異步寫入磁盤。適用于對性能要求較高,穩定性要求不高的場景。
WriteThrough:透寫,即數據同時寫入內存和磁盤,并在兩處都寫成功后,再返回客戶端寫成功。適用于穩定性要求較高,寫性能要求不高,且最近寫入的數據會較快被讀取的場景。
WriteAround:繞寫,即數據寫入磁盤后即釋放相應內存,寫入磁盤成功后,立刻返回客戶端寫成功。適用于穩定性要求較高,性能要求不高,且寫多讀少的場景。
默認值為源卷的寫策略。
否 parameters.isMultipath 是否使用Multipath。
取值:
"true"。
"false"。
默認值為"true"。
注意
這里需要輸入字符串,即"true"或"false"。
如果HBlock集群版使用的HBlock卷沒有啟用高可用模式,即highAvailability為Disabled,此處需要設置為"false",否則會導致pod啟動失敗。
如果是HBlock單機版,此處需要設置為"false"。
條件 parameters.path 指定存儲卷數據的數據目錄(僅單機版支持)。
如果創建卷時不指定數據目錄,默認與源卷配置保持一致。
否 parameters.pool 存儲池名稱,表示最終存儲池,卷數據最終落在該存儲池內(僅集群版支持)。
取值:長度范圍是1~16,只能由字母、數字和短橫線(-)、下劃線(_)組成,字母區分大小寫,且僅支持以字母和數字開頭。默認值與源卷的配置一致。
注意
pool與cachePool不能設置為同一個存儲池。
當克隆卷的pool和cachePool配置與源卷一致,無需額外設置。若單獨設置了克隆卷的pool或cachePool,則不再沿用源卷的pool和cachePool,而是采用所設參數值。例如,源卷同時有cachePool和pool,若克隆卷僅重新設置了pool而未設置cachePool,則克隆卷使用新設置的pool,無cachePool;反之,若克隆卷設置了cachePool,則必須同時設置pool,或者讓pool使用基礎存儲池。
否 parameters.cachePool 存儲池名稱,表示高速緩存存儲池,卷數據首先寫入該存儲池內(僅集群版支持)。
取值:長度范圍是1~16,只能由字母、數字和短橫線(-)、下劃線(_)組成,字母區分大小寫,且僅支持以字母和數字開頭。默認值與源卷的配置一致。
注意
pool與cachePool不能設置為同一個存儲池。
當克隆卷的pool和cachePool配置與源卷一致,無需額外設置。若單獨設置了克隆卷的pool或cachePool,則不再沿用源卷的pool和cachePool,而是采用所設參數值。例如,源卷同時有cachePool和pool,若克隆卷僅重新設置了pool而未設置cachePool,則克隆卷使用新設置的pool,無cachePool;反之,若克隆卷設置了cachePool,則必須同時設置pool,或者讓pool使用基礎存儲池。
否 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-pvc-block # Set to the actual namespace namespace: default spec: accessModes: - ReadWriteOnce volumeMode: Block resources: requests: storage: 1Gi # If there is a conflict with other StorageClass, you can change it to another name storageClassName: csi-stor-sc-local-dynamic-block dataSource: kind: PersistentVolumeClaim name: csi-pvc-local-block克隆卷的配置文件參數:
參數 描述 是否必填 metadata.name 克隆卷的名稱。 是 metadata.namespace 命名空間。
取值:HBlock CSI安裝時綁定的Kubernetes命名空間名稱。
是 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 [ -n namespace ]