首頁
容器服務 Kubernetes 版 ACK
容器服務 Kubernetes 版
操作指南
存儲
【已棄用】存儲-Flexvolume
云盤存儲卷
使用云盤動態存儲卷實現持久化存儲-Flexvolume
當容器發生宕機故障時,有狀態服務容器存儲的業務數據存在著丟失和不可靠等風險。使用持久化存儲可以解決該問題。本文介紹如何使用云盤動態存儲卷實現持久化存儲。
背景信息
動態云盤的使用場景:
沒有購買云盤,在應用部署時自動購買云盤的情況。
動態云盤的使用方式:
- 手動創建PVC,在PVC中聲明StorageClass。
- 部署應用時通過StorageClass自動創建PV。
前提條件
- 已創建Kubernetes集群,請參見創建Kubernetes托管版集群。
- 已通過kubectl連接到Kubernetes集群,請參見步驟二:選擇集群憑證類型。
- 集群中已安裝Provisioner插件,該插件可以根據StorageClass自動創建云盤。
Provisioner插件
容器服務Kubernetes版在創建集群時,默認安裝Provisioner插件。
創建StorageClass
阿里云容器服務Kubernetes在系統初始化的時候會默認創建4個StorageClass,且使用參數的默認情況。同時這4個StorageClass僅適用于單可用區集群,若是多可用區集群,則需要您創建StorageClass。這4個StorageClass分別為:
- alicloud-disk-common:自動創建普通云盤。
- alicloud-disk-efficiency:自動創建高效云盤。
- alicloud-disk-ssd:自動創建SSD云盤。
- alicloud-disk-available:提供高可用選項,先嘗試自動創建SSD云盤;如果相應可用區的SSD云盤資源售盡,再嘗試自動創建高效云盤。
- 創建storageclass.yaml文件。
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: alicloud-disk-ssd-hangzhou-b provisioner: alicloud/disk reclaimPolicy: Retain parameters: type: cloud_ssd regionId: cn-hangzhou zoneId: cn-hangzhou-b fstype: "ext4" readonly: "false"
參數 描述 provisioner
動態云盤配置為alicloud/disk,標識使用provisioner插件自動創建阿里云云盤。 reclaimPolicy
云盤的回收策略。支持Delete和Retain,默認情況為Delete。 說明 如果配置為Delete,刪除PVC時,云盤會一起刪除,云盤上的數據不可恢復。type
自動創建云盤的類型,支持cloud、cloud_efficiency、cloud_ssd、available。 regionId
(可選)自動創建云盤所在的地域,與集群的地域相同。 zoneId
(可選)自動創建云盤所在的區域。 - 單可用區集群,與集群所在區域相同。
- 多可用區集群,zoneid可同時配置多個,例如:
zoneid: cn-hangzhou-a,cn-hangzhou-b,cn-hangzhou-c
fstype
(可選)自動創建云盤所使用的文件系統,默認情況為ext4。 readonly
(可選)掛載自動創建云盤的權限是否為可讀,支持true:云盤具有只讀權限,false:云盤具有可讀可寫權限,默認情況為false。 encrypted
(可選)自動創建的云盤是否加密,支持true:加密,false:不加密,默認情況為false。 - 執行以下命令,創建StorageClass。
kubectl create -f storageclass.yaml
創建PVC
- 創建pvc-ssd.yaml文件。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: disk-ssd spec: accessModes: - ReadWriteOnce storageClassName: alicloud-disk-ssd-hangzhou-b resources: requests: storage: 20Gi
- 執行以下命令,創建PVC。
kubectl create -f pvc-ssd.yaml
在目標集群的頁面下單擊左側導航欄的StorageClass
中聲明的alicloud-disk-ssd-hangzhou-b,并且關聯存儲卷。
創建應用
- 創建pvc-dynamic.yaml文件。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-dynamic labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx volumeMounts: - name: disk-pvc mountPath: "/data" volumes: - name: disk-pvc persistentVolumeClaim: claimName: disk-ssd
- 執行以下命令,創建Deployment。
kubectl create -f nginx-dynamic.yaml
在目標集群頁面下單擊左側導航欄的
,可以看到剛剛創建的Deployment。動態云盤的持久化存儲
- 執行以下命令,查看部署的Deployment所在Pod的名稱。
kubectl get pod | grep dynamic
預期輸出:
nginx-dynamic-5c74594ccb-zl9pf 2/2 Running 0 3m
- 執行以下命令,查看/data路徑下是否掛載了新的云盤。
kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- df | grep data
預期輸出:
/dev/vdh 20511312 45080 20449848 1% /data
- 執行以下命令,查看/data路徑下的文件。
kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- ls /data
預期輸出:
lost+found
- 執行以下命令,在/data路徑下創建文件dynamic。
kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- touch /data/dynamic
- 執行以下命令,查看/data路徑下的文件。
kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- ls /data
預期輸出:
dynamic lost+found
- 執行以下命令,刪除名稱為
nginx-dynamic-5c74594ccb-zl9pf
的Pod。kubectl delete pod nginx-dynamic-5c74594ccb-zl9pf
預期輸出:
pod "nginx-dynamic-5c74594ccb-zl9pf" deleted
- 同時在另一個窗口中,執行以下命令,查看Pod刪除及Kubernetes重建Pod的過程。
kubectl get pod -w -l app=nginx
預期輸出:NAME READY STATUS RESTARTS AGE nginx-dynamic-5c74594ccb-zl9pf 2/2 Running 0 6m48s nginx-dynamic-5c74594ccb-zl9pf 2/2 Terminating 0 7m32s nginx-dynamic-5c74594ccb-45sd4 0/2 Pending 0 0s nginx-dynamic-5c74594ccb-45sd4 0/2 Pending 0 0s nginx-dynamic-5c74594ccb-45sd4 0/2 Init:0/1 0 0s nginx-dynamic-5c74594ccb-zl9pf 0/2 Terminating 0 7m32s nginx-dynamic-5c74594ccb-zl9pf 0/2 Terminating 0 7m33s nginx-dynamic-5c74594ccb-zl9pf 0/2 Terminating 0 7m33s nginx-dynamic-5c74594ccb-45sd4 0/2 PodInitializing 0 5s nginx-dynamic-5c74594ccb-45sd4 2/2 Running 0 22s
- 執行以下命令,查看Kubernetes重建的Pod名稱。
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE nginx-dynamic-5c74594ccb-45sd4 2/2 Running 0 2m
- 執行以下命令,查看/data路徑下的文件,剛剛創建的文件dynamic并沒有被刪除,說明動態云盤的數據可持久保存。
kubectl exec nginx-dynamic-5c74594ccb-45sd4 -- ls /data
預期輸出:
dynamic lost+found
文檔內容是否對您有幫助?