全部產品
Search
文件中心

Container Service for Kubernetes:通過CNFS管理NAS檔案系統

更新時間:Jan 09, 2026

通過容器網路檔案系統CNFS,可將NAS檔案系統作為原生Kubernetes資源進行管理,以聲明式方式完成NAS的建立、納管和使用。這為網站、資料分析等工作負載提供了簡單、高效的持久化儲存卷,並能靈活支援資料共用與隔離等多種業務情境。

準備工作

  • 已建立1.20以上版本的ACK託管叢集Pro版。如需升級,請參見手動升級叢集

    通過kubectl使用CNFS時,支援1.20版本。
  • 相關儲存群組件版本滿足以下要求。如需升級,請參見組件

    • csi-plugin和csi-provisioner:v1.24.11-5221f79-aliyun及以上。

    • storage-operator:v1.26.2-1de13b6-aliyun及以上。

  • 已開通Apsara File Storage NAS服務。NAS檔案系統限制如下,詳見使用限制

    • 僅支援通用型NAS的容量型、效能型和進階型,不支援極速型NAS。

    • 每個帳號在單個地區內可建立的NAS檔案系統數量存在上限

    • 如需對NAS檔案系統進行KMS加密,需開通KMS服務,詳見購買專屬KMS執行個體

建立NAS檔案系統

選擇NAS檔案系統的建立與接入方式

開始操作前,選擇如何為叢集提供NAS檔案系統。

image

方式

說明

卷提供方式

適用情境

方式一:自動建立並使用NAS檔案系統

CNFS自動建立並管理一個配置固定的NAS檔案系統,實現快速掛載。

動態磁碟區

  • 快速功能驗證。

  • 無需關心底層儲存細節,但建立的NAS配置較為固定,無法靈活選擇儲存類型、自訂加密方式或精細化管理資源回收筒功能等。

方式二:自訂參數建立並使用NAS檔案系統

CNFS根據參數配置,建立一個全新的、可自訂的NAS檔案系統。

  • 動態磁碟區

  • 靜態卷

對效能、加密、成本等有特定要求,或需要精細化管理儲存。

方式三:納管並使用已有的NAS檔案系統

將已存在的NAS檔案系統接入CNFS進行統一管理。

  • 動態磁碟區

  • 靜態卷

將已有NAS平滑接入叢集。

方式一:自動建立並使用NAS檔案系統

通過CNFS自動建立一個預設配置的NAS檔案系統。CNFS會根據叢集環境完成建立,預設不加密。若當前地區不支援容量型NAS,則自動使用效能型NAS。

建立CNFS資源和StorageClass後,工作負載通過PVC請求儲存,即可在NAS上動態建立PV並掛載至Pod。

kubectl

1. 建立CNFS

建立一個ContainerNetworkFileSystem對象,不指定server或其他自訂參數,CNFS將自動建立一個預設的NAS檔案系統。
apiVersion: storage.alibabacloud.com/v1beta1
kind: ContainerNetworkFileSystem
metadata:
  name: cnfs-nas-filesystem
spec:
  description: "cnfs"
  type: nas
  # 僅支援Retain,刪除CNFS時不會刪除後端的NAS執行個體
  reclaimPolicy: Retain
  parameters:
    # 是否對檔案啟用NAS託管密鑰,SSE-KMS表示啟用
    encryptType: SSE-KMS
    # 是否啟用資源回收筒功能,true表示開啟
    enableTrashCan: "true"

展開查看參數說明

參數

說明

description

當前CNFS的描述。

type

需要建立的儲存卷類型,使用nas

reclaimPolicy

回收策略。當前僅支援Retain,刪除CNFS時不會刪除後端的NAS檔案系統,防止資料丟失。

parameters.encryptType

可選,是否啟用加密方式

  • None:不加密。

  • SSE-KMS:啟用NAS託管密鑰,即使用NAS完全託管的祕密金鑰加密每個檔案系統,該密鑰由NAS在KMS中建立和管理。

parameters.enableTrashCan

是否開啟資源回收筒功能,避免誤刪除檔案導致業務受阻或資料丟失。

  • true:開啟。

  • false:不開啟。

  • 執行kubectl get cnfs查看建立的NAS檔案系統。

  • 執行kubectl get cnfs/cnfs-nas-filesystem -o yaml查看NAS檔案系統的詳細資料。

    YAML解析詳見CNFS YAML說明

2. 建立StorageClass

建立StorageClass對象作為儲存模板,通過containerNetworkFileSystem參數關聯到此前建立的CNFS。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alibabacloud-cnfs-nas
provisioner: nasplugin.csi.alibabacloud.com
parameters:
  # 每個PVC都在NAS下建立獨立的子目錄
  volumeAs: subpath
  # 關聯到上面定義的CNFS
  containerNetworkFileSystem: cnfs-nas-filesystem
  path: "/"
# 建議設為Retain,刪除PVC時保留後端子目錄資料
reclaimPolicy: Retain
# 允許儲存卷擴容
allowVolumeExpansion: true
mountOptions:
  - nolock,tcp,noresvport
  - vers=3

3. 建立PVC

應用通過PVC申請儲存卷,並引用StorageClass作為配置模板。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: cnfs-nas-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: alibabacloud-cnfs-nas
  resources:
    requests:
      # 若 allowVolumeExpansion 為 true,此處 storage 取值將作為該 PVC 對應子目錄的配額。動態建立目錄寫入資料量最大為 70 GiB
      storage: 70Gi  

