全部產品
Search
文件中心

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

更新時間:Dec 25, 2025

通過CNFS,可將阿里雲NAS檔案系統作為原生Kubernetes資源進行管理,為網站、資料分析等工作負載提供了更簡單、高效的儲存方案。

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

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

image

方式

說明

卷提供方式

適用情境

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

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

動態磁碟區

  • 快速功能驗證。

  • 無需關心底層儲存配置,但配置較為固定,無法靈活選擇儲存類型、定義資源回收筒保留時間等。

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

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

  • 動態磁碟區

  • 靜態卷

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

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

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

  • 動態磁碟區

  • 靜態卷

將已有NAS平滑接入叢集。

準備工作

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

    通過kubectl使用CNFS時,支援1.20版本。
  • csi-plugin、csi-provisioner、storage-operator的版本滿足以下要求:

    如需升級,請參見組件
    • csi-plugin和csi-provisioner:v1.20.5-ff6490f-aliyun及以上版本。

    • storage-operator:v1.18.8.56-2aa33ba-aliyun及以上版本;通過控制台使用CNFS時需為v1.26.2-1de13b6-aliyun及以上版本。

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

    首次登入時,按照頁面引導開通服務。
    • 僅支援通用型NAS的容量型和效能型。

      不支援進階型和極速型NAS。
    • 每個帳號在單個地區內可建立的NAS檔案系統數量存在上限。

    • 如需對NAS檔案系統進行KMS加密,需開通KMS服務,詳見開通Key Management Service

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

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

kubectl

部署樣本

以下YAML展示了應用(Deployment和StatefulSet)如何請求並掛載儲存:通過PVC向StorageClass請求儲存,該StorageClass基於關聯的CNFS對象,在NAS中自動建立一個子目錄作為PV並掛載至應用Pod。

展開查看YAML

# 建立CNFS、StorageClass和工作負載。
cat << EOF | kubectl apply -f -
apiVersion: storage.alibabacloud.com/v1beta1
kind: ContainerNetworkFileSystem
metadata:
  name: cnfs-nas-filesystem
spec:
  description: "cnfs"
  type: nas
  reclaimPolicy: Retain  # 僅支援Retain,刪除CNFS時不會刪除後端的NAS執行個體。
  parameters:
    encryptType: SSE-KMS  # 可選:不指定表示對檔案不啟用NAS託管密鑰,指定SSE-KMS表示啟用。
    enableTrashCan: "true"  # 可選:不指定表示不開啟資源回收筒功能,指定true表示開啟。
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alibabacloud-cnfs-nas
mountOptions:
  - nolock,tcp,noresvport
  - vers=3
parameters:
  volumeAs: subpath # 每個PVC都會在NAS下建立一個獨立的子目錄。
  containerNetworkFileSystem: cnfs-nas-filesystem # 關聯到上面定義的CNFS執行個體。
  path: "/"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
# 指定為true,允許對儲存卷的目錄配額進行擴容
allowVolumeExpansion: true 
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: cnfs-nas-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: alibabacloud-cnfs-nas
  resources:
    requests:
      storage: 70Gi  # 如果啟用目錄限額功能,此處storage值將作為該PVC對應子目錄的配額。動態建立目錄寫入資料量最大為70 GiB。
---
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
---
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:
          storage: 50Gi  # 如果開啟目錄限額功能,則storage欄位會生效,動態建立目錄寫入資料量最大為50 GiB。
EOF

CNFS的參數說明如下。

其餘資源的參數說明,可參見使用NAS動態儲存裝置卷

參數

說明

description

當前CNFS的描述。

type

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

reclaimPolicy

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

parameters.encryptType

可選,是否啟用加密方式

  • None:不加密。

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

parameters.enableTrashCan

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

  • true:開啟。

  • false:不開啟。

