除靜態存儲外,您也可以創建PVC并配置StorageClass來實現存儲資源的動態分配,讓系統為您自動預留持久化存儲卷。您可以更關注集群應用的存儲需求,無需預先手動創建和配置存儲資源,降低底層基礎設施的復雜性。
使用限制
云盤不支持跨可用區使用。
未開啟多重掛載的云盤只能同時被一個Pod掛載。關于多重掛載更多信息,請參見使用NVMe云盤多重掛載及Reservation。
云盤類型和ECS類型需要匹配才可以掛載,否則會導致Pod無法啟動。關于云盤類型和ECS類型的匹配關系,請參見實例規格族。
重要當您將集群中的ECS實例從按量付費轉換成包年包月時,不能將云盤一起變成包年包月,否則云盤將無法被掛載使用。您可以通過購買SCU的方式降低成本。關于SCU的更多信息,請參見存儲容量單位包SCU概述。
前提條件
ACK集群中CSI組件已升級至最新版本。更多版本信息,請參見管理CSI組件。
如果您的集群中包含CentOS 7.9鏡像(或其他運行小于4.9版本Linux內核)的宿主機,并且在集群中使用了XFS文件系統(fstype參數設置為
xfs
)的存儲卷,請勿將CSI組件升級到v1.24.7及以上的版本。因為舊版內核與新版本組件不兼容。如果誤升級,掛載XFS文件系統的存儲卷的Pod將可能無法啟動,對其他文件系統無影響,請提交工單處理。如需將CSI組件升級至v1.26.4版本,您需要將CSI provisioner和CSI plugin同時升級至該版本。
使用說明
您可以通過控制臺創建StorageClass和PVC并創建應用,也可以通過kubectl完成此操作。
通過控制臺使用云盤動態存儲卷
步驟一:創建StorageClass
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在存儲類頁面,單擊右上角的創建。
在創建對話框,配置存儲類StorageClass的相關參數。
主要配置項說明如下。
配置項
說明
名稱
StorageClass的名稱。
存儲卷類型
可選擇云盤或NAS。本示例選擇云盤。
參數
云盤類型。默認參數為type,其值為cloud_essd,支持設置的參數值如下:
高效云盤:
cloud_efficiency
ESSD AutoPL:
cloud_auto
SSD云盤:
cloud_ssd
ESSD云盤:
cloud_essd
ESSD Entry:
cloud_essd_entry
以上參數可任意組合。例如
type: cloud_efficiency, cloud_ssd, cloud_essd
,此配置方式會支持對指定類型的云盤依次創建,直到創建成功。說明不同ECS機型支持的云盤類型不同。更多信息,請參見塊存儲FAQ。
resourceGroupId:可選,定義云盤的資源組。默認為
""
。regionId:可選,自動創建云盤所在的地域,與集群的地域相同。
zoneId:可選,自動創建云盤所在的區域。
單可用區集群,與集群所在區域相同。
多可用區集群,
zoneId
可同時配置多個,例如cn-beijing-a, cn-beijing-b
fstype:可選,自動創建云盤所使用的文件系統,取值
ext4
或xfs
,默認為ext4
。mkfsOptions:可選,云盤格式化所用的參數。例如
mkfsOptions: "-O project,quota"
。diskTags:可選,自定義云盤標簽。例如
diskTags: "a:b,b:c"
。也可以使用diskTags/a: b
的格式指定(v1.30.3起)。encrypted:可選,表示創建的云盤是否加密。默認為
false
,創建的云盤不加密。performanceLevel:可選,ESSD云盤的性能級別,取值
PL0
、PL1
、PL2
或PL3
。默認值為PL1
。更多信息,請參見容量范圍與性能級別的關系。volumeExpandAutoSnapshot:可選,云盤擴容時通過極速快照實現自動數據備份,保證數據安全,默認為
closed
。forced
:自動快照創建失敗時放棄云盤擴容。besteffort
:自動快照創建失敗時報event warning,繼續進行云盤擴容。closed
:不使用自動快照功能。
如果數據安全性要求高,推薦使用
forced
方式避免擴容失敗時的數據丟失。說明僅支持對ESSD云盤進行擴容。擴容正常時,自動快照將自動刪除;擴容失敗時,自動快照將保留24小時。
provisionedIops:可選,云盤的預配置性能(IOPS)。
可能值:0~min{50,000, 1000×容量-基準性能}。
基準性能=min{1,800+50×容量, 50000}。
說明該參數僅支持ESSD AutoPL云盤。更多信息,請參見ESSD AutoPL云盤規格。
burstingEnabled:可選,是否開啟Burst(性能突發)。默認為false。
true
:開啟。false
:不開啟。
說明該參數僅支持ESSD AutoPL云盤。更多信息,請參見ESSD AutoPL云盤規格。
multiAttach:可選,設置為
true
以開啟多實例掛載,請參見云盤多重掛載功能。
回收策略
云盤的回收策略,默認為
Delete
。Delete
:刪除PVC時,PV和云盤會一起刪除。Retain
:刪除PVC時,PV和云盤數據不會被刪除,需要您手動刪除。
如果數據安全性要求高,推薦使用Retain方式,以免誤刪數據。
綁定模式
云盤的綁定模式。默認為
Immediate
。Immediate
:表示先創建云盤再調度Pod。WaitForFirstConsumer
:延遲綁定,即調度器先調度Pod,并根據Pod的可用區信息創建云盤。
參數配置完成后,單擊創建。
創建成功后,您可在存儲類列表查看創建的StorageClass。
步驟二:創建PVC
在集群管理頁左側導航欄,選擇 。
在存儲聲明頁面,單擊右上角的創建。
在創建存儲聲明對話框,配置PVC參數。
配置項
說明
存儲聲明類型
支持云盤、NAS、OSS三種云存儲類型。本示例選擇云盤。
名稱
創建的存儲聲明名稱在命名空間內必須唯一。
分配模式
本示例選擇使用存儲類動態創建,即支持通過StorageClass動態創建PV。
已有存儲類
選擇已有的StorageClass,用于動態創建PV。
總量
所創建存儲卷的容量。
訪問模式
僅能使用
ReadWriteOnce
。更多選項請參見通過kubectl命令行使用云盤動態存儲卷。單擊創建。
創建成功后,在存儲聲明列表中可看到創建的存儲聲明,并且已綁定相應的存儲卷。
步驟三:創建應用
在集群管理頁左側導航欄,選擇 。
在有狀態頁面,單擊使用鏡像創建。
配置創建應用的參數信息。
以下主要為您介紹數據卷的配置。關于其他參數的描述,請參見創建有狀態工作負載StatefulSet。
ACK數據卷支持配置本地存儲和云存儲,本示例需要配置云存儲類型。配置了一個云盤類型的數據卷,將該云盤掛載到容器的/tmp路徑下,在該路徑下生成的容器數據會存儲到云盤中。
所有的信息都配置完成后,單擊創建。
創建成功后,您就可以正常使用數據卷。
通過kubectl命令行使用云盤動態存儲卷
步驟一:創建StorageClass
在多可用區集群場景下,您可以根據不同的場景通過以下兩種方式創建StorageClass。
使用Topology(延遲綁定)的方式
延遲綁定可以優化ECS和云盤不在一個可用區的問題。下文以部署名為storage-class-csi-wffc.yaml文件為例,創建StorageClass。
使用以下內容,創建storage-class-csi-wffc.yaml文件。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-disk-wait-for-first-consumer provisioner: diskplugin.csi.alibabacloud.com parameters: type: cloud_auto,cloud_essd,cloud_ssd # 使用該配置,按優先級自適應選擇云盤類型,最終創建的云盤類型受節點實例、所在可用區云盤支持情況等因素影響。 fstype: ext4 diskTags: "a:b,b:c" encrypted: "false" performanceLevel: PL1 volumeExpandAutoSnapshot: "forced" # 該設置僅在創建的云盤類型為cloud_essd時生效。 provisionedIops: "40000" burstingEnabled: "false" volumeBindingMode: WaitForFirstConsumer reclaimPolicy: Retain allowVolumeExpansion: true
參數
說明
metadata
name
StorageClass的名稱。名稱必須以小寫字母開頭,只能包含小寫字母、數字、小數點(.)和短劃線(-)。
provisioner
配置為
diskplugin.csi.alibabacloud.com
。表示使用阿里云云盤Provisioner插件創建StorageClass。parameters
參見上文參數列表。
volumeBindingMode
云盤的綁定模式。默認為
Immediate
,支持WaitForFirstConsumer
。Immediate
:表示先創建云盤再創建Pod。WaitForFirstConsumer
:延遲綁定,即調度器先調度Pod,并根據Pod的可用區信息創建云盤。
reclaimPolicy
云盤的回收策略,默認為
Delete
,支持Retain
。Delete
:刪除PVC時,PV和云盤會一起刪除。Retain
:刪除PVC時,PV和云盤數據不會被刪除,需要您手動刪除。
如果數據安全性要求高,推薦使用Retain方式以免誤刪數據。
allowVolumeExpansion
配置為true時,可以實現云盤的自動擴容。
執行以下命令,創建StorageClass。
kubectl apply -f storage-class-wffc.yaml
查看創建的StorageClass。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
先創建云盤再創建Pod的方式
使用以下內容,創建storage-class-immediate.yaml文件。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-disk-immediate provisioner: diskplugin.csi.alibabacloud.com parameters: type: cloud_essd,cloud_ssd,cloud_efficiency #使用該配置,按優先級自適應選擇云盤類型,最終創建的云盤類型受節點實例、所在可用區云盤支持情況等因素影響 regionId: cn-beijing zoneId: cn-beijing-b encrypted: "false" reclaimPolicy: Retain allowVolumeExpansion: true volumeBindingMode: Immediate
參數
說明
metadata
name
StorageClass的名稱。名稱必須以小寫字母開頭,只能包含小寫字母、數字、小數點(.)和短劃線(-)。
provisioner
配置為
diskplugin.csi.alibabacloud.com
。表示使用阿里云云盤Provisioner插件創建StorageClass。parameters
參見上文參數列表。
reclaimPolicy
云盤的回收策略,默認為
Delete
,支持Retain
。Delete
:刪除PVC時,PV和云盤會一起刪除。Retain
:刪除PVC時,PV和云盤數據不會被刪除,需要您手動刪除。
如果數據安全性要求高,推薦使用
Retain
方式,以免誤刪數據。allowVolumeExpansion
配置為
true
時,可以實現云盤的自動擴容。volumeBindingMode
云盤的綁定模式。默認為
Immediate
,支持WaitForFirstConsumer
。Immediate
:表示先創建云盤再調度Pod。WaitForFirstConsumer
:延遲綁定,即調度器先調度Pod,并根據Pod的可用區信息創建云盤。
執行以下命令,創建StorageClass。
kubectl apply -f storage-class-immediate.yaml
查看創建的StorageClass。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
步驟二:創建PVC
使用以下內容,創建pvc-disk.yaml文件。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 25Gi storageClassName: alicloud-disk-wait-for-first-consumer
參數
說明
name
PVC的名稱。
accessModes
配置訪問模式。
volumeMode
可選,掛載云盤的格式,為
Filesystem
或Block
。 默認為文件系統掛載。storageClassName
StorageClass的名稱,用于綁定StorageClass。
storage
申請的云盤大小,最小為20 GiB。
其中,可用的訪問模式取決于StorageClass中的multiAttach參數以及PVC中的volumeMode,如下表:
參數設置
可用訪問模式
multiAttach
volumeMode
ReadWriteOnce
ReadOnlyMany
ReadWriteMany
任意
Filesystem
Block
當使用云盤多掛載功能時,請參見使用NVMe云盤多重掛載及Reservation。
執行以下命令,創建PVC。
kubectl create -f pvc-disk.yaml
查看創建的PVC。
在集群管理頁左側導航欄,選擇
。在存儲聲明頁面可以看到創建的PVC。
步驟三:創建應用
使用以下命令,創建secret,用于設置mysql應用的root賬號密碼。請注意,在生產環境中請更換密碼。
kubectl create secret generic mysql-pass --from-literal=password=mypassword
使用以下內容,創建mysql.yaml文件。
apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql spec: selector: matchLabels: app: mysql serviceName: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:8 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 3306 name: mysql volumeMounts: - name: pvc-disk mountPath: /var/lib/mysql volumes: - name: pvc-disk persistentVolumeClaim: claimName: disk-pvc
參數
說明
mountPath
云盤掛載的位置。
claimName
PVC的名稱,用于綁定PVC。
執行以下命令,創建應用并掛載PVC。
kubectl create -f mysql.yaml
查看已創建的應用。
在集群管理頁左側導航欄,選擇
。您可以在有狀態頁面看到已創建的應用。
驗證動態云盤的持久化存儲
當某個Pod被刪除時,重新部署的Pod將保留之前Pod在存儲卷中寫入的所有數據。您可以通過以下示例驗證動態云盤的持久化存儲特性。
確認MySQL應用中已掛載云盤:執行以下命令,查看
/var/lib/mysql
路徑下是否掛載了新的云盤。kubectl exec mysql-0 -- df -h /var/lib/mysql
預期輸出:
Filesystem Size Used Avail Use% Mounted on /dev/vdd 25G 213M 25G 1% /var/lib/mysql
在云盤里創建文件。
執行以下命令,在
/var/lib/mysql
路徑下創建文件test-persistent
。kubectl exec mysql-0 -- touch /var/lib/mysql/test-persistent
執行以下命令,確認文件已創建。
kubectl exec mysql-0 -- ls /var/lib/mysql/test-persistent
預期輸出:
/var/lib/mysql/test-persistent
執行以下命令,刪除名為
mysql-0
的Pod。kubectl delete pod mysql-0
預期輸出:
pod "mysql-0" deleted
驗證刪除Pod后,云盤中創建的文件是否仍然存在。
執行以下命令,確認重建后的Pod已正常運行。
kubectl get pod mysql-0
預期輸出:
NAME READY STATUS RESTARTS AGE mysql-0 1/1 Running 0 12s
執行以下命令,查看之前創建的文件。
kubectl exec mysql-0 -- ls /var/lib/mysql/test-persistent
預期輸出:
/var/lib/mysql/test-persistent
test-persistent
文件仍然存在,說明動態云盤的數據可以持久保存。
相關文檔
如果您需要加強云盤存儲數據的安全性,請參見云盤存儲數據安全最佳實踐。
如果您需要實時了解云盤的使用情況,請參見使用csi-plugin組件監控節點側存儲資源。
如果您的云盤大小不滿足要求或磁盤已滿,請參見擴容云盤存儲卷。
關于如何實現StatefulSet的持久化存儲,請參見實現StatefulSet持久化存儲的最佳實踐-CSI。
如果您在云盤存儲卷的使用過程中遇到問題,請參見云盤存儲卷FAQ進行自排查。
如果您有多個Pod共享存儲或跨可用區存儲的需求時,推薦使用NAS存儲卷,請參見NAS存儲卷。