通過定義CNFS中託管的NAS儲存卷的自動擴容策略,當NAS儲存卷的使用率高於某個閾值時,觸發NAS儲存卷的自動擴容。本文介紹如何使用CNFS實現NAS儲存卷的自動擴容。
前提條件
已建立Kubernetes託管版叢集,且儲存外掛程式選擇為CSI。
若需要建立叢集,選擇CSI儲存外掛程式時,請同時選中建立預設NAS檔案系統和CNFS容器網路檔案系統動態儲存裝置類型,並預設開啟NAS資源回收筒特性,支援資料快速恢複。
若已建立叢集,但未選中開啟預設建立的功能,請使用CNFS託管NAS檔案系統。具體操作,請參見通過CNFS方式使用NAS檔案系統。
csi-plugin和csi-provisioner組件版本不低於v1.20.5-ff6490f-aliyun。關於升級csi-plugin和csi-provisioner組件的操作,請參見升級csi-plugin和csi-provisioner。
csi-plugin預設的
dnsPolicy
是ClusterFirst
。若要使用CNFS自動擴容NAS儲存卷,需要手動將ClusterFirst
改為ClusterFirstWithHostNet
。storage-operator組件版本不低於v1.18.8.56-2aa33ba-aliyun。更多資訊,請參見storage-operator。
步驟一:開啟自動擴容
storage-operator組件中預設的storage-auto-expander負責自動擴容儲存資源。您需要執行以下命令,修改storage-operator的ConfigMap檔案,以開啟自動擴容功能。
kubectl patch configmap/storage-operator \
-n kube-system \
--type merge \
-p '{"data":{"storage-auto-expander":"{\"imageRep\":\"acs/storage-auto-expander\",\"imageTag\":\"\",\"install\":\"true\",\"template\":\"/acs/templates/storage-auto-expander/install.yaml\",\"type\":\"deployment\"}"}}'
步驟二:配置NAS自動擴容策略
查看CNFS對象的狀態,需要確保CNFS對象的狀態為Available。
執行以下命令查看CNFS對象。
kubectl get cnfs
預期輸出:
NAME AGE default-cnfs-nas-837d6ea-20210819155623 14d
執行以下命令查看CNFS對象的狀態。
kubectl get cnfs <上一步查詢到的CNFS對象> -o yaml | grep Available
預期輸出:
status: Available
使用以下YAML模板建立NAS擴容策略。
cat << EOF | kubectl apply -f - apiVersion: storage.alibabacloud.com/v1alpha1 kind: StorageAutoScalerPolicy metadata: name: hybrid-expand-policy spec: pvcSelector: matchLabels: app: nginx # 需要與PVC及Deployment下labels的配置相同,本樣本均為app: nginx。 namespaces: - default - nginx conditions: - name: condition1 key: volume-capacity-used-percentage operator: Gt values: - "80" actions: - name: action1 type: volume-expand params: scale: 100% limits: 500Gi EOF
參數
說明
pvcSelector
選擇目標PVC,通過Label-Selector方式實現擴容策略與PVC之間的匹配。本樣本為nginx。
namespaces
表示目標PVC所在的命名空間,多個命名空間為或邏輯。若不配置,預設為default。本樣本為default及nginx。
conditions
表示觸發規則的條件,多個condition為與邏輯。每個condition包含以下參數:
key:定義一個Metric的類型。
volume-capacity-used-percentage:表示容量使用百分比。
operator:定義規則,包含Gt(大於)、Lt(小於)、Eq(等於)或Ne(不等於),不限制英文字母大小寫。
values:規則的具體數值。
本樣本表示當PVC容量的使用率高於80%時會觸發actions。
actions
表示滿足上述conditions時執行的操作,可以是多個操作。包含以下參數:
type:表示行為方式,目前只支援擴容。
scale:表示擴容的大小,單位為GiB,或可使用百分比。
limits:表示PVC在此action中的最大限制。
若actions中有多個action時,則從首個action開始匹配,執行首個滿足條件的action,其餘跳過。
本樣本的action1表示,當滿足擴容條件時NAS儲存卷容量以當前容量的100%為單位擴容,最大擴容到500 GiB。
使用以下YAML模板建立PVC及Deployment。
重要通過匹配擴容策略與對應PVC及Deployment之間的標籤,將擴容策略應用到PVC及Deployment中。例如,本樣本擴容策略中pvcSelector.matchLabels的值為
app: nginx
,對應PVC及Deployment中labels的值為app: nginx
。cat << EOF | kubectl apply -f - kind: PersistentVolumeClaim apiVersion: v1 metadata: name: cnfs-nas-pvc labels: app: nginx # 需要與擴容策略YAML模板下pvcSelector.matchLabels的配置相同,本樣本均為app: nginx。 spec: accessModes: - ReadWriteMany storageClassName: alibabacloud-cnfs-nas resources: requests: storage: 50Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: cnfs-nas-deployment labels: app: nginx spec: selector: matchLabels: app: nginx # 需要與擴容策略YAML模板下pvcSelector.matchLabels的配置相同,本樣本均為app: nginx。 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 volumeMounts: - mountPath: "/data" name: cnfs-nas-pvc volumes: - name: cnfs-nas-pvc persistentVolumeClaim: claimName: cnfs-nas-pvc EOF
步驟三:驗證NAS儲存卷的自動擴容
執行以下命令查看命名空間default下的所有Pod。
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE cnfs-nas-deployment-56dbcc7fb7-wh79z 1/1 Running 0 20m
執行以下命令進入應用Pod中。
kubectl exec cnfs-nas-deployment-56dbcc7fb7-wh79z -ti sh
執行以下命令在NAS儲存卷掛載目錄寫入50 GiB的測試資料。
cd /data dd if=<資料路徑> of=<掛載路徑>
執行以下命令查看觸發擴容的事件。
kubectl get events
預期輸出:
default 0s Warning NotEnoughDiskSpace persistentvolumeclaim/cnfs-nas-pvc Pvc cnfs-nas-pvc is not enough disk space, namespace: default, totalSize:50Gi, usedSize:49Gi, usedPercentage:98.00%, threshold:85.00% default 1s Warning StartExpand persistentvolumeclaim/cnfs-nas-pvc Start to expand of pvc cnfs-nas-pvc from 50Gi to 100Gi, usedCapacityPercentage:98%, freeSize:1024MB. default 0s Normal Resizing persistentvolumeclaim/cnfs-nas-pvc External resizer is resizing volume nas-1acba306-e626-46f3-8441-110c10a6**** default 0s Warning ExternalExpanding persistentvolumeclaim/cnfs-nas-pvc Ignoring the PVC: didn't find a plugin capable of expanding the volume; waiting for an external controller to process this PVC. default 0s Normal FileSystemResizeRequired persistentvolumeclaim/cnfs-nas-pvc Require file system resize of volume on node default 0s Normal FileSystemResizeSuccessful pod/cnfs-nas-deployment-56dbcc7fb7-wh79z MountVolume.NodeExpandVolume succeeded for volume "nas-1acba306-e626-46f3-8441-110c10a6****"
從以上預期輸出可得,當前NAS儲存卷的容量使用量已超過80%,觸發擴容,NAS儲存卷容量將從50 GiB擴容到100 GiB。
在CSI Nodes監控大盤查看CNFS監控資訊。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在Prometheus監控頁面,單擊儲存監控頁簽,然後單擊CSI儲存群組件監控-節點維度頁簽。
在CSI儲存群組件監控-節點維度頁面,選擇NAS儲存卷所在的StorageType、Namespace及PVC名稱後,在Total Capacity地區可以查看NAS儲存卷當前的容量。
本樣本StorageType選擇為nas、Namespace選擇為default、PVC為cnfs-nas-pvc。
從上圖可見,在16:55:30觸發擴容,且擴容後容量為100 GiB。