4. 建立應用並掛載PVC

PVC建立後,部署樣本應用(如Deployment或StatefulSet),將PVC綁定的 PV 掛載到應用中。
  • Deployment:所有Pod副本引用同一個PVC,掛載後端NAS的同一目錄,實現資料共用。

    展開查看範例程式碼

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cnfs-nas-deployment
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            volumeMounts:
            - mountPath: "/data"
              name: cnfs-nas-pvc
          volumes:
          - name: cnfs-nas-pvc
            persistentVolumeClaim:
              claimName: cnfs-nas-pvc
  • StatefulSet:基於volumeClaimTemplates模板為每個Pod副本自動建立一個獨立的PVC,掛載後端NAS的專屬子目錄,實現資料隔離。

    展開查看範例程式碼

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: cnfs-nas-sts
      labels:
        app: nginx
    spec:
      serviceName: "nginx"
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            volumeMounts:
            - mountPath: "/data"
              name: www
      volumeClaimTemplates:
      - metadata:
          name: www
        spec:
          accessModes: [ "ReadWriteOnce" ]
          storageClassName: "alibabacloud-cnfs-nas"
          resources:
            requests:
              # 若allowVolumeExpansion 為 true,則 storage 參數生效,動態建立目錄寫入資料量最大為50 GiB
              storage: 50Gi 

5. 結果驗證

控制台

1. 建立CNFS

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

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇儲存 > 容器網路檔案系統CNFS

  3. 單擊建立容器網路檔案系統,按照頁面提示配置CNFS。

    • 選擇NAS檔案系統

    • 選擇建立預設NAS

    • 按需開啟全鏈路加速,以利用彈性加速特性進行掛載,最佳化資料訪問效能,詳情請參見通過CNFS使用EFC用戶端掛載NAS

    建立後,可在CNFS列表單擊目標CNFS查看詳情,然後單擊NAS ID進入建立的NAS檔案系統詳情頁。單擊掛載使用,可在掛載點地址列擷取目標掛載點的掛載點地址。

2. 建立StorageClass

  1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇儲存 > 儲存類

  2. 儲存類頁面,單擊建立,選擇儲存卷類型NAS,按照頁面提示完成StorageClass的配置。

    主要配置項如下。詳見建立StorageClass

    • 選擇掛載點:選擇通過CNFS建立或納管的NAS檔案系統的掛載點地址。

      關於如何查看掛載點地址,請參見管理掛載點
    • 掛載路徑:待掛載的NAS子目錄。如果未設定,則預設掛載到根目錄。通用型NAS的根目錄為/

      如果NAS中沒有該目錄,系統會自動建立並進行掛載。
    • 回收策略:當前僅支援Retain,刪除CNFS時不會刪除後端的NAS檔案系統,防止資料丟失。

3. 建立PVC

  1. 在叢集管理頁左側導覽列,選擇儲存 > 儲存聲明

  2. 儲存聲明頁面,單擊建立,選擇儲存宣告類型為NAS,按照頁面提示完成PVC的配置。

    • 分配模式:儲存卷使用方式。

    • 已有儲存卷類:單擊選擇儲存類,選擇此前建立的StorageClass。

    • 總量:所建立儲存卷的容量,不超過待掛載的儲存卷容量。

    • 訪問模式:預設為ReadWriteMany,也可選擇ReadWriteOnce或ReadOnlyMany。

4. 建立應用並掛載NAS

建立Deployment建立StatefulSet時,在容器配置頁面的資料卷地區,可以配置PVC掛載到容器。

以下樣本表示將通過CNFS建立的NAS檔案系統掛載到容器中的/data路徑下。

image

方式二:自訂參數建立並使用NAS檔案系統

通過CNFS建立一個具有自訂參數的NAS檔案系統。

  1. 定義一個ContainerNetworkFileSystem資源,執行個體化一個新的NAS檔案系統。

  2. 通過建立靜態PV或動態StorageClass,將該檔案系統暴露給叢集內的應用進行掛載。

kubectl

1. 建立自訂的NAS檔案系統

建立一個ContainerNetworkFileSystem對象,聲明NAS的詳細參數,如儲存類型、加密方式、交換器等。
apiVersion: storage.alibabacloud.com/v1beta1
kind: ContainerNetworkFileSystem
metadata:
  name: cnfs-nas-filesystem
spec:
  description: "cnfs"
  type: nas
  reclaimPolicy: Retain
  parameters:
    filesystemType: standard
    storageType: Capacity
    protocolType: NFS
    encryptType: SSE-KMS
    enableTrashCan: "true"
    trashCanReservedDays: "5"
    vSwitchId: vsw-2ze9l3ppwzg6bl02j****

展開查看參數說明

參數

說明

description

當前CNFS的描述。

type

需要建立的儲存卷類型,使用nas

reclaimPolicy

回收策略。當前僅支援Retain,刪除CNFS時不會刪除後端的NAS檔案系統,防止資料丟失。

parameters.filesystemType

檔案系統類型。預設為通用型NASstandard

parameters.storageType

儲存類型。通用型NAS支援效能型Performance、容量型Capacity、進階型Premium

