全部產品
Search
文件中心

Container Service for Kubernetes:在ACK中實現Flexvolume雲端硬碟線上擴容

更新時間:Sep 16, 2026

在Kubernetes 1.16版中,雲端硬碟資料卷線上擴容已經進入Beta階段,ACK支援在Kubernetes 1.16及以上版本中實現Flexvolume雲端硬碟線上擴容。本文介紹在Flexvolume環境中如何進行雲端硬碟的動態擴容,從而增加雲端硬碟空間。

適用範圍

本文通過更新PVC的儲存容量聲明實現擴容雲端硬碟儲存卷。該方式適用範圍如下:

  • 雲端硬碟對應的PV所綁定的PVC關聯了StorageClass,並且StorageClass中已配置allowVolumeExpansion: true

    說明

    ACK預設提供的StorageClass已配置allowVolumeExpansion: true,您自行建立的StorageClass需要自行配置。StorageClass不支援修改屬性,只能建立。

  • 雲端硬碟掛載的應用Pod需處於Running狀態。

  • 如果雲端硬碟類型為普通雲端硬碟,則不支援使用該方式擴容。

  • 如果叢集版本低於1.16,則不支援使用該方式擴容。如需升級叢集,請參見升級叢集

  • 該方式依賴雲端硬碟的Resize能力。更多資訊,請參見ResizeDisk

準備工作

  • 為雲端硬碟建立快照。

    重要

    為避免擴容過程中的誤操作導致資料丟失,建議提前為雲端硬碟建立快照,做好資料備份。完成擴容後,您可以刪除快照,避免快照持續計費。具體操作,請參見使用雲端硬碟快照

  • 如果您的叢集是ACK專有叢集,為叢集的RAM角色添加ResizeDisk許可權。

    說明

    如果是ACK託管叢集,無需進行授權操作。

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇叢集資訊

    3. 單擊基本資料頁簽,在叢集資源地區找到Master RAM 角色並單擊角色連結。

    4. 在RAM控制台的角色頁面,添加ResizeDisk許可權。

      添加許可權具體步驟,請參見修改自訂權限原則內容和備忘

      "Action": [
          "ecs:AttachDisk",
          "ecs:DetachDisk",
          "ecs:DescribeDisks",
          "ecs:CreateDisk",
          "ecs:CreateSnapshot",
          "ecs:DeleteDisk",
          "ecs:ResizeDisk",
          "ecs:CreateNetworkInterface",
          "ecs:DescribeNetworkInterfaces",
          "ecs:AttachNetworkInterface",
          "ecs:DetachNetworkInterface",
          "ecs:DeleteNetworkInterface",
          "ecs:DescribeInstanceAttribute",
          "ecs:AssignPrivateIpAddresses",
          "ecs:UnassignPrivateIpAddresses",
          "ecs:DescribeInstances"
      ]

不重啟容器實現線上擴容

  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. 使用命令列工具串連ACK叢集,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集

    本文假設應用的目前狀態如下。

    執行以下命令擷取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。