結果驗證

  1. 檢查PV和PVC狀態。

    展開查看

    1. 檢查PVC狀態。

      kubectl get pvc

      預期輸出中,所有PVC的STATUS均為 Bound,已與PV綁定。

      NAME                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS            VOLUMEATTRIBUTESCLASS   AGE
      cnfs-nas-pvc         Bound    nas-bc418e70-0f21-475a-8821-7e811fa56fdc   70Gi       RWX            alibabacloud-cnfs-nas   <unset>                 41s
      www-cnfs-nas-sts-0   Bound    nas-3b0285dd-b705-4c68-84c7-9b07bb42f91b   50Gi       RWO            alibabacloud-cnfs-nas   <unset>                 41s
    2. 檢查Pod狀態。

      kubectl get pods -l app=nginx

      預期輸出中,Pod運行狀態正常。

      NAME                                  READY   STATUS    RESTARTS   AGE
      cnfs-nas-deployment-d4d56c479-*****   2/2     Running   0          78s
      cnfs-nas-deployment-d4d56c479-*****   2/2     Running   0          78s
      cnfs-nas-sts-0                        2/2     Running   0          78s
      cnfs-nas-sts-1                        2/2     Running   0          24s
  2. 驗證Deployment的共用儲存和持久化儲存

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

控制台

1. 建立CNFS

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

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

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

    • 選擇NAS檔案系統

    • 選擇建立預設NAS

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

  4. 在CNFS列表,單擊目標CNFS查看詳情,然後單擊NAS ID進入NAS檔案系統詳情頁面。

  5. 單擊掛載使用,在掛載點地址列查看目標掛載點的掛載點地址。

2. 建立StorageClass

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

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

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

    配置項

    說明

    樣本

    儲存卷類型

    選擇NAS

    NAS

    選擇掛載點

    此前通過CNFS建立的預設NAS檔案系統的掛載點地址。

    關於如何查看掛載點地址,請參見管理掛載點

    64888******-e*****.cn-qingdao.nas.aliyuncs.com

    掛載路徑

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

    如果NAS中沒有該目錄,系統會自動建立並進行掛載。

    /

    回收策略

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

    Retain

3. 建立PVC

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

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

    參數

    說明

    名稱

    叢集內保持唯一。

    分配模式

    儲存卷使用方式。

    已有儲存卷類

    單擊選擇儲存類,選擇此前建立的StorageClass。

    總量

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

    訪問模式

    預設為ReadWriteMany,也可選擇ReadWriteOnceReadOnlyMany

4. 建立應用並掛載NAS

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

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

image

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

通過CNFS可建立具有自訂參數的NAS檔案系統。流程如下:

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

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

kubectl

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

  1. 建立一個ContainerNetworkFileSystem資源,聲明NAS的詳細參數,如儲存類型、加密方式、交換器等。

    cat <<EOF | kubectl apply -f -
    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****
    EOF

    參數

    說明

    description

    當前CNFS的描述。

    type

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

    reclaimPolicy

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

    parameters.filesystemType

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

    parameters.storageType

    儲存類型。通用型NAS可選擇效能型Performance或容量型Capacity

    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支援的地區和可用性區域,請參見地區 可用性區域

  2. 查看建立的NAS檔案系統。

    kubectl get cnfs

    預期輸出:

    NAME                  AGE
    cnfs-nas-filesystem   30s
  3. 查看NAS檔案系統的詳細資料。

    kubectl get cnfs/cnfs-nas-filesystem -o yaml

    完整的YAML說明,請參見CNFS YAML說明

2. 建立PV或StorageClass

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

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

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

PV

關於PV參數的詳細說明,請參見使用NAS靜態儲存卷
  1. 執行以下內容建立引用NAS檔案系統的PV對象。

    cat <<EOF | kubectl apply -f -
    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
        volumeHandle: cnfs-nas-pv # 需與PV name保持一致。
        volumeAttributes:
          containerNetworkFileSystem: cnfs-nas-filesystem
          path: "/"
      mountOptions:
        - nolock,tcp,noresvport
        - vers=3
    EOF

    參數

    說明

    containerNetworkFileSystem

    指定需要使用的CNFS名稱。

    path

    掛載儲存卷在CNFS中使用的路徑。

  2. 查看PV是否建立成功。

    kubectl get pv

    預期輸出:

    NAME                            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                       STORAGECLASS             VOLUMEATTRIBUTESCLASS   REASON   AGE
    cnfs-nas-pv                     5Gi        RWX            Retain           Available                                                        <unset>                          9s

StorageClass

關於StorageClass參數的詳細說明,請參見使用NAS動態儲存裝置卷

建立引用NAS檔案系統的StorageClass。

cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alibabacloud-nas-cnfs
mountOptions:
  - nolock,tcp,noresvport
  - vers=3
parameters:
  volumeAs: subpath
  containerNetworkFileSystem: cnfs-nas-filesystem
  path: "/"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