parameters.protocolType

檔案傳輸通訊協定類型。目前僅支援NFS協議。

parameters.encryptType

可選,是否啟用加密方式

  • None:不加密。

  • SSE-KMS:啟用NAS託管密鑰,即使用NAS完全託管的祕密金鑰加密每個檔案系統,該密鑰由NAS在KMS中建立和管理。

parameters.enableTrashCan

是否開啟資源回收筒功能,避免誤刪除檔案導致業務受阻或資料丟失。

  • true:開啟。

  • false:不開啟。

parameters.trashCanReservedDays

表示資源回收筒檔案保留的最長時間,預設為7天。樣本中trashCanReservedDays: 5表示資源回收筒的檔案最長保留5天。

parameters.vSwitchId

建立出的NAS檔案系統需要使用的交換器ID。

通用型NAS支援的地區和可用性區域,請參見地區及可用性區域

  • 執行kubectl get cnfs查看建立的NAS檔案系統。

  • 執行kubectl get cnfs/cnfs-nas-filesystem -o yaml查看NAS檔案系統的詳細資料。

    YAML解析詳見CNFS YAML說明

2. 建立PV或StorageClass

建立CNFS後,選擇應用如何接入並使用NAS。

  • 靜態PV:手動將一個PV綁定到NAS上的已有目錄,適用於需要訪問特定存量資料的情境。

  • 動態StorageClass:建立一個StorageClass作為模板,讓應用可以按需自動建立全新的獨立子目錄。

待用資料卷

apiVersion: v1
kind: PersistentVolume
metadata:
  name: cnfs-nas-pv
  labels:
    alicloud-pvname: cnfs-nas-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  csi:
    driver: nasplugin.csi.alibabacloud.com
    # 與PV name保持一致
    volumeHandle: cnfs-nas-pv 
    volumeAttributes:
      # 指定待使用的CNFS
      containerNetworkFileSystem: cnfs-nas-filesystem
      # 掛載儲存卷在CNFS中使用的路徑
      path: "/"
  mountOptions:
    - nolock,tcp,noresvport
    - vers=3
PV參數詳見使用NAS靜態儲存卷

動態資料卷

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alibabacloud-nas-cnfs
mountOptions:
  - nolock,tcp,noresvport
  - vers=3
parameters:
  volumeAs: subpath
  # 指定待使用的CNFS
  containerNetworkFileSystem: cnfs-nas-filesystem
  # 掛載儲存卷在CNFS中使用的路徑
  path: "/"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
# 指定為true,允許對儲存卷的目錄配額進行擴容
allowVolumeExpansion: true
StorageClass參數詳見使用NAS動態儲存裝置卷

3. 建立PVC

根據此前建立的靜態PV和動態StorageClass,建立引用NAS檔案系統的PVC。

待用資料卷

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cnfs-nas-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
  selector:
    matchLabels:
      # 通過標籤精確匹配此前建立的PV
      alicloud-pvname: cnfs-nas-pv   

動態資料卷

apiVersion: v1
kind: PersistentVolumeClaim
metadata: 
  name: cnfs-nas-pvc
spec:
  accessModes:
  - ReadWriteMany 
  storageClassName: alibabacloud-nas-cnfs
  resources: 
    requests:
      storage: 70Gi

4. 建立應用並掛載NAS

PVC建立後,將其綁定的 PV 掛載到應用中。

展開查看範例程式碼

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cnfs-nas-deployment
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
          ports:
            - containerPort: 80
          volumeMounts:
            - name: cnfs-nas-pvc
              mountPath: "/data"
      volumes:
        - name: cnfs-nas-pvc
          persistentVolumeClaim:
            claimName: cnfs-nas-pvc

5. 結果驗證

控制台

  1. 建立CNFS

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

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇儲存 > 容器網路檔案系統CNFS

  3. 單擊建立容器網路檔案系統,按照頁面提示配置CNFS。

  1. 建立PV或StorageClass

PV

  1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇儲存 > 儲存卷

  2. 單擊建立,選擇儲存卷類型為NAS,按照頁面提示完成PV的配置。

    主要配置項如下。詳細配置項說明,請參見建立PV

    • 總量:PV容量聲明。此聲明僅為PVC匹配依據,不限制實際可用容量。應用實際可用儲存上限為NAS檔案系統總容量。

      NAS實際容量上限由其規格決定,請參見通用型NAS
    • 是否使用CNFS:是否啟用CNFS。

    • 選擇CNFS:開啟CNFS功能後,選擇此前建立的CNFS。

    • 進階選項(選填)

      • 掛載路徑:待掛載的NAS子目錄。如果未設定,則預設掛載到根目錄。通用型NAS的根目錄為/

        如果NAS中沒有該目錄,系統會自動建立並進行掛載。
      • 回收策略:CNFS僅支援Retain

      • 開啟CNFS加速:開啟CNFS加速功能,詳情請參見通過CNFS使用EFC用戶端掛載NAS

