自定義存儲資源對象
更新時間 2024-05-11 16:27:00
最近更新時間: 2024-05-11 16:27:00
分享文章
本節介紹了云容器引擎的最佳實踐: 自定義存儲資源對象。
自定義云存儲StorageClass
默認存儲類
存儲插件cstor-csi安裝完成后,會默認根據當前資源池已上線云存儲產品情況創建默認存儲類,用戶可以使用默認存儲類創建持久卷聲明。
默認創建的存儲類名稱、對應驅動及應用場景等參見cstor-csi插件中“插件使用”介紹。
自定義存儲類
當默認存儲類不滿足業務需求,比如用戶是從自建Kubernetes或其他Kubernetes服務遷移到到天翼云云容器引擎時,期望使用與云業務同名StorageClass或者用戶期望自定義存儲類的參數時,用戶可以選擇自定義云存儲類型StorageClass。
通過自定義存儲類,用戶可以實現定制StorageClass名稱、云存儲類型、綁定策略、掛載選項等。具體各云存儲產品描述如下:
- 云硬盤:通過控制臺或通過kubectl命令行自定義存儲類參見使用云盤動態存儲卷;
- 彈性文件:通過控制臺或通過kubectl命令行自定義存儲類參見使用SFS動態存儲卷;
- 對象存儲:通過控制臺或通過kubectl命令行自定義存儲類參見使用ZOS動態存儲卷。
自定義通用StorageClass
云容器引擎除支持通過cstor-csi插件使用云存儲產品之外,也支持用戶定制安裝CSI,并自定義創建存儲類。
使用限制
根據業務場景需要自行安裝CSI,并確定存儲驅動名稱。具體CSI插件安裝有兩種方式:
1、CSI插件為Helm Chart形態:通過模版市場上傳CSI插件Chart包,并通過模版實例來發布CSI插件;
2、CSI插件為獨立工作負載形態:通過云容器引擎服務“工作負載”自行創建DaemonSet、Deployment或者Statefulset;
自定義存儲類
通過控制臺創建流程如下:
- 登錄“云容器引擎”管理控制臺;
- 在集群列表頁點擊進入指定集群;
- 進入主菜單“存儲”——“存儲類”,單擊左上角“創建”;
- 在創建對話框,配置存儲類StorageClass的相關參數。配置項說明如下:
| 配置項 | 說明 |
|---|---|
| 名稱 | StorageClass的名稱。 |
| 存儲類型 | 這里選擇“通用” |
| 存儲驅動 | 對應StorageClass yaml中provisioner,配置為自行安裝CSI對應的存儲驅動名稱 |
| 回收策略 | 回收策略,默認為Deleted。 1、Retained(保留):用戶可以手動回收資源。當PVC對象被刪除時,PV卷仍然存在,對應的數據卷被視為"已釋放(released)"。 2、Deleted(刪除):對于支持Delete回收策略的卷插件,刪除動作會將PV對象從Kubernetes中移除,同時也會從外部基礎設施中移除所關聯的存儲資產。 如果對數據安全性要求高,推薦使用Retain方式,以免誤刪數據。 |
| 綁定策略 | 綁定策略,默認為Immediate。 1、Immediate模式:表示一旦創建了PVC,也就完成了卷綁定和動態供應。對于由于拓撲限制而非集群所有節點可達的存儲后端,PV會在不知道Pod調度要求的情況下綁定或者制備。 2、WaitForFirstConsumer模式:該模式將延遲PV的綁定和制備,直到使用該PVC的Pod被創建。PV會根據Pod調度約束指定的拓撲來選擇或供應。 |
| 支持擴展 | 由自行安裝CSI支持情況決定 |
| 參數 | 根據自行安裝CSI支持情況及業務需求配置 |
| 掛載選項 | 掛載參數,用戶可根據自己的情況實際定制相關參數。 |
- 參數配置完成后,點擊“確定”。創建成功后,可以在存儲類列表查看。
通用存儲類YAML示例如下:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: {StorageClassName}
provisioner: {YOUR-CSI-PROVISIONER}
parameters:
{PARAM-KEY}: {PARAM-VALUE}
reclaimPolicy: Retain
allowVolumeExpansion: true
mountOptions:
- debug
volumeBindingMode: Immediate
自定義通用PVC
當自定義存儲類創建完成后,可以通過自定義PVC的方式,選擇存儲類,動態制備PV。
- 登錄“云容器引擎”管理控制臺;
- 在集群列表頁點擊進入指定集群;
- 進入主菜單“存儲”——“持久卷聲明”,單擊左上角“創建持久卷聲明”;
- 在創建對話框,配置持久卷聲明PVC的相關參數。配置項說明如下:
| 配置項 | 說明 |
|---|---|
| 名稱 | PVC的名稱 |
| 存儲聲明類型 | 這里選擇“通用” |
| 分配模式 | 這里選擇“使用存儲類” |
| StorageClass名稱 | 選擇上一步創建的自定義StorageClass |
| 容量 | 可以根據需求自定義容量 |
| 卷模式 | 支持兩種卷模式: 1、文件系統(Filesystem):默認方式,該類型卷會被Pod掛載(Mount)到某個目錄。如果卷的存儲來自某塊設備而該設備目前為空, ? ? ? Kuberneretes會在第一次掛載卷之前在設備上創建文件系統。 2、塊設備(Block):這類卷以塊設備的方式交給Pod使用,其上沒有任何文件系統。這種模式對于為Pod提供一種使用最快可能方式來訪問卷而言很有幫助,Pod和卷之間不存在文件系統層。 |
| 訪問模式 | 支持選擇以下訪問模式: 1、ReadWriteOnce:卷可以被一個節點以讀寫方式掛載 2、ReadOnlyMany:卷可以被多個節點以只讀方式掛載 3、ReadWriteMany:卷可以被多個節點以讀寫方式掛載 |
- 參數配置完成后,點擊“確定”。創建成功后,可以在持久卷聲明列表查看。
- 進入持久卷聲明列表頁,等待PVC狀態為“已綁定” 。此時,進入主菜單“存儲”——“持久卷“,可以看到對應的PV創建。
- 如果PVC一直未綁定,可以查看進入對應PVC詳情頁查看事件,或者查看CSI日志進行定位。
通用持久卷聲明YAML示例如下:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {PVC-NAME}
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 1Gi
storageClassName: {YOUR-STORAGECLASS-NAME}
自定義通用PV
當需要手動靜態制備PV時,可以通過自定義通用PV的方式。使用時,通過創建PVC時使用分配模式為“已有PV”進行綁定。
- 登錄“云容器引擎”管理控制臺;
- 在集群列表頁點擊進入指定集群;
- 進入主菜單“存儲”——“持久卷”,單擊左上角“創建持久卷”;
- 在創建對話框,配置持久卷PV的相關參數。配置項說明如下:
| 配置項 | 說明 |
|---|---|
| 名稱 | PV的名稱 |
| 持久卷 | 這里選擇“通用” |
| 容量 | 可以根據需求自定義容量 |
| 訪問模式 | 1、ReadWriteOnce:卷可以被一個節點以讀寫方式掛載 2、ReadOnlyMany:卷可以被多個節點以只讀方式掛載? 3、ReadWriteMany:卷可以被多個節點以讀寫方式掛載 |
| 回收策略 | PV對象的回收策略表示當PVC釋放時如何處理該數據卷。 回收策略包括: 1、Retained(保留):用戶可以手動回收資源。當PVC對象被刪除時,PV卷仍然存在,對應的數據卷被視為"已釋放(released)"。 2、Deleted(刪除):對于支持Delete回收策略的卷插件,刪除動作會將PV對象從Kubernetes中移除,同時也會從外部基礎設施中移除所關聯的存儲資產。 |
| 標簽 | 用于對PV對象進行標記和分類的元數據屬性,可以賦予PV以自定義的屬性或標識。 |
| 高級選項 | 支持選擇持久卷類型。PV持久卷是用插件的形式來實現的,目前控制臺開放兩種類型: 1、NFS:能將 NFS (網絡文件系統)掛載到Pod中。需要指定NFS Server地址、NFS目錄。 2、Local:local卷代表的是某個被掛載的本地存儲設備,例如磁盤、分區或者目錄。local卷只能用作靜態創建的持久卷,不支持動態配置。 local類型需要指定LocalPV所在節點及目錄。 |
- 參數配置完成后,點擊“確定”。創建成功后,可以在持久卷列表查看,此時PV狀態為“可用”。
- 進入主菜單“存儲”——“持久卷聲明”,單擊左上角“創建持久卷聲明”,分配模式選擇“已有持久卷”,持久卷名稱選擇上述自定義PV名稱;
- 參數配置完成后,點擊“確定”。創建成功后,可以在持久卷聲明列表查看。
- 進入持久卷聲明列表頁,等待PVC狀態為“已綁定” 。
通用持久卷YAML示例如下,以NFS類型為例:
apiVersion: v1
kind: PersistentVolume
metadata:
name: {PV-NAME}
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retained
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /tmp
server: {NFS-SERVER-ADDRESS}