除靜態儲存外,您也可以建立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自動建立PV購買雲端硬碟。如果您已經購買雲端硬碟,推薦使用雲端硬碟靜態儲存卷。
申請雲端硬碟的大小,不能超出雲端硬碟的單盤容量範圍。更多資訊,請參見儲存規格。
當Pod重建時,會重新掛載原雲端硬碟。若由於其他限制無法調度到原可用性區域,則Pod將會處於Pending狀態。
動態建立的雲端硬碟為隨用隨付的雲端硬碟,關於雲端硬碟計費項目資訊,請參見Block Storage計費。關於雲端硬碟的價格資訊,請參見Elastic Compute Service產品詳情頁。
您可以通過控制台建立StorageClass和PVC並建立應用,也可以通過kubectl完成此操作。
通過控制台使用雲端硬碟動態儲存裝置卷
步驟一:建立StorageClass
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在儲存類頁面,單擊右上方的建立。
在建立對話方塊,配置儲存類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機型支援的雲端硬碟類型不同。更多資訊,請參見Block StorageFAQ。
回收策略
雲端硬碟的回收策略,預設為
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。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
先建立雲端硬碟再建立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。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
步驟二:建立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儲存卷。