StorageClass

  1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇儲存 > 儲存類

  2. 儲存類頁面,單擊建立,選擇儲存卷類型NAS,按照頁面提示完成StorageClass的配置。

    主要配置項如下。詳見建立StorageClass

    • 選擇掛載點:選擇通過CNFS建立或納管的NAS檔案系統的掛載點地址。

      關於如何查看掛載點地址,請參見管理掛載點
    • 掛載路徑:待掛載的NAS子目錄。如果未設定,則預設掛載到根目錄。通用型NAS的根目錄為/

      如果NAS中沒有該目錄,系統會自動建立並進行掛載。
    • 回收策略:當前僅支援Retain,刪除CNFS時不會刪除後端的NAS檔案系統,防止資料丟失。

  1. 建立 PVC

  1. 在叢集管理頁左側導覽列,選擇儲存 > 儲存聲明

  2. 儲存聲明頁面,單擊建立,選擇儲存宣告類型為NAS,按照頁面提示完成PVC的配置。

    • 分配模式:儲存卷使用方式。

    • 已有儲存卷類:單擊選擇儲存類,選擇此前建立的StorageClass。

    • 總量:所建立儲存卷的容量,不超過待掛載的儲存卷容量。

    • 訪問模式:預設為ReadWriteMany,也可選擇ReadWriteOnce或ReadOnlyMany。

  1. 建立應用並掛載NAS

建立Deployment建立StatefulSet時,在容器配置頁面的資料卷地區,可以配置PVC掛載到容器。

以下樣本表示將通過CNFS建立的NAS檔案系統掛載到容器中的/data路徑下。

image

方式三:納管並使用已有的NAS檔案系統

通過CNFS納管一個已存在的NAS檔案系統,並將其接入叢集供應用進行掛載和使用。

kubectl

1. 使用已有NAS建立CNFS

建立一個ContainerNetworkFileSystem資源,引用NAS掛載點。

apiVersion: storage.alibabacloud.com/v1beta1
kind: ContainerNetworkFileSystem
metadata:
  name: cnfs-nas-filesystem
spec:
  description: "cnfs"
  type: nas
  reclaimPolicy: Retain
  parameters:
    server: 17f7e4****-h****.cn-beijing.nas.aliyuncs.com

展開查看參數說明

參數

說明

description

當前檔案系統的簡單描述。

type

需要建立的儲存類型。

reclaimPolicy

回收策略。當前僅支援Retain,刪除CNFS時不會刪除後端的NAS檔案系統,防止資料丟失。

parameters.server

NAS的掛載點地址。

  • 執行kubectl get cnfs查看建立的NAS檔案系統。

  • 執行kubectl get cnfs/cnfs-nas-filesystem -o yaml查看NAS檔案系統的詳細資料。

    YAML解析詳見CNFS YAML說明

2. 建立PV或StorageClass

建立CNFS後,選擇應用如何接入並使用NAS。

  • 靜態PV:手動將一個PV綁定到NAS上的已有目錄,適用於需要訪問特定存量資料的情境。

  • 動態StorageClass:建立一個StorageClass作為模板,讓應用可以按需自動建立全新的獨立子目錄。

待用資料卷

apiVersion: v1
kind: PersistentVolume
metadata:
  name: cnfs-nas-pv
  labels:
    alicloud-pvname: cnfs-nas-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  csi:
    driver: nasplugin.csi.alibabacloud.com
    # 與PV name保持一致
    volumeHandle: cnfs-nas-pv 
    volumeAttributes:
      # 指定待使用的CNFS
      containerNetworkFileSystem: cnfs-nas-filesystem
      # 掛載儲存卷在CNFS中使用的路徑
      path: "/"
  mountOptions:
    - nolock,tcp,noresvport
    - vers=3
PV參數詳見使用NAS靜態儲存卷

動態資料卷

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alibabacloud-nas-cnfs
mountOptions:
  - nolock,tcp,noresvport
  - vers=3
parameters:
  volumeAs: subpath
  # 指定待使用的CNFS
  containerNetworkFileSystem: cnfs-nas-filesystem
  # 掛載儲存卷在CNFS中使用的路徑
  path: "/"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
# 指定為true,允許對儲存卷的目錄配額進行擴容
allowVolumeExpansion: true
StorageClass參數詳見使用NAS動態儲存裝置卷

3. 建立PVC

根據此前建立的靜態PV和動態StorageClass,建立引用NAS檔案系統的PVC。

待用資料卷

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cnfs-nas-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
  selector:
    matchLabels:
      # 通過標籤精確匹配此前建立的PV
      alicloud-pvname: cnfs-nas-pv   

動態資料卷

apiVersion: v1
kind: PersistentVolumeClaim
metadata: 
  name: cnfs-nas-pvc
spec:
  accessModes:
  - ReadWriteMany 
  storageClassName: alibabacloud-nas-cnfs
  resources: 
    requests:
      storage: 70Gi

4. 建立應用並掛載NAS

PVC建立後,將其綁定的 PV 掛載到應用中。

展開查看範例程式碼

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cnfs-nas-deployment
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
          ports:
            - containerPort: 80
          volumeMounts:
            - name: cnfs-nas-pvc
              mountPath: "/data"
      volumes:
        - name: cnfs-nas-pvc
          persistentVolumeClaim:
            claimName: cnfs-nas-pvc

5. 結果驗證

