使用云盤動態(tài)存儲卷
云盤是阿里云為云服務(wù)器ECS提供的數(shù)據(jù)塊級別的塊存儲產(chǎn)品,具有低時延、高性能、持久性、高可靠等特點。ACK Serverless支持使用CSI插件創(chuàng)建云盤動態(tài)存儲卷。本文介紹如何使用云盤動態(tài)存儲卷,及如何驗證云盤動態(tài)存儲卷的持久化存儲特性。
前提條件
已創(chuàng)建ACK Serverless集群。具體操作,請參見創(chuàng)建ACK Serverless集群。
已通過kubectl工具連接ACK Serverless集群。具體操作,請參見通過kubectl連接Kubernetes集群。
已手動安裝CSI存儲插件。具體操作,請參見安裝與升級csi-provisioner組件。
背景信息
有關(guān)StorageClass的詳細(xì)說明,請參見存儲類(StorageClass)。
操作步驟
通過控制臺的方式使用云盤動態(tài)存儲卷
步驟一:創(chuàng)建StorageClass
登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在存儲類頁面,單擊右上角的創(chuàng)建。
在創(chuàng)建對話框,配置StorageClass的相關(guān)參數(shù)。
部分配置項說明如下所示:
配置項
說明
名稱
StorageClass的名稱。
名稱必須以小寫字母開頭,只能包含小寫字母、數(shù)字、小數(shù)點(.)和短劃線(-)。
存儲卷類型
選擇云盤。
參數(shù)
默認(rèn)參數(shù)type,其值為cloud_essd。表示云盤類型,支持cloud_efficiency、cloud_ssd、cloud_essd、available四種參數(shù)及除available外其他三種參數(shù)的任意組合。例如,
type: cloud_efficiency, cloud_ssd, cloud_essd
,這種配置方式支持對指定類型云盤的依次創(chuàng)建,直到創(chuàng)建成功。其中available會對SSD、高效依次嘗試創(chuàng)建,直到創(chuàng)建成功。說明部分ECS機型不支持ESSD云盤掛載。更多信息,請參見塊存儲FAQ。
可添加自定義參數(shù)。例如,配置zoneId,表示自動創(chuàng)建云盤所在的區(qū)域。單可用區(qū)集群,與集群所在區(qū)域相同。例如,
cn-beijing-a
;多可用區(qū)集群,zoneId可同時配置多個。例如,cn-beijing-a, cn-beijing-b
。回收策略
云盤的回收策略,默認(rèn)為Delete,支持Retain。
Delete模式:刪除PVC的時候,PV和云盤會一起刪除。
Retain模式:刪除PVC的時候,PV和云盤數(shù)據(jù)不會被刪除,需要您手動刪除。
如果數(shù)據(jù)安全性要求高,推薦使用Retain模式以免誤刪數(shù)據(jù)。
綁定模式
云盤的綁定模式。默認(rèn)為Immediate:表示先創(chuàng)建云盤再創(chuàng)建Pod。
參數(shù)配置完成后,單擊創(chuàng)建。
創(chuàng)建成功后在存儲類列表中可看到剛創(chuàng)建的StorageClass。
步驟二:創(chuàng)建PVC
在集群管理頁左側(cè)導(dǎo)航欄,選擇 。
在存儲聲明頁面,單擊右上角的創(chuàng)建。
在創(chuàng)建存儲聲明對話框中,配置參數(shù)。
配置項
說明
存儲聲明類型
支持云盤、NAS兩種云存儲類型。本文中選擇云盤。
名稱
創(chuàng)建的存儲聲明名稱在命名空間內(nèi)必須唯一。
分配模式
本文中選擇使用存儲類動態(tài)創(chuàng)建。
已有存儲類
單擊選擇存儲類,在選擇存儲類對話框目標(biāo)存儲類右側(cè)操作列單擊選擇。
總量
所創(chuàng)建存儲卷的容量。
訪問模式
默認(rèn)為ReadWriteOnce。
單擊創(chuàng)建。
創(chuàng)建成功后在存儲聲明列表中可看到創(chuàng)建的存儲聲明,并且已綁定相應(yīng)的存儲卷。
步驟三:創(chuàng)建應(yīng)用
在集群管理頁左側(cè)導(dǎo)航欄,選擇 。
在有狀態(tài)頁面,單擊使用鏡像創(chuàng)建。
- 配置創(chuàng)建應(yīng)用的參數(shù)信息。以下主要為您介紹數(shù)據(jù)卷的配置。關(guān)于其他參數(shù)的描述,請參見創(chuàng)建有狀態(tài)工作負(fù)載StatefulSet。
ASK數(shù)據(jù)卷支持配置本地存儲和云存儲,本示例需要配置云存儲類型。
本例中配置了一個云盤類型的數(shù)據(jù)卷,將該云盤掛載到容器中/tmp路徑下,在該路徑下生成的容器數(shù)據(jù)會存儲到云盤中。 - 所有的信息都配置完成后,單擊創(chuàng)建。創(chuàng)建成功后,您就可以正常使用數(shù)據(jù)卷。
通過kubectl命令行的方式使用云盤動態(tài)存儲卷
步驟一:創(chuàng)建StorageClass
在多可用區(qū)集群場景下,您可以使用先創(chuàng)建云盤,然后再創(chuàng)建Pod的方式創(chuàng)建StorageClass。
使用以下內(nèi)容,創(chuàng)建storage-class-csi.yaml文件。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-disk-ssd-b provisioner: diskplugin.csi.alibabacloud.com parameters: type: cloud_ssd encrypted: "false" reclaimPolicy: Retain allowVolumeExpansion: true volumeBindingMode: Immediate
參數(shù)
說明
provisioner
配置為
diskplugin.csi.alibabacloud.com
。表示使用阿里云云盤Provisioner插件創(chuàng)建StorageClass。type
表示云盤類型,支持cloud_efficiency、cloud_ssd、cloud_essd、available四種參數(shù)及除available外其他三種參數(shù)的任意組合。例如,
type: cloud_efficiency, cloud_ssd, cloud_essd
,這種配置方式支持對指定類型的云盤依次創(chuàng)建,直到創(chuàng)建成功。其中available會對SSD、高效依次嘗試創(chuàng)建,直到創(chuàng)建成功。說明部分ECS機型不支持ESSD云盤掛載。更多信息,請參見塊存儲FAQ。
encrypted
可選,標(biāo)識創(chuàng)建的云盤是否加密。默認(rèn)為false,創(chuàng)建的云盤不加密。
reclaimPolicy
云盤的回收策略,默認(rèn)為Delete,支持Retain。
Delete模式:刪除PVC時,PV和云盤會一起刪除。
Retain模式:刪除PVC時,PV和云盤數(shù)據(jù)不會被刪除,需要您手動刪除。
如果數(shù)據(jù)安全性要求高,推薦使用Retain方式以免誤刪數(shù)據(jù)。
allowVolumeExpansion
配置為true時,可以實現(xiàn)云盤的自動擴容。
volumeBindingMode
云盤的綁定模式。默認(rèn)為Immediate:表示先創(chuàng)建云盤再創(chuàng)建Pod。
執(zhí)行以下命令,創(chuàng)建StorageClass。
kubectl apply -f storage-class-csi.yaml
查看創(chuàng)建的StorageClass。
登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在存儲類頁面查看創(chuàng)建的StorageClass。
步驟二:創(chuàng)建PVC
使用以下內(nèi)容,創(chuàng)建pvc-ssd.yaml文件。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 25Gi storageClassName: alicloud-disk-ssd-b
參數(shù)
說明
name
PVC的名稱。
accessModes
配置訪問模式。
volumeMode
可選,掛載云盤的格式,支持Filesystem文件系統(tǒng)掛載。
storageClassName
StorageClass的名稱,用于綁定StorageClass。
storage
申請的云盤大小,最小為20 GiB。
執(zhí)行以下命令,創(chuàng)建PVC。
kubectl create -f pvc-ssd.yaml
查看創(chuàng)建的PVC。
在集群管理頁左側(cè)導(dǎo)航欄選擇
。可以在存儲聲明頁面看到創(chuàng)建的PVC。
步驟三:創(chuàng)建應(yīng)用
創(chuàng)建pvc-dynamic.yaml文件。
創(chuàng)建一個名為nginx-dynamic的應(yīng)用,并掛載PVC。
apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx-dynamic spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 name: web volumeMounts: - name: pvc-disk mountPath: /data volumes: - name: pvc-disk persistentVolumeClaim: claimName: disk-pvc
參數(shù)
說明
mountPath
云盤掛載的位置。
claimName
PVC的名稱,用于綁定PVC。
執(zhí)行以下命令,創(chuàng)建應(yīng)用并掛載PVC。
kubectl create -f pvc-dynamic.yaml
查看創(chuàng)建的應(yīng)用。
在集群管理頁左側(cè)導(dǎo)航欄選擇
。您可以在有狀態(tài)頁面看到創(chuàng)建的應(yīng)用。
驗證動態(tài)云盤的持久化存儲
當(dāng)某個Pod被刪除時,重新部署的Pod將保留之前Pod在存儲卷中寫入的所有數(shù)據(jù)。您可以通過以下示例驗證動態(tài)云盤的持久化存儲特性。
查看MySQL應(yīng)用所在的Pod和云盤文件。
執(zhí)行以下命令,查看MySQL應(yīng)用所在Pod的名稱。
kubectl get pod | grep mysql
預(yù)期輸出:
nginx-dynamic-1**** 1/1 Running 0 3m
執(zhí)行以下命令,查看
/data
路徑下是否掛載了新的云盤。kubectl exec nginx-dynamic-1**** -- df | grep data
預(yù)期輸出:
/dev/vdh 20511312 45080 20449848 1% /data
執(zhí)行以下命令,查看
/data
路徑下的文件。kubectl exec nginx-dynamic-1**** -- ls /data
預(yù)期輸出:
lost+found
在云盤里創(chuàng)建文件。
執(zhí)行以下命令,在
/data
路徑下創(chuàng)建文件mysql
。kubectl exec nginx-dynamic-1**** -- touch /data/mysql
執(zhí)行以下命令,查看
/data
路徑下的文件。kubectl exec nginx-dynamic-1**** -- ls /data
預(yù)期輸出:
mysql lost+found
執(zhí)行以下命令,刪除名為
nginx-dynamic-1****
的Pod。kubectl delete pod ngibnx-dynamic-1****
預(yù)期輸出:
pod "nginbx-dynamic-1****" deleted
驗證刪除Pod后,云盤中創(chuàng)建的文件是否仍然存在。
執(zhí)行以下命令,查看重建的Pod名稱。
kubectl get pod
預(yù)期輸出:
NAME READY STATUS RESTARTS AGE nginx-dynamic-2**b** 1/1 Running 0 2m
執(zhí)行以下命令,查看/data路徑下的文件。
kubectl exec nginx-dynamic-2**** -- ls /data
預(yù)期輸出:
mysql lost+found
mysql
文件仍然存在,說明動態(tài)云盤的數(shù)據(jù)可以持久保存。