使用對象存儲靜態存儲卷,即使用預先在對象存儲控制臺已創建Bucket,通過手動創建PV指定已有Bucket,創建PVC時使用已有PV的方式,實現容器內掛載對象存儲。
該模式下需要用戶自建對象存儲Bucket及PV資源,一定程度上增加操作和管理復雜性。
前提條件
確保您已經創建Serverless集群,具體操作請參閱創建Serverless集群。若已有Serverless集群,無需重復操作。
已在插件市場安裝存儲插件cstor-csi,且插件正常運行。
容器集群所在資源池已開通對象存儲服務。
已在對象存儲控制臺創建Bucket。
確保kubectl工具已經連接目標集群。
使用對象存儲靜態存儲卷(kubectl)
步驟一:創建保密字典
創建示例yaml文件zos-test.yaml:
apiVersion: v1
data:
AK: xxxxxxxxxxxx #填寫base64編碼后的AK
SK: xxxxxxxxxxxx #填寫base64編碼后的SK
kind: Secret
metadata:
name: zos-test
namespace: default
type: Opaque執行以下命令,創建secret:
kubectl apply -f zos-test.yaml步驟二:創建持久卷(PV)
創建示例yaml文件pv-static-zos.yaml:
apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
pv.kubernetes.io/provisioned-by: zos.csi.cstor.com
name: pvc-{PV-NAME} #pv名稱,以pvc-開頭
spec:
accessModes:
- ReadWriteOnce #訪問模式
capacity:
storage: 5Gi #容量
csi:
driver: zos.csi.cstor.com
nodePublishSecretRef:
name: {SECRET-NAME} #保密字典名稱
namespace: {SECRET-NAMESPACE} #保密字典命名空間
volumeAttributes:
bucket: {BUCKET-NAME} #bucket名稱
mountEndpoint: //100.123.xxx.xx:80 #掛載地址,在存儲控制臺可查
driverType: zos.csi.cstor.com
type: STANDARD #產品類型
volumeHandle: 0105-{PV-NAME-LENTH}-{PV-NAME} #PV-NAME-LENTH為PV-NAME長度的十六進制表示,比如PV-NAME是"pv-static-zos",則PV-NAME-LENTH為0D
volumeMode: Filesystem執行以下命令,創建pv:
kubectl apply -f pv-static-zos.yaml步驟三:創建持久卷聲明(PVC)
創建示例yaml文件pvc-static-zos.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
volume.beta.kubernetes.io/storage-provisioner: zos.csi.cstor.com
name: pvc-static-zos
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
volumeMode: Filesystem
volumeName: {YOUR-PV-NAME} #替換PV名稱執行以下命令,創建pvc:
kubectl apply -f pvc-static-zos.yaml步驟四:創建工作負載
創建示例yaml文件pod-pvc-static-zos.yaml:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nginx-pvc-static-zos
labels:
app: nginx-pvc-static-zos
spec:
replicas: 1
serviceName: ""
selector:
matchLabels:
app: nginx-pvc-static-zos
template:
metadata:
labels:
app: nginx-pvc-static-zos
spec:
containers:
- image: "registry-huadong1.crs-internal.daliqc.cn/open-source/nginx:1.26-alpine-slim"
imagePullPolicy: "IfNotPresent"
name: "nginx"
resources:
limits:
cpu: "100m"
memory: "256Mi"
requests:
cpu: "100m"
memory: "256Mi"
volumeMounts:
- mountPath: "/mnt/data"
name: "volume1"
subPath: "scetest"
volumes:
- name: "volume1"
persistentVolumeClaim:
claimName: {YOUR-PVC-NAME} #替換為步驟3中的PVC名稱
執行以下命令,創建StatefulSet:
kubectl apply -f pod-pvc-static-zos.yaml步驟五:驗證數據持久化
登錄彈性容器服務管理控制臺。
在容器組列表頁點擊剛才創建的實例。
點擊“遠程連接”頁簽,進入到容器內。
向/mnt/data 目錄下寫一個文件,執行:
echo "Hello World" > /mnt/data/test.log查看/mnt/data 目錄下文件,執行:
cat /mnt/data/test.log預期結果如下:
退出“遠程連接”,使用kubectl刪除pod,會觸發pod自動重建,等待Pod重新運行正常。
kubectl delete po nginx-pvc-static-zos-0對新建Pod,登錄“彈性容器服務”管理控制臺,繼續執行“遠程連接”,進入到容器內查看數據。執行:
cat /mnt/data/test.log預期結果如下:
登錄天翼云對象存儲管理控制臺,根據PV名稱查看bucket,進入bucket中的文件管理,可以看到在容器內創建的文件:
下載文件并查看內容,預期結果與容器內寫入數據一致。
以上步驟說明,pod刪除重建后,重新掛載對象存儲卷,數據仍然存在;從對象存儲下載數據并與寫入數據一致, 說明對象存儲中的數據可持久化保存。