在Kubernetes 1.16版中,雲端硬碟資料卷線上擴容已經進入Beta階段,ACK支援在Kubernetes 1.16及以上版本中實現Flexvolume雲端硬碟線上擴容。本文介紹在Flexvolume環境中如何進行雲端硬碟的動態擴容,從而增加雲端硬碟空間。
使用說明
資料備份
擴容儲存卷前,請先備份雲端硬碟快照,以防擴容過程異常導致資料出現問題。
適用範圍
只有動態儲存裝置卷才可以進行儲存捲動態擴容,即配置了StorageClassName的PVC。
不支援擴容InlineVolume類型(非PV、PVC方式)的雲端硬碟儲存卷。
不支援動態擴容普通雲端硬碟類型。
StorageClass需要配置為AllowVolumeExpansion: True。ACK叢集預設提供的StorageClass為True,自建的StorageClass需要自行配置。
應用Pod需處於Running狀態。
外掛程式版本
升級您使用的CSI外掛程式到最新版本。
為RAM使用者添加ResizeDisk許可權
實現雲端硬碟線上擴容前,您需要為叢集的RAM角色添加ResizeDisk許可權。針對不同叢集和外掛程式類型,添加ResizeDisk許可權的步驟如下:
ACK專有叢集(CSI外掛程式)
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇叢集資訊。
單擊基本資料頁簽,在叢集資源地區找到Worker RAM 角色並單擊角色連結。
在RAM控制台中,添加ResizeDisk許可權。添加許可權具體步驟,請參見改自訂權限原則內容和備忘。

ACK專有叢集(Flexvolume外掛程式)、ACK託管叢集(所有外掛程式類型)
重複上述前4個步驟,然後在叢集資訊頁面單擊Worker RAM 角色連結。
不重啟容器實現線上擴容
擷取叢集KubeConfig並通過kubectl工具串連叢集。
本文假設應用的目前狀態如下。
執行以下命令擷取Pod資訊。
kubectl get pod預期輸出:
web-0 1/1 Running 0 42s執行以下命令查看Pod的掛載詳情。
kubectl exec web-0 -- df /data預期輸出:
Filesystem 1K-blocks Used Available Use% Mounted on /dev/vdb 20511312 45080 20449848 1% /data執行以下命令擷取PVC資訊。
kubectl get pvc預期輸出:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE disk-ssd-web-0 Bound d-wz9hpoifm43yn9zie6gl 20Gi RWO alicloud-disk-available 57s執行以下命令擷取PV資訊。
kubectl get pv預期輸出:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE d-wz9hpoifm43yn9zie6gl 20Gi RWO Delete Bound default/disk-ssd-web-0 alicloud-disk-available 65s在符合使用說明的各個條件下,執行以下命令進行資料卷擴容。
kubectl patch pvc disk-ssd-web-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'等待一定時間(一分鐘以內)後擴容完成,檢查狀態如下。
執行以下命令擷取PV資訊。
kubectl get pv d-wz9hpoifm43yn9zie6gl預期輸出:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE d-wz9hpoifm43yn9zie6gl 30Gi RWO Delete Bound default/disk-ssd-web-0 alicloud-disk-available 5m23s執行以下命令擷取PVC資訊。
kubectl get pvc預期輸出:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE disk-ssd-web-0 Bound d-wz9hpoifm43yn9zie6gl 30Gi RWO alicloud-disk-available 5m10s執行以下命令查看Pod的掛載詳情。
kubectl exec web-0 -- df /data預期輸出:
Filesystem 1K-blocks Used Available Use% Mounted on /dev/vdb 30832548 45036 30771128 1% /data您只需要執行一條命令即可完成所有的擴容操作。
重啟容器實現線上擴容
使用命令列工具串連ACK叢集,請參見步驟二:選擇叢集憑證類型。
本文假設應用的目前狀態如下。
執行以下命令擷取Pod資訊。
kubectl get pod預期輸出:
<YOUR-POD-NAME> 1/1 Running 0 42s執行以下命令查看Pod的掛載詳情。
kubectl exec <YOUR-POD-NAME> -- df /data預期輸出:
Filesystem 1K-blocks Used Available Use% Mounted on /dev/vdb 20511312 45080 20449848 1% /data執行以下命令擷取PVC資訊。
kubectl get pvc預期輸出:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE <your-PVC-name> Bound d-wz9hpoifm43yn9zi**** 20Gi RWO alicloud-disk-topology-alltype 57s執行以下命令擷取PV資訊。
kubectl get pv預期輸出:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE d-wz9hpoifm43yn9zi**** 20Gi RWO Delete Bound default/<your-PVC-name> alicloud-disk-topology-alltype 65s執行以下命令查看PV的調度資訊。
kubectl get pv d-wz9g2j5qbo37r2lamkg4 -oyaml | grep failure-domain.beta.kubernetes.io/zone failure-domain.beta.kubernetes.io/zone: cn-shenzhen-e修改調度資訊label,在zone後面添加欄位,促使這個PV關聯的Pod不可調度。
例如,把以下樣本中原來的cn-shenzhen-e改為cn-shenzhen-e-nozone。
kubectl label pv d-wz9g2j5qbo37r2lamkg4 failure-domain.beta.kubernetes.io/zone=cn-shenzhen-e-nozone --overwrite persistentvolume/d-wz9g2j5qbo37r2lamkg4 labeled重啟Pod。
由於修改了調度資訊,Pod會暫時處於Pending狀態。
執行以下命令刪除Pod。
kubectl delete pod web-0執行以下命令擷取Pod資訊。
kubectl get pod預期輸出:
web-0 0/1 Pending 0 27s執行以下命令擴容資料卷。
kubectl patch pvc disk-ssd-web-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'將PV的調度資訊label改回去,促使Pod啟動完成(把cn-shenzhen-e-nozone改為起初的cn-shenzhen-e)。
kubectl label pv d-wz9g2j5qbo37r2lamkg4 failure-domain.beta.kubernetes.io/zone=cn-shenzhen-e --overwrite persistentvolume/d-wz9g2j5qbo37r2lamkg4 labeled等待一定時間(一分鐘內)後檢查擴容是否符合預期。
執行以下命令擷取Pod資訊。
kubectl get pod預期輸出:
web-0 1/1 Running 0 3m23s執行以下命令擷取PVC資訊。
kubectl get pvc預期輸出:
disk-ssd-web-0 Bound d-wz9g2j5qbo37r2lamkg4 30Gi RWO alicloud-disk-available 17m執行以下命令擷取PV資訊。
kubectl get pv d-wz9g2j5qbo37r2lamkg4預期輸出:
d-wz9g2j5qbo37r2lamkg4 30Gi RWO Delete Bound default/disk-ssd-web-0 alicloud-disk-available 17m執行以下命令查看Pod的掛載詳情。
kubectl exec web-0 -- df /data預期輸出:
/dev/vdb 30832548 45036 30771128 1% /data從返回結果中可以看出雲端硬碟由20 GiB成功被擴容至30 GiB。