全部產品
Search
文件中心

Container Service for Kubernetes:擴容NAS儲存卷容量

更新時間:Jun 19, 2024

阿里雲Container ServiceCSI支援對NAS卷的子目錄進行配額限制。通過配額限制,可以確保您在資源分派的基礎上,提升整體資源的利用率。當磁碟配額達到上限時,您還可以手動線上擴容的方式對儲存卷進行擴容且不影響業務運行。

前提條件

  • csi-plugin的鏡像版本不低於v1.18.8.45。關於csi-plugin的版本說明,請參見csi-plugin

  • NAS儲存卷需要使用子目錄進行掛載。

使用限制

  • 目前僅容量型NAS支援使用配額限制,其他NAS類型均不支援。關於NAS儲存卷的規格類型,請參見NAS規格類型

  • NAS靜態儲存卷不支援擴容。

  • 僅支援子目錄掛載方式設定配額。

  • 對於單個檔案系統,最多允許對500個目錄設定配額。

    • 設定限制性配額後,如果檔案使用量超過限制,會導致增加檔案長度、建立檔案、目錄和特殊檔案,移動檔案到目錄等寫入操作失敗,應用程式層會收到IOError。

    • 由於限制型配額的高風險性,強烈建議您在業務關鍵路徑上謹慎評估和測實驗證後,再配置限制型配額。

    • NAS配額的設定為非同步執行,因此限制型配額的生效和失效都有延遲,正常情況下需要等待5~15分鐘。

使用樣本

  1. 使用以下YAML內容,建立帶有配額子目錄NAS的StorageClass,並開啟允許擴容策略。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-quota-sc
    mountOptions:
      - nolock,tcp,noresvport
      - vers=3
    parameters:
      volumeAs: subpath
      server: "xxx.cn-hangzhou.nas.aliyuncs.com:/"
      archiveOnDelete: "false"
      path: "/abc"
      volumeCapacity: "true" # 建立動態磁碟區帶有配額能力。
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Delete
    allowVolumeExpansion: true # 開啟允許動態磁碟區擴容能力。

    參數

    描述

    mountOptions

    掛載NAS的options參數在mountOptions中配置,包括NFS協議版本。

    volumeAs

    可選的subpathfilesystem,分別表示建立子目錄類型的PV和檔案系統類型的PV。

    server

    表示建立子目錄類型的PV時,NAS檔案系統的掛載點地址。

    archiveOnDelete

    表示在reclaimPolicyDelete時,是否刪除後端儲存。因為NAS為共用儲存,添加此選項進行雙重確認。預設為true

    path

    表示掛載子目錄,極速NAS需要以/share開頭。

    volumeCapacity

    表示是否使用配額。可選值為:truefalse

    provisioner

    表示ACK動態磁碟區控制器名稱。

    reclaimPolicy

    表示PV的回收策略。可選值為:

    • Retain:保留後端儲存,刪除PV及PVC不會刪除對應的後端儲存,例如雲端硬碟。

    • Delete:當刪除PVC時,自動刪除PV和後端的儲存。

    allowVolumeExpansion

    表示是否支援NAS儲存卷的擴容。

    說明

    建立帶有配額子目錄NAS的StorageClass,需要將volumeCapacity設定為true

  2. 使用以下YAML內容,建立StatefulSet,包含容量大小為20 GiB的PVC。

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: nas-sts
    spec:
      selector:
        matchLabels:
          app: busybox
      serviceName: "busybox"
      replicas: 1
      template:
        metadata:
          labels:
            app: busybox
        spec:
          containers:
          - name: busybox
            image: busybox
            command:
            - sleep
            - "3600"
            volumeMounts:
            - name: nas-pvc
              mountPath: /data
      volumeClaimTemplates:
      - metadata:
          name: nas-pvc
        spec:
          accessModes: [ "ReadWriteMany" ]
          storageClassName: "alicloud-nas-quota-sc"
          resources:
            requests:
              storage: 20Gi

結果驗證

  1. 執行以下命令,向步驟2StatefulSet掛載的/data目錄寫入10 GiB資料。

    dd if=/dev/zero of=10G.txt bs=1M count=10000
  2. 等待5~15分鐘後,查看子目錄的配額詳情。

    1. 登入NAS控制台

    2. 在控制台左側導覽列,單擊檔案系統 > 檔案系統列表

    3. 選擇目標檔案系統操作列下表徵圖,然後單擊配額管理

    4. 在目標檔案系統的配額管理頁面,單擊操作列的管理配額

      可以看到子目錄的容量限制為20 GiB,當前容量為9 GiB。配額管理

      當此子目錄已寫滿20 GiB,再寫入資料時,將會提示超過磁碟配額,即Disk quota exceeded磁碟配額

  3. 當磁碟配額達到上限時,可以通過手動線上擴容的方式對儲存卷進行擴容。

    1. 執行以下命令,進行資料卷擴容。

      說明

      此操作不影響線上業務,不會中斷業務。

      kubectl patch pvc nas-pvc-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
    2. 執行以下命令,查看PV資訊。

      kubectl get pv

      預期輸出:

      NAME                              CAPACITY  ACCESS MODES   RECLAIM POLICY   STATUS    CLAIM               STORAGECLASS         REASON     AGE
      nas-63c37cc2-b21e-4b56-b26f-****   30Gi          RWX          Delete        Bound    default/nas-pvc-0   alicloud-nas-quota-sc           25m23s
    3. 執行以下命令,查看PVC資訊。

      kubectl get pvc

      預期輸出:

      NAME       STATUS   VOLUME                         CAPACITY  ACCESS MODES   STORAGECLASS            AGE
      nas-pvc-0  Bound   nas-63c37cc2-b21e-4b56-b26f-****   30Gi      RWX        alicloud-nas-quota-sc   25m10s