控制台

  1. 使用已有NAS建立CNFS

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

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇儲存 > 容器網路檔案系統CNFS

  3. 單擊建立容器網路檔案系統,按照頁面提示配置CNFS。

  4. 建立容器網路檔案系統面板,配置相關參數後,單擊確定

    • 選擇NAS檔案系統。

    • 選擇選擇已有NAS,在下拉式清單中選擇已有的NAS掛載點。

    • 按需開啟全鏈路加速,以利用彈性加速特性進行掛載,最佳化資料訪問效能,詳情請參見通過CNFS使用EFC用戶端掛載NAS

  1. 建立PV或StorageClass

PV

  1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇儲存 > 儲存卷

  2. 單擊建立,選擇儲存卷類型為NAS,按照頁面提示完成PV的配置。

    主要配置項如下。詳細配置項說明,請參見建立PV

    • 總量:PV容量聲明。此聲明僅為PVC匹配依據,不限制實際可用容量。應用實際可用儲存上限為NAS檔案系統總容量。

      NAS實際容量上限由其規格決定,請參見通用型NAS
    • 是否使用CNFS:是否啟用CNFS。

    • 選擇CNFS:開啟CNFS功能後,選擇此前建立的CNFS。

    • 進階選項(選填)

      • 掛載路徑:待掛載的NAS子目錄。如果未設定,則預設掛載到根目錄。通用型NAS的根目錄為/

        如果NAS中沒有該目錄,系統會自動建立並進行掛載。
      • 回收策略:CNFS僅支援Retain

      • 開啟CNFS加速:開啟CNFS加速功能,詳情請參見通過CNFS使用EFC用戶端掛載NAS

StorageClass

  1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇儲存 > 儲存類

  2. 儲存類頁面,單擊建立,選擇儲存卷類型NAS,按照頁面提示完成StorageClass的配置。

    主要配置項如下。詳見建立StorageClass

    • 選擇掛載點:選擇通過CNFS建立或納管的NAS檔案系統的掛載點地址。

      關於如何查看掛載點地址,請參見管理掛載點
    • 掛載路徑:待掛載的NAS子目錄。如果未設定,則預設掛載到根目錄。通用型NAS的根目錄為/

      如果NAS中沒有該目錄,系統會自動建立並進行掛載。
    • 回收策略:當前僅支援Retain,刪除CNFS時不會刪除後端的NAS檔案系統,防止資料丟失。

  1. 建立 PVC

  1. 在叢集管理頁左側導覽列,選擇儲存 > 儲存聲明

  2. 儲存聲明頁面,單擊建立,選擇儲存宣告類型為NAS,按照頁面提示完成PVC的配置。

    • 分配模式:儲存卷使用方式。

    • 已有儲存卷類:單擊選擇儲存類,選擇此前建立的StorageClass。

    • 總量:所建立儲存卷的容量,不超過待掛載的儲存卷容量。

    • 訪問模式:預設為ReadWriteMany,也可選擇ReadWriteOnce或ReadOnlyMany。

  1. 建立應用並掛載NAS

建立Deployment建立StatefulSet時,在容器配置頁面的資料卷地區,可以配置PVC掛載到容器。

以下樣本表示將通過CNFS建立的NAS檔案系統掛載到容器中的/data路徑下。

image

應用情境配置:共用與隔離

完成NAS檔案系統的建立或納管後,可根據業務需求,通過不同的配置方式實現資料的共用或隔離。

配置NAS共用儲存卷(多個Pod共用同一資料目錄)

為解決Pod間的資料共用問題,可將NAS檔案系統中的同一個目錄作為共用儲存,掛載給多個Pod使用。

  • 核心機制:通過靜態儲存卷方式實現。在PV中,聲明的path與CSI最終掛載的路徑完全一致。因此,當多個Pod通過同一個PVC掛載該靜態PV時,均可訪問同一個儲存目錄,從而實現資料共用。

  • 關鍵配置:在工作負載的Pod模板(.spec.template)中,將 volumes 欄位下的 persistentVolumeClaim.claimName 參數統一設定為同一個PVC名稱。

1. 建立指向特定目錄的PV和PVC

展開查看範例程式碼

apiVersion: v1
kind: PersistentVolume
metadata:
  name: cnfs-nas-static-pv
spec:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 50Gi
  csi:
    driver: nasplugin.csi.alibabacloud.com
    fsType: nfs
    volumeAttributes:
      # 指定 CNFS
      containerNetworkFileSystem: cnfs-nas-filesystem
      mountProtocol: nfs
      path: /
      volumeAs: subpath
      volumeCapacity: "true"
    volumeHandle: cnfs-nas-static-pv
  mountOptions:
  - nolock,tcp,noresvport
  - vers=3
  persistentVolumeReclaimPolicy: Retain
  storageClassName: cnfs-nas-sc
  volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cnfs-nas-static-pvc
  namespace: default
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 50Gi
  storageClassName: cnfs-nas-sc
  volumeMode: Filesystem
  # 引用 PV
  volumeName: cnfs-nas-static-pv
status:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 50Gi

2. 建立樣本Deployment

展開查看範例程式碼

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cnfs-nas-deployment
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
        volumeMounts:
        - mountPath: "/data"
          # 引用下面volumes中定義的卷
          name: cnfs-nas-pvc
      volumes:
      # 定義一個名為 cnfs-nas-pvc 的卷
      - name: cnfs-nas-pvc
        # 所有Pod副本都通過該配置引用同一個PVC,實現共用儲存
        persistentVolumeClaim:
          claimName: cnfs-nas-static-pvc

