使用對象存儲靜態存儲卷,即使用預先在對象存儲控制臺已創建Bucket,通過手動創建PV指定已有Bucket,創建PVC時使用已有PV的方式,實現容器內掛載對象存儲。
該模式下需要用戶自建對象存儲Bucket及PV資源,一定程度上增加操作和管理復雜性,一般推薦使用動態創建存儲的方式。
前提條件
已創建容器集群
已在插件市場安裝存儲插件cstor-csi,且插件正常運行
容器集群所在資源池已開通對象存儲服務
已在對象存儲控制臺創建Bucket
使用限制
參見“對象存儲概述”——“使用限制”
通過控制臺使用對象存儲靜態存儲卷
1、創建保密字典
進入天翼云對象存儲控制臺,進入Access Key管理;
查看對象存儲密鑰,并記錄;
登錄“云容器引擎”管理控制臺;
在集群列表頁點擊進入指定集群;
進入主菜單“配置管理”——“保密字典”,選擇命名空間,單擊左上角“創建”。
輸入名稱、內容,內容項變量名分別是AK、SK(變量名大寫),變量值分別對象上一步中獲取到的密鑰;點擊提交;
創建持久卷(PV)
登錄“云容器引擎”管理控制臺;
在集群列表頁點擊進入指定集群;
進入主菜單“存儲”——“持久卷”,單擊左上角“創建持久卷”;
在創建對話框,配置持久卷PV的相關參數。配置項說明如下:
| 配置項 | 說明 |
| 名稱 | PV的名稱,以pvc開頭。 |
| 持久卷類型 | 前支持云盤、彈性文件、對象存儲、并行文件、海量文件和本地存儲,這里選擇對象存儲。 具體創建頁中展示的存儲類型由當前資源池支持情況決定。 |
| 存儲驅動 | 采用默認CSI驅動。 |
| 訪問模式 | ReadWriteOnce:卷可以被一個節點以讀寫方式掛載ReadOnlyMany:卷可以被多個節點以只讀方式掛載ReadWriteMany:卷可以被多個節點以讀寫方式掛載。 |
| 訪問證書 | 選擇命名空間、名稱分別選擇步驟1中保密字典所屬命名空間及名稱。對應StorageClass中參數鍵分別為: csi.storage.k8s.io/node-publish-secret-namespace csi.storage.k8s.io/node-publish-secret-name |
| bucket名稱 | 選擇已創建bucket。 |
| 掛載選項 | 掛載參數,用戶可根據自己的情況實際定制相關參數。 |
| 標簽 | 用于對 PV 對象進行標記和分類的元數據屬性,可以賦予 PV 以自定義的屬性或標識。 |
說明
靜態導入場景下,回收策略均為默認Retain,cstor-csi不會刪除數據。
參數配置完成后,點擊“確定”。創建成功后,可以在持久卷列表查看,此時PV狀態為“可用”
創建持久卷聲明(PVC)
進入主菜單“存儲”——“持久卷聲明”,單擊左上角“創建持久卷聲明”;
在創建對話框,配置持久卷聲明PVC的相關參數。配置項說明如下:
| 配置項 | 說明 |
| 名稱 | PVC的名稱 |
| 存儲聲明類型 | 前支持云盤、彈性文件、對象存儲、并行文件、海量文件和本地存儲,這里選擇對象存儲。 具體創建頁中展示的存儲類型由當前資源池支持情況決定。 |
| 分配模式 | 當前支持“使用存儲類”和“已有存儲卷”;這里選擇“已有存儲卷”。 |
| 持久卷名稱 | 選擇上一步創建的PV名稱。 |
參數配置完成后,點擊“確定”。創建成功后,可以在持久卷聲明列表查看。
進入持久卷聲明列表頁,等待PVC狀態為“已綁定” 。
3、創建工作負載
登錄“云容器引擎”管理控制臺;
在集群列表頁點擊進入指定集群;
進入主菜單“工作負載”——“有狀態”,單擊左上角“創建SatefulSet”;
在創建對話框,數據卷欄中,選擇添加數據卷,卷類型選擇“使用已有PVC”,操作欄選擇“添加已有PVC”;
在實例內容器欄,為容器設置掛載點。選擇添加掛載點,選擇數據卷為上一步創建,根據需要配置容器路徑和權限;
說明
數據卷子路徑:對象存儲支持配置卷內子路徑,實現一個共享卷掛載多個路徑。
所有的信息都配置完成后,單擊 “提交” 。
創建成功后,您就可以正常使用數據卷。
通過kubectl命令行使用對象存儲靜態存儲卷
1、創建持久卷(PV)
使用kubectl連接集群,創建示例yaml文件pv-example.yaml:
apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
pv.kubernetes.io/provisioned-by: zos.csi.cstor.com
name: pvc-{PV-NAME} #pv名稱
spec:
accessModes:
- ReadWriteOnce #訪問模式
capacity:
storage: 5Gi #容量
csi:
driver: zos.csi.cstor.com
nodePublishSecretRef:
name: {SECRET-NAME} #保密字典名稱
namespace: {SECRET-NAMESPACE} #保密字典命名空間
volumeAttributes:
bucket: {BUCKET-NAME} #bucket名稱
driverType: zos.csi.cstor.com
type: STANDARD #產品類型
volumeHandle: 0105-{PV-NAME-LENTH}-{PV-NAME} #PV-NAME-LENTH為PV-NAME長度的十六進制表示,比如PV-NAME是"zos-test-01",則PV-NAME-LENTH為0B
volumeMode: Filesystem執行以下命令,創建PV
kubectl apply -f pv-example.yaml查看創建的PV:登錄“云容器引擎”管理控制臺;在集群列表頁點擊進入指定集群;進入主菜單“存儲”——“持久卷”,在持久卷列表查看。
2、創建持久卷聲明(PVC)
使用kubectl連接集群,創建示例yaml文件pvc-example.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
volume.beta.kubernetes.io/storage-provisioner: zos.csi.cstor.com
name: {YOUR-PVC-NAME}
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
volumeMode: Filesystem
volumeName: {YOUR-PV-NAME} #替換PV名稱執行以下命令,創建PVC
kubectl apply -f pvc-example.yaml查看創建的PVC:登錄“云容器引擎”管理控制臺;在集群列表頁點擊進入指定集群;進入主菜單“存儲”——“持久卷聲明”,在列表查看。
3、創建工作負載
使用kubectl連接集群,創建示例yaml文件sts-example.yaml:
apiVersion: "apps/v1"
kind: "StatefulSet"
metadata:
name: "zos-test"
namespace: "default"
spec:
podManagementPolicy: "OrderedReady"
replicas: 1
revisionHistoryLimit: 10
serviceName: ""
template:
spec:
containers:
- image: "nginx:1.25-alpine"
imagePullPolicy: "IfNotPresent"
name: "container1"
resources:
limits:
cpu: "100m"
memory: "256Mi"
requests:
cpu: "100m"
memory: "256Mi"
terminationMessagePath: "/dev/termination-log"
terminationMessagePolicy: "File"
volumeMounts:
- mountPath: "/tmp"
name: "volume1"
subPath: "ccsetest"
dnsPolicy: "ClusterFirst"
restartPolicy: "Always"
schedulerName: "default-scheduler"
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- name: "volume1"
persistentVolumeClaim:
claimName: {YOUR-PVC-NAME} #替換為步驟2中的PVC名稱
updateStrategy:
rollingUpdate:
partition: 0
type: "RollingUpdate"執行以下命令,創建StatefulSet
kubectl apply -f sts-example.yaml查看創建的有狀態負載:登錄“云容器引擎”管理控制臺;在集群列表頁點擊進入指定集群;進入主菜單“工作負載”——“有狀態”,在列表查看
驗證數據持久化
登錄“云容器引擎”管理控制臺;
在集群列表頁點擊進入指定集群;
進入主菜單“工作負載”——“有狀態”,進入負載詳情;
在Pod列表頁,選擇“遠程登錄”,進入到容器內執行以下命令:
向/tmp 目錄下寫一個文件,執行echo "Hello World" > /tmp/test.log
查看/tmp目錄下文件,執行ls /tmp,預期結果如下:
lost+found test.log退出“遠程登錄”,對上一步中的Pod執行“銷毀重建”,等待Pod重新運行正常;
對新建Pod,繼續執行“遠程登錄”,進入到容器內查看數據。執行cat /tmp/test.log,預期結果如下:
Hello World登錄“天翼云對象存儲”管理控制臺,根據PV名稱查看bucket,進入bucket——文件管理,可以看到在容器內創建的文件:
下載文件并查看內容,預期結果與容器內寫入數據一致。
以上步驟說明,pod刪除重建后,重新掛載對象存儲卷,數據仍然存在;從對象存儲下載數據并與寫入數據一致, 說明對象存儲中的數據可持久化保存。