ENS雲端硬碟是在ACK Edge叢集的ENS節點上使用的雲端硬碟。ACK Edge叢集支援使用CSI外掛程式建立ENS雲端硬碟靜態儲存卷和ENS雲端硬碟動態儲存裝置卷。本文介紹如何在CSI外掛程式中掛載ENS雲端硬碟靜態儲存卷和ENS雲端硬碟動態儲存裝置卷。
前提條件
已建立ACK Edge叢集,具體操作,請參見建立邊緣託管版叢集。
已安裝csi-ens-plugin和csi-ens-provisioner組件,具體操作,請參見管理組件。
已通過Kubectl串連Kubernetes叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
使用靜態雲端硬碟時,請確保已建立隨用隨付的ENS雲端硬碟並記錄雲端硬碟ID為
d-wz92s6d95go6ki9x****
。
使用說明
在應用部署時,推薦通過StorageClass自動建立PV購買雲端硬碟。如果您已經購買雲端硬碟,則使用雲端硬碟靜態儲存卷。
申請雲端硬碟的大小,不能超出雲端硬碟的單盤容量範圍。更多資訊,請參見儲存規格。
當Pod重建時,會重新掛載原雲端硬碟。若由於其他限制無法調度到原可用性區域,則Pod將會處於Pending狀態。
動態建立的雲端硬碟為隨用隨付的雲端硬碟,關於雲端硬碟計費項目資訊,請參見Block Storage計費。關於雲端硬碟的價格資訊,請參見Elastic Compute Service產品詳情頁。
ENS雲端硬碟為阿里雲儲存團隊提供的非共用儲存,只能同時被一個Pod掛載。
ACK Edge叢集中與ENS雲端硬碟在同一地區的ENS節點才能掛載ENS雲端硬碟。
不支援回收和刪除ENS雲端硬碟。相關操作,需在操作。
使用ENS雲端硬碟動態儲存裝置卷
步驟一:建立storageclass
在多地區叢集情境下,您可以根據不同的情境通過以下兩種方式建立StorageClass。
方式一:使用Topology(延遲綁定)方式建立StorageClass
延遲綁定可以最佳化ACK Edge叢集中存在多個地區的問題。以下通過部署名為storage-class-csi-topology.yaml檔案為例,建立StorageClass。
使用以下內容,建立storage-class-topology.yaml檔案。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-ens-disk-available provisioner: ensplugin.csi.alibabacloud.com parameters: type: available fsType: ext4 volumeBindingMode: WaitForFirstConsumer reclaimPolicy: Retain allowVolumeExpansion: false
參數
說明
name
StorageClass的名稱。
provisioner
配置為
ensplugin.csi.alibabacloud.com
。表示使用ENS雲端硬碟Provisioner外掛程式建立StorageClass。type
雲端硬碟類型。
regionId
可選,自動建立雲端硬碟所在的地區。
reclaimPolicy
雲端硬碟的回收策略,僅支援
Retain
,當刪除PVC的時候,PV和雲端硬碟資料不會被刪除,需要您手動刪除。volumeBindingMode
雲端硬碟的繫結模式。預設為
Immediate
,支援WaitForFirstConsumer
。Immediate
:表示先建立雲端硬碟再建立Pod。WaitForFirstConsumer
:延遲綁定,即調度器先調度Pod,並根據Pod的可用性區域資訊建立雲端硬碟。
執行以下命令,建立StorageClass。
kubectl apply -f storage-class-topology.yaml
查看建立的StorageClass。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在儲存類頁面查看建立的StorageClass。
方式二:先建立雲端硬碟再建立Pod的方式建立StorageClass
使用以下內容,建立storage-class-csi.yaml檔案。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-ens-disk-available provisioner: ensplugin.csi.alibabacloud.com parameters: type: available regionId: xxx reclaimPolicy: Retain allowVolumeExpansion: false volumeBindingMode: Immediate
執行以下命令,建立StorageClass。
kubectl apply -f storage-class-csi.yaml
查看建立的StorageClass。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在儲存類頁面查看建立的StorageClass。
步驟二:建立PVC
使用以下內容,建立pvc-ssd.yaml檔案。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 25Gi storageClassName: alicloud-ens-disk-available
執行以下命令,建立PVC。
kubectl create -f pvc-ssd.yaml
查看建立的PVC。
在叢集管理頁左側導覽列選擇
。可以在儲存聲明頁面查看建立的PVC。
步驟三:建立應用
使用以下內容,建立pvc-dynamic.yaml檔案。
建立一個名為nginx-dynamic的應用,並掛載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
參數
說明
mountPath
雲端硬碟掛載的位置。
claimName
PVC的名稱,用於綁定PVC。
執行以下命令, 建立應用並掛載PVC。
kubectl create -f pvc-dynamic.yaml
查看建立的應用。
在叢集管理頁左側導覽列選擇
。您可以在有狀態頁面看到建立的應用。
使用ENS雲端硬碟靜態儲存卷
步驟一:建立PV
使用以下內容,建立pv-static.yaml檔案。
apiVersion: v1 kind: PersistentVolume metadata: name: csi-pv labels: alicloud-pvname: static-disk-pv spec: capacity: storage: 25Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain csi: driver: ensplugin.csi.alibabacloud.com volumeHandle: "<your-disk-id>" nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.ensplugin.csi.alibabacloud.com/region operator: In values: - "<your-node-region-id>" # ENS節點RegionID。可通過查看ENS節點label中topology.ensplugin.csi.alibabacloud.com/region參數查看ENS節點RegionID。
參數
說明
name
PV的名稱。
labels
設定PV的標籤。
storage
雲端硬碟的可使用量。
accessModes
設定訪問模式。
persistentVolumeReclaimPolicy
PV的回收策略。
driver
定義驅動類型。取值為
ensplugin.csi.alibabacloud.com
,表示使用ENS雲端硬碟CSI外掛程式。volumeHandle
定義雲端硬碟ID。
nodeAffinity
定義PV和PVC所屬的地區資訊。
通過定義該參數,可以將PV和PVC所在的Pod調度到對應的地區上。
執行以下命令,建立PV。
kubectl create -f pv-static.yaml
查看建立的PV。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在儲存卷頁面可看到建立的PV。
步驟二:建立PVC
使用以下內容,建立pvc-static.yaml檔案。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 25Gi selector: matchLabels: alicloud-pvname: static-disk-pv
參數
說明
name
PVC的名稱。
accessModes
設定訪問模式。
storage
聲明應用使用量,不能大於儲存卷的總量。
matchLabels
通過標籤關聯PV,與PV標籤保持一致。
執行以下命令,建立PVC。
kubectl create -f pvc-static.yaml
查看建立的PVC。
在叢集管理頁左側導覽列選擇
。可以在儲存聲明頁面查看建立的PVC。
步驟三:建立應用
本文以Web應用為例,在應用中掛載PVC。
使用以下內容,建立web.yaml檔案。
apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: selector: matchLabels: app: nginx serviceName: "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: csi-pvc
參數
說明
mountPath
雲端硬碟掛載的位置。
claimName
PVC的名稱,用於綁定PVC。
執行以下命令,建立一個掛載了ENS雲端硬碟靜態儲存卷的應用並掛載PVC。
kubectl apply -f web.yaml
在叢集管理頁左側導覽列選擇
。在有狀態頁面可看到建立的Web應用,且應用能正常啟動,說明ENS雲端硬碟已經掛載成功。