3. 結果驗證

  1. 查看掛載情況

    查看Pod的掛載情況。

    kubectl exec cnfs-nas-deployment-*****a -- mount | grep nfs

    預期輸出包含掛載點,表明掛載成功。

    66bd9493d6-*****.cn-zhangjiakou.nas.aliyuncs.com:/ on /data type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.XX.XX.199,mountvers=3,mountport=2049,mountproto=tcp,local_lock=all,addr=10.XX.XX.199)
  2. 驗證Deployment的共用儲存和持久化儲存

配置NAS隔離儲存卷(每個Pod擁有獨立資料目錄)

為滿足多租戶等情境的資料隔離需求,可為每個Pod或每組Pod提供獨立的、相互隔離的儲存目錄。

  • 核心機制:通過動態儲存裝置卷方式實現。在StorageClass中,CSI會在聲明的path路徑下,自動建立一個與PV同名的獨立子目錄作為掛載點。因此,每個PVC都會綁定到一個獨立的儲存目錄,從而實現資料隔離。

  • 關鍵配置:

    • 在StatefulSet關聯的StorageClass中,通過parametersvolumeAs: subpath(預設值)為每個PVC建立獨立的子目錄。

    • 在StatefulSet中定義volumeClaimTemplates,為每個Pod自動建立並綁定一個獨立的PVC。

1. 建立支援動態子目錄的StorageClass

展開查看範例程式碼

PV對象中引用指定CNFS,並通過volumeAs: subpath讓CSI為每個PVC請求動態建立一個隔離的子目錄。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: cnfs-nas-sc
mountOptions:
  - nolock,tcp,noresvport
  - vers=3
parameters:
  # 實現隔離儲存卷的核心參數
  volumeAs: subpath
  # 引用已建立的CNFS
  containerNetworkFileSystem: cnfs-nas-filesystem
  # 指定在NAS上建立子目錄的根路徑
  # CSI會在此路徑下建立子目錄,目錄名與自動產生的PV名稱相同
  path: "/"
  archiveOnDelete: "false"
provisioner: nasplugin.csi.alibabacloud.com
# 刪除PVC時,自動刪除對應的NAS子目錄
reclaimPolicy: Delete
allowVolumeExpansion: true

2. 建立樣本StatefulSet

展開查看範例程式碼

基於StorageClass定義的模板,為每個Pod動態建立並掛載一個隔離的儲存卷。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: cnfs-nas-sts
  labels:
    app: nginx
spec:
  serviceName: "nginx"
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
        command: ["/bin/sh"]
        args: ["-c", "sleep 3600;"]
        volumeMounts:
        - mountPath: "/data"
          name: pvc
  # volumeClaimTemplates會為每個Pod基於下述模板自動建立一個PVC
  volumeClaimTemplates:
  - metadata:
      name: pvc
    spec:
      accessModes: [ "ReadWriteOnce" ]
      # 引用此前建立的StorageClass
      storageClassName: "cnfs-nas-sc" 
      resources:
        requests:
          # 僅用於調度決策,不代表真實配額限制,實際可用容量為NAS總容量
          storage: 50Gi  

3. 結果驗證

  1. 查看掛載情況

    查看Pod(如cnfs-nas-sts-0)的掛載資訊。

    kubectl exec cnfs-nas-sts-0 -- mount |grep nfs

    預期輸出表明,NAS的某個子目錄已成功掛載到Pod的/data路徑。

    66bd9493d6-*****.cn-zhangjiakou.nas.aliyuncs.com:/nas-e7242ba0-47ec-4410-9107-b0e247a***** on /data type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.XX.XX.199,mountvers=3,mountport=2049,mountproto=tcp,local_lock=all,addr=10.XX.XX.199)
  2. 驗證StatefulSet的資料隔離和持久化儲存

生產環境使用建議

  • 資料安全

    • 資料加密:建立新NAS檔案系統時,建議在CNFS的parameters中設定encryptType: SSE-KMS,以啟用NAS服務端的待用資料加密,提升資料安全性。

    • 資料保護與回收策略:CNFS的reclaimPolicy固定為Retain,刪除Kubernetes中的CNFS對象不會刪除後端的NAS執行個體。但PV的回收策略由其StorageClass定義,生產環境建議設定為Retain,避免誤刪。

    • 資源回收筒功能:建立NAS時,建議通過enableTrashCan: "true"參數開啟資源回收筒功能,避免誤刪。

    • 並發寫入:當多個Pod掛載同一個共用儲存卷時,應在應用程式層面避免多個執行個體同時寫入同一個檔案,以免因並發寫入導致檔案損壞。

  • 營運管理

    • 效能隔離:隔離儲存卷僅實現資料層面隔離,所有隔離卷共用後端同一個NAS執行個體的IOPS和輸送量。對於IO效能要求嚴苛且需要穩定延遲的核心應用,建議為其規劃獨立的專用NAS檔案系統。

    • 容量管理:在StorageClass中設定allowVolumeExpansion: true,以便對儲存卷的目錄配額進行擴容。

      PVC中requests.storage取值主要用於調度決策,並非整個NAS檔案系統的配額上限。
    • 監控與警示:利用容器儲存監控對NAS的容量使用率、IOPS、輸送量等關鍵計量配置警示,及時發現容量或效能瓶頸。

  • 成本最佳化

    • 按需選擇儲存類型:根據業務對成本和效能的敏感度,參見選型指導合理選擇NAS類型。例如,容量型NAS價格較低,適合對時延響應要求不高的檔案分享權限設定或歸檔業務。

    • 及時釋放資源:應用下線後,務必及時清理不再使用的資源,並確認是否需要刪除後端的NAS檔案系統,以免產生預期外費用。