# 指定為true,允許對儲存卷的目錄配額進行擴容
allowVolumeExpansion: true
EOF

3. 建立PVC

關於PVC參數的詳細說明,請參見建立PVC

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

PV

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

StorageClass

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata: 
  name: cnfs-nas-pvc
spec:
  accessModes:
  - ReadWriteMany 
  storageClassName: alibabacloud-nas-cnfs
  resources: 
    requests:
      storage: 70Gi
EOF

4. 建立應用並掛載NAS

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

  1. 建立引用PVC的應用。

    cat <<EOF | kubectl apply -f -
    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
    EOF
  2. 查看所建立應用的工作狀態。

    kubectl get pod -l app=nginx

    預期輸出中,Pod狀態正常,CNFS成功將NAS檔案系統掛載到Pod中。

    NAME                             READY   STATUS    RESTARTS   AGE
    cnfs-nas-deployment-86959b****   1/1     Running   0          30s
    cnfs-nas-deployment-869ajk****   1/1     Running   0          30s
  3. 驗證Deployment的共用儲存和持久化儲存

控制台

1. 建立CNFS

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

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

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

2. 建立PV或StorageClass

通過建立靜態PV或動態儲存裝置類StorageClass來綁定NAS檔案系統。

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. 儲存類頁面,單擊建立,按照頁面提示完成StorageClass的配置。

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

    配置項

    說明

    樣本

    儲存卷類型

    選擇NAS

    NAS

    選擇掛載點

    此前通過CNFS建立的預設NAS檔案系統的掛載點地址。

    關於如何查看掛載點地址,請參見管理掛載點

    64888******-e*****.cn-qingdao.nas.aliyuncs.com

    掛載路徑

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

    如果NAS中沒有該目錄,系統會自動建立並進行掛載。

    /

    回收策略

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

    Retain

3. 建立PVC

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

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

    參數

    說明

    名稱

    叢集內保持唯一。

    分配模式

    儲存卷使用方式。

    已有儲存卷類

    單擊選擇儲存類,選擇此前建立的StorageClass。

    總量

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

    訪問模式

    預設為ReadWriteMany,也可選擇ReadWriteOnceReadOnlyMany

4. 建立應用並掛載NAS

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

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

image

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

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

kubectl

1. 使用已有NAS建立CNFS

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

    # 當NAS檔案系統存在時,載入已建立的NAS檔案系統。
    cat <<EOF | kubectl apply -f -
    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
    EOF

    參數

    說明

    description

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

    type

    需要建立的儲存類型。

    reclaimPolicy

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

    parameters.server

    NAS的掛載點地址。

  2. 查看NAS檔案系統。

    kubectl get cnfs

    預期輸出:

    NAME                  AGE
    cnfs-nas-filesystem   10s
  3. 查看NAS檔案系統的詳細資料。

    kubectl get cnfs/cnfs-nas-filesystem -o yaml

    完整的YAML說明,可參見CNFS YAML說明

2. 在應用中掛載NAS

在應用中基於CNFS使用NAS儲存卷的流程與方式二:自訂參數建立並使用NAS檔案系統類似。請參見:

控制台

1. 使用已有NAS建立CNFS

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

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

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

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

    • 選擇NAS檔案系統。

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

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

2. 在應用中掛載NAS

在應用中基於CNFS使用NAS儲存卷的流程與方式二:自訂參數建立並使用NAS檔案系統類似。請參見:

生產環境使用建議

維度

說明

資料安全

資料加密:建立新的NAS檔案系統時,可在CNFS資源中設定encryptType: SSE-KMS,啟用NAS服務端的待用資料加密。

營運管理

  • 資料保護:CNFS的回收策略reclaimPolicy固定為Retain,刪除K8s中的儲存物件不會刪除後端的NAS執行個體和資料,這是防止誤操作的重要保障。

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

  • 監控與警示:利用容器儲存監控配置警示,及時發現容量或效能瓶頸。

成本最佳化

  • 按需選擇儲存類型:參見選型指導合理選擇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間共用。

重建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                        2/2     Running   0          19s
    cnfs-nas-sts-1                        2/2     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: 17f7e48ece
    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

fsAttributes.vSwitchId

CNFS使用的vSwitch。

fsAttributes.vpcId

CNFS所在的VPC。

fsAttributes.zoneId

CNFS所在的可用性區域。