使用LocalPV動態存儲卷,即無需預先手動創建PV,只需創建PVC時指定本地存儲類(StorageClass),存儲插件cstor-csi就會以子目錄形式自動創建對應PV資源。
該模式為推薦使用,您可以更關注工作負載本身的存儲需求,無需預先手動創建和配置存儲資源,降低底層基礎設施的復雜性。
前提條件
已創建容器集群
已在插件市場安裝存儲插件cstor-csi,且插件正常運行;
使用限制
cstor-csi插件安裝版本要求3.4.0及以上;
本地存儲卷取決于底層節點的可用性,如果節點變得不健康,那么存儲卷也將變得不可被 Pod 訪問,影響Pod運行;
如果需要指定節點使用本地存儲卷,可以通過以下兩種方式:
1、創建持久卷聲明PVC時,通過設置節點親和來指定本地存儲使用節點;
2、StorageClass創建時指定綁定策略WaitForFirstConsumer模式,創建工作負載指定節點親和或者NodeSelector,通過pod調度決定存儲使用節點。
通過控制臺使用LocalPV動態存儲卷
1、創建存儲類(StorageClass)
登錄“云容器引擎管理控制臺;
在集群列表頁點擊進入指定集群;
進入主菜單“存儲”——“存儲類”,單擊左上角“創建”;
在創建對話框,配置存儲類StorageClass的相關參數。配置項說明如下:
| 配置項 | 說明 |
|---|---|
| 名稱 | StorageClass的名稱。 |
| 存儲類型 | 前支持云盤、彈性文件、對象存儲、并行文件、海量文件和本地存儲,這里選擇本地存儲。 具體創建頁中展示的存儲類型由當前資源池支持情況決定。 |
| 存儲驅動 | 對應StorageClass yaml中provisioner,值為local.csi.cstor.com。 |
| 回收策略 | 回收策略,默認為Deleted。
|
| 綁定策略 | 綁定策略,默認為Immediate。
|
| 參數 | 本地存儲類型:參數鍵為type;該場景下選擇localpv。 掛載目錄:參數鍵為baseStor。當配置目錄不存在時,插件會在節點上自動創建目錄。 |
| 掛載選項 | 掛載參數,用戶可根據自己的情況實際定制相關參數。比如設置掛載參數為:discard:表示在掛載文件系統時指定 discard 參數,文件系統中刪除文件后會自動觸發 discard 操作,通知塊設備釋放掉未使用的 Block 。 |
參數配置完成后,點擊“確定”。創建成功后,可以在存儲類列表查看。
2、創建持久卷聲明(PVC)
進入主菜單“存儲”——“持久卷聲明”,單擊左上角“創建持久卷聲明”;
在創建對話框,配置持久卷聲明PVC的相關參數。配置項說明如下:
| 配置項 | 說明 |
|---|---|
| 名稱 | PVC的名稱 |
| 存儲聲明類型 | 前支持云盤、彈性文件、對象存儲、并行文件、海量文件和本地存儲,這里選擇本地存儲。具體創建頁中展示的存儲類型由當前資源池支持情況決定。 |
| 分配模式 | 這里選擇“使用存儲類”。 |
| StorageClass名稱 | 選擇上一步創建的StorageClass。 |
| 容量 | 根據業務需求自定義容量。 |
| 卷模式 |
|
| 訪問模式 |
|
| 高級選項 | 節點:可以根據需要手動選擇PVC對應存儲的節點。該操作即在PVC上打上標簽如下:topology.kubernetes.io/zone: {節點名}。 |
參數配置完成后,點擊“確定”。創建成功后,可以在持久卷聲明列表查看。
進入持久卷聲明列表頁,等待PVC狀態為“已綁定” 。此時,進入主菜單“存儲”——“持久卷“,可以看到對應的PV創建 。
PV創建完成后,可以登錄指定節點,進入StorageClass配置掛載目錄,可以看到以PV名稱命名的子目錄。
如果PVC一直未綁定,可以查看進入對應PVC詳情頁查看事件,或者查看cstor-csi日志進行定位。
3、創建工作負載
登錄“云容器引擎”管理控制臺;
在集群列表頁點擊進入指定集群;
進入主菜單“工作負載”——“有狀態”,單擊左上角“創建SatefulSet”;
在創建對話框,數據卷欄中,選擇添加數據卷,卷類型選擇“使用已有PVC”,操作欄選擇“添加已有PVC”;
在實例內容器欄,為容器設置掛載點。選擇添加掛載點,選擇數據卷為上一步創建,根據需要配置容器路徑和權限;
所有的信息都配置完成后,單擊 “提交” 。創建成功后,您就可以正常使用數據卷。
通過kubectl命令行使用LocalPV動態存儲卷
1、創建存儲類(StorageClass)
使用kubectl連接集群,創建示例yaml文件sc-example.yaml:
apiVersion: "storage.k8s.io/v1"
kind: "StorageClass"
metadata:
name: "test-localpv"
allowVolumeExpansion: true
parameters:
# 基礎存儲路徑
baseStor: "/tmp"
type: "localpv"
provisioner: "local.csi.cstor.com"
reclaimPolicy: "Delete"
volumeBindingMode: "Immediate"執行以下命令,創建StorageClass
kubectl apply -f sc-example.yaml查看創建的StorageClass:
登錄“云容器引擎”管理控制臺;
在集群列表頁點擊進入指定集群;
進入主菜單“存儲”——“存儲類”,在存儲類列表查看。
2、創建持久卷聲明(PVC)
使用kubectl連接集群,創建示例yaml文件pvc-example.yaml:
apiVersion: "v1" kind: "PersistentVolumeClaim" metadata: name: "localpv-pvc" namespace: "default" spec: accessModes: - "ReadWriteOnce" resources: requests: storage: "1Gi" storageClassName: "test-localpv" volumeMode: "Filesystem"執行以下命令,創建PVC
kubectl apply -f pvc-example.yaml查看創建的PVC:
登錄“云容器引擎”管理控制臺;
在集群列表頁點擊進入指定集群;
進入主菜單“存儲”——“持久卷聲明”,在列表查看。
3、創建工作負載
使用kubectl連接集群,創建示例yaml文件sts-example.yaml:
apiVersion: "apps/v1"
kind: "StatefulSet"
metadata:
name: "localpv-sts"
namespace: "default"
spec:
podManagementPolicy: "OrderedReady"
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
name: "localpv-sts"
serviceName: ""
template:
metadata:
labels:
app: ""
ccse_app_name: ""
kubernetes.io/qos: "None"
name: "localpv-sts"
source: "CCSE"
spec:
containers:
- image: "nginx:1.23.2-alpine"
imagePullPolicy: "IfNotPresent"
name: "container1"
resources:
limits:
cpu: "100m"
memory: "128Mi"
requests:
cpu: "100m"
memory: "128Mi"
terminationMessagePath: "/dev/termination-log"
terminationMessagePolicy: "File"
volumeMounts:
- mountPath: "/tmp"
name: "volume1"
dnsPolicy: "ClusterFirst"
restartPolicy: "Always"
schedulerName: "default-scheduler"
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- name: "volume1"
persistentVolumeClaim:
claimName: "localpv-pvc"
updateStrategy:
rollingUpdate:
partition: 0
type: "RollingUpdate"執行以下命令,創建StatefulSet
kubectl apply -f sts-example.yaml查看創建的有狀態負載:
登錄“云容器引擎”管理控制臺;
在集群列表頁點擊進入指定集群;
進入主菜單“工作負載”——“有狀態”,在列表查看。
驗證數據持久化
登錄“云容器引擎”管理控制臺;
在集群列表頁點擊進入指定集群;
進入主菜單“工作負載”——“有狀態”,進入負載詳情;
在Pod列表頁,選擇“遠程登錄”,進入到容器內執行以下命令:
1、向/tmp 目錄下寫一個文件,執行echo "Hello World" > /tmp/test.log
2、查看/tmp目錄下文件,執行ls /tmp,預期結果如下:
lost+found test.log登錄pod所在節點,進入StorageClass配置掛載目錄下以PV名稱命名的子目錄,可以看到容器內文件:
退出pod的“遠程登錄”,對上一步中的Pod執行“銷毀重建”,等待Pod重新運行正常;
對新建Pod,繼續執行“遠程登錄”,進入到容器內查看數據。執行cat /tmp/test.log,預期結果如下:
Hello World以上步驟說明,pod刪除重建后,數據仍然存在,說明數據可持久化保存。