參考資訊

驗證共用儲存、資料隔離、持久化儲存

NAS掛載完成後,可進一步驗證儲存行為是否符合預期。

  • 驗證Deployment的共用儲存和持久化儲存

    展開查看具體步驟

    共用儲存

    持久化儲存

    在一個Pod中建立檔案,然後在另一個Pod中查看檔案,驗證資料的共用儲存。

    1. 查看Pod資訊,擷取Pod名稱。

      kubectl get pod | grep cnfs-nas-deployment

      預期輸出:

      cnfs-nas-deployment-*****a 1/1 Running 0 40s
      cnfs-nas-deployment-*****b 1/1 Running 0 40s
    2. 在一個Pod中建立檔案。 以名為cnfs-nas-deployment-*****a的Pod作為樣本:

      kubectl exec cnfs-nas-deployment-*****a -- touch /data/test.txt
    3. 在另一個Pod中查看檔案是否存在。 以名為cnfs-nas-deployment-*****b的Pod為例。

      kubectl exec cnfs-nas-deployment-*****b -- ls /data

      預期輸出:

      test.txt

      可以查看到此前建立的檔案,表明資料可在多Pod間共用。

      重要

      多個Pod寫入共用儲存時,CNFS無法保證資料一致性,請避免對同一檔案進行並發寫入,以防檔案損壞。

    重建Deployment,在建立Pod中查看檔案系統中的資料是否存在,驗證資料的持久化儲存。

    1. 刪除應用Pod以觸發重建。

      kubectl rollout restart deploy cnfs-nas-deployment
    2. 查看Pod,等待新Pod啟動並進入Running狀態。

      kubectl get pod | grep cnfs-nas-deployment

      預期輸出:

      cnfs-nas-deployment-*****c 1/1 Running 0 67s
      cnfs-nas-deployment-*****d 1/1 Running 0 49s
    3. 在新Pod中查看此前建立的檔案是否存在。 以名為cnfs-nas-deployment-*****c的Pod為例。

      kubectl exec cnfs-nas-deployment-*****c -- ls /data

      預期輸出:

      test.txt

      可以查看到此前寫入的檔案,表明資料可持久化儲存。

  • 驗證StatefulSet的資料隔離和持久化儲存

    展開查看具體步驟

    StatefulSet的每個Pod有獨立的PVC,資料保持隔離。

    資料隔離

    持久化儲存

    在一個Pod中建立檔案,然後在另一個Pod中確認該檔案不存在,驗證各Pod間儲存卷的資料隔離性。

    1. 查看Pod資訊,擷取Pod名稱。

      kubectl get pod | grep cnfs-nas-sts

      預期輸出:

      cnfs-nas-sts-0 1/1 Running 0 5m
      cnfs-nas-sts-1 1/1 Running 0 5m
    2. 在一個Pod中建立檔案。 以名為cnfs-nas-sts-0的Pod作為樣本,建立一個可識別的檔案:

      kubectl exec cnfs-nas-sts-0 -- touch /data/sts-0-data.txt
    3. 在另一個Pod中查看該檔案是否存在。 以名為cnfs-nas-sts-1的Pod為例。

      kubectl exec cnfs-nas-sts-1 -- ls /data

      預期輸出中,未查看到cnfs-nas-sts-0中建立的檔案,表明每個StatefulSet Pod使用獨立的儲存卷,資料是相互隔離的。

    刪除指定Pod並等待其重建,在新Pod中查看資料是否存在。

    1. 刪除指定Pod以觸發重建。 以cnfs-nas-sts-0為例:

      kubectl delete pod cnfs-nas-sts-0
    2. 查看Pod,等待同名Pod啟動並進入Running狀態。StatefulSet會重新建立一個具有相同名稱和身份的Pod。

      kubectl get pod | grep cnfs-nas-sts

      預期輸出:

      cnfs-nas-sts-0                        1/1     Running   0          19s
      cnfs-nas-sts-1                        1/1     Running   0          102s
    3. 在新Pod中查看此前建立的檔案是否存在。

      kubectl exec cnfs-nas-sts-0 -- ls /data

      預期輸出中可查看此前寫入的檔案,持久化儲存成功。

      sts-0-data.txt

CNFS YAML說明

執行kubectl get cnfs/<cnfsName> -o yaml查看CNFS YAML時,可查看CNFS對象的全部配置和即時狀態。

此處以方式二中執行kubectl get cnfs/cnfs-nas-filesystem -o yaml查看cnfs-nas-filesystem YAML為例。

YAML樣本

展開查看

