全部產品
Search
文件中心

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

更新時間:Oct 29, 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

    說明

    若開啟了allowVolumeExpansion,則該參數配置不會生效,配額將始終開啟。

    provisioner

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

    reclaimPolicy

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

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

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

    allowVolumeExpansion

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

    說明

    建立帶有配額子目錄NAS的StorageClass,需要開啟配額功能,即volumeCapacity=true 或者allowVolumeExpansion=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