全部產品
Search
文件中心

:在ACK中實現Flexvolume雲端硬碟線上擴容

更新時間:Jun 19, 2024

在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外掛程式)

  1. 登入Container Service管理主控台

  2. 在控制台左側導覽列中,單擊叢集

  3. 叢集列表頁面,選中目的地組群,並在目的地組群右側操作列下,單擊詳情

  4. 在叢集管理頁左側導覽列中,單擊叢集資訊

  5. 單擊叢集資源頁簽,單擊Master RAM角色連結。

  6. 在RAM控制台中,添加ResizeDisk許可權。添加許可權具體步驟,請參見改自訂權限原則內容和備忘resizedisk

專有版叢集(Flexvolume外掛程式)、託管版叢集(所有外掛程式類型)

重複上述前4個步驟,然後在叢集管理頁面單擊Worker RAM 角色連結。

不重啟容器實現線上擴容

  1. 擷取叢集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
  2. 在符合使用說明的各個條件下,執行以下命令進行資料卷擴容。
    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

    您只需要執行一條命令即可完成所有的擴容操作。

重啟容器實現線上擴容

  1. 使用命令列工具串連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
  2. 執行以下命令查看PV的調度資訊。
    kubectl get pv d-wz9g2j5qbo37r2lamkg4  -oyaml | grep failure-domain.beta.kubernetes.io/zone
        failure-domain.beta.kubernetes.io/zone: cn-shenzhen-e
  3. 修改調度資訊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
  4. 重啟Pod。

    由於修改了調度資訊,Pod會暫時Pending。

    執行以下命令刪除Pod。

    kubectl delete pod web-0

    執行以下命令擷取Pod資訊。

    kubectl get pod

    預期輸出:

    web-0   0/1     Pending   0          27s
  5. 執行以下命令擴容資料卷。
    kubectl patch pvc disk-ssd-web-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
  6. 將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。