apiVersion: storage.alibabacloud.com/v1beta1
kind: ContainerNetworkFileSystem
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"storage.alibabacloud.com/v1beta1","kind":"ContainerNetworkFileSystem","metadata":{"annotations":{},"name":"cnfs-nas-filesystem"},"spec":{"description":"cnfs","parameters":{"encryptType":"SSE-KMS","enableTrashCan":"true","filesystemType":"standard","protocolType":"NFS","storageType":"Capacity","trashCanReservedDays":"5","vSwitchId":"vsw-2ze9l3ppwzg6bl02j****"},"reclaimPolicy":"Retain","type":"nas"}}
  creationTimestamp: "20**-05-14T08:20:09Z"
  finalizers:
  - protection.alibabacloud.com/cnfs
  generation: 6
  name: cnfs-nas-filesystem
  resourceVersion: "122342382"
  uid: a9e9650c-68b2-405b-8274-0f5b6063****
spec:
  description: "cnfs"
  reclaimPolicy: Retain
  type: nas
  parameters:
    encryptType: SSE-KMS
    enableTrashCan: "true"
    filesystemType: standard
    protocolType: NFS
    storageType: Capacity
    trashCanReservedDays: "5"
    vSwitchId: vsw-2ze9l3ppwzg6bl02j****
status:
  conditions:
  - lastProbeTime: "20**-05-14 16:20:15"
    reason: The nas filesystem and mount target complete initialization.
    status: Ready
  fsAttributes:
    accessGroupName: DEFAULT_VPC_GROUP_NAME
    encryptType: SSE-KMS
    enableTrashCan: "true"
    filesystemId: 17f7e*****
    filesystemType: standard
    protocolType: NFS
    regionId: cn-beijing
    server: 17f7e48ece-h****.cn-beijing.nas.aliyuncs.com
    storageType: Capacity
    vSwitchId: vsw-2ze9l3ppwzg6bl02j****
    vpcId: vpc-2ze9sgmehjvwv5x74****
    zoneId: cn-beijing-h
  status: Available

參數說明

展開查看

參數

說明

status

CNFS的目前狀態,包括Pending(等待)、Creating(建立中)、Initialization(建立檔案系統中)、Available(可用)、Unavailable(暫時不可用,可以恢複為可用狀態)、Fatal(不可用,無法恢複)、Terminating(刪除中)。

conditions.lastProbeTime

最後探活的時間。

conditions.reason

處於目前狀態的原因。

conditions.status

目前狀態是否可用,可用為Ready,不可用為NotReady

fsAttributes.accessGroupName

掛載點所應用的許可權組名稱,目前僅支援DEFAULT_VPC_GROUP_NAME(專用網路預設許可權組)。

fsAttributes.encryptType

可選,是否啟用加密方式

  • None:不加密。

  • SSE-KMS:啟用NAS託管密鑰,即使用NAS完全託管的祕密金鑰加密每個檔案系統,該密鑰由NAS在KMS中建立和管理。

fsAttributes.enableTrashCan

是否開啟資源回收筒功能,避免誤刪除檔案導致業務受阻或資料丟失。

  • true:開啟。

  • false:不開啟。

fsAttributes.filesystemId

檔案系統ID。

fsAttributes.filesystemType

檔案系統類型。預設為通用型NASstandard

fsAttributes.protocolType

檔案傳輸通訊協定類型。目前僅支援NFS協議

fsAttributes.regionId

CNFS所在的地區。

fsAttributes.server

NAS的掛載點地址。

fsAttributes.storageType

儲存類型。通用型NAS支援效能型Performance、容量型Capacity、進階型Premium

fsAttributes.vSwitchId

CNFS使用的vSwitch。

fsAttributes.vpcId

CNFS所在的VPC。

fsAttributes.zoneId

CNFS所在的可用性區域。

資源釋放指引

為避免產生預期外費用並確保資料安全,請遵循以下流程釋放無需使用的資源。

  1. 刪除工作負載

    • 操作:刪除所有使用相關PVC的應用,如Deployment、StatefulSet等,停止Pod並卸載儲存卷。

    • 命令樣本:kubectl delete deployment <your-deployment-name>

  2. 刪除PVC

    • 操作:刪除應用關聯的PVC,PV刪除結果取決於回收策略(reclaimPolicy)。

      • Retain(推薦):刪除PVC後,後端NAS上的資料和目錄會完整保留。

      • Delete:刪除PVC後,其綁定的PV也會被刪除。後端NAS上的資料和目錄將根據StorageClassarchiveOnDelete參數的設定進行處理。

        • "true"(預設):不會真正刪除目錄或檔案,而是將其重新命名,格式為archived-{pvName}.{timestamp}

        • "false" :資料被永久刪除,此操作無法復原,請謹慎使用。

    • 命令樣本:kubectl delete pvc <your-pvc-name>

  3. 刪除PV

    • 操作:刪除PV。主要針對靜態PV,或在上一步中使用Retain策略後處於Released狀態的PV。

      此操作僅移除Kubernetes中的資源定義,不刪除後端NAS資料。
    • 命令樣本:kubectl delete pv <your-pv-name>

  4. 刪除Kubernetes儲存定義(可選)

    • 操作:刪除不再需要的StorageClass和CNFS對象。

      此操作僅移除Kubernetes中的資源定義,不刪除後端NAS資料。
    • 命令樣本:kubectl delete sc <your-storageclass-name>kubectl delete cnfs <your-cnfs-name>

  5. 刪除後端NAS檔案系統

    • 操作:請參見刪除檔案系統。此操作將永久刪除該NAS上的所有資料,且無法恢複,請謹慎操作。執行前,請務必確認該NAS已無任何業務依賴。