在Kubernetes 1.16版中,云盤數據卷在線擴容已經進入Beta階段,ACK支持在Kubernetes 1.16及以上版本中實現Flexvolume云盤在線擴容。本文介紹在Flexvolume環境中如何進行云盤的動態擴容,從而增加云盤空間。
使用說明
使用限制
為保證數據擴容安全,在未啟用在線擴容自動完成數據備份功能時,僅支持在線擴容2000 GiB及以下容量的云盤;啟用該功能后,可支持擴容32 TiB及以下容量的云盤。
數據備份
擴容數據卷前,請先備份云盤快照,以防擴容過程異常導致數據出現問題。
適用范圍
只有動態存儲卷才可以進行數據卷動態擴容,即配置了StorageClassName的PVC。
不支持擴容InlineVolume類型(非PV、PVC方式)的云盤數據卷。
不支持動態擴容普通云盤類型。
StorageClass需要配置為AllowVolumeExpansion: True。ACK集群默認提供的StorageClass為True,自建的StorageClass需要自行配置。
應用Pod需處于Running狀態。
插件版本
升級您使用的CSI插件到最新版本。
為RAM用戶添加ResizeDisk權限
實現云盤在線擴容前,您需要為集群的RAM角色添加ResizeDisk權限。針對不同集群和插件類型,添加ResizeDisk權限的步驟如下:
專有版集群(CSI插件)
登錄容器服務管理控制臺。
在控制臺左側導航欄中,單擊集群。
在集群列表頁面,選中目標集群,并在目標集群右側操作列下,單擊詳情。
在集群管理頁左側導航欄中,單擊集群信息。
單擊集群資源頁簽,單擊Master RAM角色鏈接。
在RAM控制臺中,添加ResizeDisk權限。添加權限具體步驟,請參見改自定義權限策略內容和備注。
專有版集群(Flexvolume插件)、托管版集群(所有插件類型)
重復上述前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
您只需要執行一條命令即可完成所有的擴容操作。
重啟容器實現在線擴容
使用命令行工具連接Kubernetes集群,請參見步驟二:選擇集群憑證類型。
本文假設應用的當前狀態如下。
執行以下命令獲取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。