全部產品
Search
文件中心

Container Compute Service:使用NAS儲存卷

更新時間:Sep 16, 2025

對於共用資料,I/O要求較高的應用情境,可以使用NAS檔案系統作為持久化儲存卷。本文介紹如何為應用掛載NAS儲存卷,並驗證NAS的共用儲存和持久化儲存。

背景資訊

NAS是一種可共用訪問、彈性擴充、高可靠以及高效能的Distributed File System,適用於共用資料,以及I/O要求較高的應用情境。更多資訊,請參見儲存概述

說明
  • 各類型NAS檔案系統的儲存規格、效能、計費、支援的地區和可用性區域等資訊,請參見通用型NAS極速型NAS

  • 通用型NAS與極速型NAS在掛載連通性、檔案系統數量及協議類型等方面存在相應約束條件。更多資訊,請參見使用限制

根據是否已有NAS檔案系統,可選擇以下方式掛載使用NAS儲存卷:

前提條件

ACS叢集中已安裝csi-provisioner組件。

說明

您可以在ACS叢集管理頁的左側導覽列單擊組件管理,然後在儲存頁簽下確認csi-provisioner組件的安裝情況。

使用限制

  • 不支援掛載SMB協議的NAS檔案系統。

  • NAS檔案系統只能掛載到相同VPC的Pod上,不支援跨VPC掛載。

    說明

    同一VPC下,NAS可以跨可用性區域掛載。

  • 僅支援通過NFSv3協議掛載NAS檔案系統。

注意事項

  • NAS為共用儲存,一個NAS儲存卷可以掛載到多個Pod上。此時多個Pod可能同時修改相同資料,需要應用自行實現資料的同步。

  • 掛載NAS時,請勿在應用的YAML中配置securityContext.fsgroup,這可能會造成掛載失敗。

    說明

    NAS檔案系統的/目錄不支援修改許可權、屬主和屬組。

  • 掛載NAS後,請勿刪除掛載點,否則會造成作業系統無響應。

使用已有NAS檔案系統作為儲存卷

步驟一:擷取NAS檔案系統資訊

  1. 擷取ACS Pod使用的VPC和交換器ID。

    說明

    以下步驟為控制台操作,也可以執行kubectl get cm -n kube-system acs-profile -o yaml命令查看acs-profile的YAML,在vpcIdvSwitchIds中擷取Pod使用的VPC ID和交換器ID。

    1. 登入容器計算服務控制台

    2. 叢集列表頁面,單擊目的地組群名稱,進入該叢集的管理頁面。

    3. 在左側導覽列,選擇組態管理 > 配置項

    4. 配置項頁面上方將命名空間改為kube-system,然後找到acs-profile,單擊YAML 編輯

    5. vpcIdvSwitchIds中擷取Pod使用的VPC ID和交換器ID。

  2. 確認已有的NAS檔案系統滿足要求,並擷取掛載點地址。

    1. 登入NAS檔案系統控制台,在左側導覽列,單擊檔案系統列表

    2. 找到目標NAS檔案系統,確認地區、可用性區域和協議類型滿足要求。

      • NAS不支援跨VPC掛載,即不支援跨地區使用。請確保已有NAS的所屬地區與ACS一致。

      • 同一VPC下,NAS可以跨可用性區域掛載,但建議和ACS叢集中Pod使用的可用性區域一致,效能相對更優。

      • 確認NAS檔案系統的協議類型為NFS。目前不支援掛載SMB協議的NAS檔案系統。

      nas

    3. 確認掛載點滿足要求,並擷取掛載點地址。

      1. 單擊檔案系統ID。

      2. 在檔案系統詳情頁左側導覽列,單擊掛載使用

      3. 掛載點地區,確認已有掛載點滿足要求,然後擷取掛載點地址。

        說明
        • 通用型NAS在建立檔案系統時會自動建立一個掛載點,極速型NAS需要手動建立掛載點。

        • 如果已有掛載點不滿足要求,可建立新的掛載點。具體操作,請參見管理掛載點

        • 掛載點的VPC必須和ACS叢集中Pod使用的VPC一致,否則會導致掛載失敗。

        • 掛載點的交換器建議和ACS叢集中Pod使用的交換器一致,效能相對更優。

        • 掛載點的狀態為可用

        NAS掛載點.png

步驟二:建立PVC

kubectl

  1. 將以下YAML內容儲存為nas-pvc.yaml。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: nas-pvc
      annotations:
        csi.alibabacloud.com/mountpoint: *******-mw***.cn-shanghai.nas.aliyuncs.com
        csi.alibabacloud.com/mount-options: nolock,tcp,noresvport
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 20Gi
      storageClassName: alibaba-cloud-nas

    相關參數說明如下:

    重要

    根據上述YAML建立PVC時,系統會根據annotations中關於NAS的配置先建立靜態PV,然後再建立PVC,關聯該PV。

    參數

    說明

    csi.alibabacloud.com/mountpoint

    要掛載的NAS檔案系統目錄。用於關聯之前建立的NAS檔案系統。

    • 如果輸入掛載點地址,例如****-****.<region>.nas.aliyuncs.com,則表示掛載的目錄為NAS檔案系統的根目錄(/)。

    • 如果輸入掛載點地址和子目錄,例如****-****.<region>.nas.aliyuncs.com:/dir,則表示掛載的目錄為NAS檔案系統的/dir目錄。如果/dir目錄不存在,系統會自動建立。

    csi.alibabacloud.com/mount-options

    掛載參數。建議使用nolock,tcp,noresvport

    accessModes

    訪問模式。

    storage

    分配給Pod的儲存容量,即要建立的NAS儲存卷容量。

  2. 建立PVC。

    kubectl create -f nas-pvc.yaml
  3. 查看PV。

    kubectl get pv

    預期返回如下,在建立PVC時已基於傳入的NAS檔案系統掛載點等資訊,自動建立對應的PV。

    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS        REASON   AGE
    nas-ea7a0b6a-bec2-4e56-b767-47222d3a****   20Gi       RWX            Retain           Bound    default/nas-pvc   alibaba-cloud-nas            1m58s
  4. 查看PVC。

    kubectl get pvc

    預期返回如下,PVC已關聯自動建立的PV。

    NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS        VOLUMEATTRIBUTESCLASS  AGE
    nas-pvc   Bound    nas-ea7a0b6a-bec2-4e56-b767-47222d3a****   20Gi       RWX            alibaba-cloud-nas   <unset>                2m14s

控制台

  1. 登入容器計算服務控制台

  2. 叢集列表頁面,單擊目的地組群名稱,進入該叢集的管理頁面。

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

  4. 儲存聲明頁面,單擊建立

  5. 在彈出的對話方塊中,完成參數配置,然後單擊建立

    參數

    說明

    樣本

    儲存宣告類型

    選擇NAS

    NAS

    名稱

    PVC名稱,自訂輸入。格式要求請參考介面提示。

    nas-pvc

    分配模式

    選擇使用掛載點網域名稱建立

    使用掛載點網域名稱建立

    儲存驅動

    預設已選擇CSI

    CSI

    總量

    分配給Pod的儲存容量,即要建立的NAS儲存卷容量。

    20Gi

    訪問模式

    支援ReadWriteMany和ReadWriteOnce。

    ReadWriteMany

    掛載點網域名稱

    配置要掛載的NAS檔案系統目錄。

    • 如果輸入掛載點地址,例如****-****.<region>.nas.aliyuncs.com,則表示掛載的目錄為NAS檔案系統的根目錄(/)。

    • 如果輸入掛載點地址和子目錄,例如****-****.<region>.nas.aliyuncs.com:/dir,則表示掛載的目錄為NAS檔案系統的/dir目錄。如果/dir目錄不存在,系統會自動建立。

    350514****-mw***.cn-shanghai.nas.aliyuncs.com

    建立完成後,在儲存聲明頁面可以看到新建立的PVC,該PVC已綁定自動建立的PV(即NAS儲存卷)。可在儲存卷頁面查看對應PV的詳細資料。

    nas-pvc.png

    nas-pv.png

步驟三:建立應用並掛載NAS

kubectll

  1. 使用以下YAML內容,建立nas-test.yaml檔案。

    以下YAML樣本可以建立包含2個Pod的Deployment,2個Pod均通過名為nas-pvc的PVC申請儲存資源,掛載路徑均為/data

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nas-test
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            ports:
            - containerPort: 80
            volumeMounts:
              - name: pvc-nas
                mountPath: /data
          volumes:
            - name: pvc-nas
              persistentVolumeClaim:
                claimName: nas-pvc
  2. 建立Deployment並掛載NAS。

    kubectl create -f nas-test.yaml
  3. 查看Deployment中Pod的部署情況。

    kubectl get pod | grep nas-test

    返回樣本如下,已建立2個Pod。

    nas-test-****-***a   1/1     Running   0          40s
    nas-test-****-***b   1/1     Running   0          40s
  4. 查看掛載路徑。

    kubectl exec nas-test-****-***a -- df -h /data

    預期輸出:

    Filesystem                                        Size  Used Avail Use% Mounted on
    350514*****-mw***.cn-shanghai.nas.aliyuncs.com:/   10P     0   10P   0% /data

    如果輸出類似資訊,則表示掛載檔案系統成功。

控制台

  1. 在叢集管理頁面的左側導覽列,選擇工作負載 > 無狀態

  2. 無狀態頁面,單擊使用鏡像建立

  3. 完成Deployment的參數配置,單擊建立

    需要注意的參數如下,其他參數保持預設即可。更多資訊,請參見建立無狀態工作負載Deployment

    配置頁

    參數

    說明

    樣本

    應用基本資料

    應用程式名稱

    Deployment名稱,自訂輸入。格式要求請參考介面提示。

    nas-test

    副本數量

    配置Deployment的副本數量。

    2

    容器配置

    鏡像名稱

    輸入用於部署應用的鏡像地址。

    registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest

    所需資源

    設定所需的vCPU和記憶體資源。

    0.25 vCPU,0.5 GiB

    資料卷

    單擊增加雲端儲存聲明,然後完成參數配置。

    • 掛載源:選擇之前建立的PVC。

    • 容器路徑:輸入NAS檔案系統要掛載到的容器路徑。

    • 掛載源:nas-pvc

    • 容器路徑:/data

  4. 查看應用部署情況。

    1. 無狀態頁面,單擊應用程式名稱。

    2. 容器組頁簽下,確認Pod已正常運行(狀態為Running)。

建立NAS檔案系統作為儲存卷

步驟一:建立StorageClass

  1. 參考參數說明表修改以下YAML內容,並儲存為nas-sc.yaml。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-fs
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      volumeAs: filesystem
      fileSystemType: standard
      storageType: Performance
      regionId: cn-shanghai
      zoneId: cn-shanghai-e
      vpcId: "vpc-2ze2fxn6popm8c2mzm****"
      vSwitchId: "vsw-2zwdg25a2b4y5juy****"
      accessGroupName: DEFAULT_VPC_GROUP_NAME
      deleteVolume: "false"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain

    相關參數說明如下:

    重要

    不同類型和儲存規格的NAS檔案系統支援的地區、可用性區域不同。請根據業務的儲存需求、ACS叢集所屬地區和ACS叢集中Pod使用的VPC和交換器資訊等確定需要在哪個地區、可用性區域,以及哪個VPC、交換器下建立什麼類型的NAS檔案系統和掛載點。相關參考如下:

    • 各類型NAS檔案系統的儲存規格、效能、計費、支援的地區和可用性區域等資訊,請參見通用型NAS極速型NAS

    • 通用型NAS與極速型NAS在掛載連通性、檔案系統數量及協議類型等方面存在相應約束條件。更多資訊,請參見使用限制

    • 可執行kubectl get cm -n kube-system acs-profile -o yaml命令查看acs-profile的YAML,在vpcIdvSwitchIds中擷取Pod使用的VPC ID和交換器ID。

    參數

    說明

    volumeAs

    目前僅支援filesystem,表示會自動建立一個NAS檔案系統,即一個NAS儲存卷對應一個NAS檔案系統。

    fileSystemType

    NAS檔案系統的類型。

    • standard(預設):通用型NAS,更多資訊,請參見通用型NAS

    • extreme:極速型NAS,更多資訊,請參見極速型NAS

    storageType

    NAS檔案系統的儲存規格。

    • 對於通用型NAS,可選值如下:

      • Performance(預設):效能型

      • Capacity:容量型

    • 對於極速型NAS,可選值如下:

      • standard(預設):標準型

      • advanced:進階型

    regionId

    NAS檔案系統所屬地區。需與ACS叢集所屬地區保持一致。

    zoneId

    NAS檔案系統所屬可用性區域。請根據ACS叢集中Pod所使用的交換器,選擇對應的可用性區域。

    說明

    同一VPC下,NAS可以跨可用性區域掛載。建議選擇同一可用性區域,效能相對更優。

    vpcIdvSwitchId

    NAS檔案系統掛載點所屬的VPC ID和交換器ID。需配置為ACS叢集中Pod使用的VPC ID和交換器ID。

    accessGroupName

    NAS檔案系統掛載點的許可權組。預設為DEFAULT_VPC_GROUP_NAME

    provisioner

    驅動類型。必須配置為nasplugin.csi.alibabacloud.com,表示使用阿里雲NAS CSI外掛程式。

    reclaimPolicy

    PV的回收策略。目前僅支援Retain,表示刪除PV時,會保留對應的NAS檔案系統和掛載點。

  2. 建立StorageClass。

    kubectl create -f nas-sc.yaml
  3. 查看StorageClass。

    kubectl get sc

    預期返回:

    NAME                             PROVISIONER                       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    alicloud-nas-fs                  nasplugin.csi.alibabacloud.com    Retain          Immediate              false                  13m
    ......

步驟二:建立PVC

  1. 將以下YAML內容儲存為nas-pvc-fs.yaml。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: nas-pvc-fs
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: alicloud-nas-fs
      resources:
        requests:
          storage: 20Gi

    相關參數說明如下:

    參數

    說明

    accessModes

    訪問模式。

    storage

    分配給Pod的儲存容量,即要建立的NAS儲存卷容量。

    說明

    由於極速型NAS有100 GiB的最小容量限制,如果StorageClass中定義的NAS檔案系統類型為極速型NAS,此處storage的值必須≥100 GiB,否則無法建立對應的PV。

    storageClassName

    要綁定的StorageClass名稱。

  2. 建立PVC。

    kubectl create -f nas-pvc-fs.yaml
  3. 查看PVC。

    kubectl get pvc

    返回樣本如下,PVC已關聯自動建立的PV。可前往NAS檔案系統控制台查看對應的NAS檔案系統。

    NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      VOLUMEATTRIBUTESCLASS  AGE
    nas-pvc-fs   Bound    nas-04a730ba-010d-4fb1-9043-476d8c38****   20Gi       RWX            alicloud-nas-fs   <unset>                14s

步驟三:建立應用並掛載NAS

  1. 使用以下YAML內容,建立nas-test-fs.yaml檔案。

    以下YAML樣本可以建立包含2個Pod的Deployment,2個Pod均通過名為nas-pvc-fs的PVC申請儲存資源,掛載路徑均為/data

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nas-test
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            ports:
            - containerPort: 80
            volumeMounts:
              - name: pvc-nas
                mountPath: /data
          volumes:
            - name: pvc-nas
              persistentVolumeClaim:
                claimName: nas-pvc-fs
  2. 建立Deployment並掛載NAS。

    kubectl create -f nas-test-fs.yaml
  3. 查看Deployment中Pod的部署情況。

    kubectl get pod | grep nas-test

    返回樣本如下,已建立2個Pod。

    nas-test-****-***a   1/1     Running   0          40s
    nas-test-****-***b   1/1     Running   0          40s
  4. 查看掛載路徑。

    kubectl exec nas-test-****-***a -- df -h /data

    預期輸出:

    Filesystem                                        Size  Used Avail Use% Mounted on
    350514*****-mw***.cn-shanghai.nas.aliyuncs.com:/   10P     0   10P   0% /data

    如果輸出類似資訊,則表示掛載檔案系統成功。

通過NFS Volume方式掛載已有NAS檔案系統

步驟一:擷取NAS檔案系統資訊

請參考擷取NAS檔案系統資訊,擷取NAS掛載點地址。

步驟二:建立應用並掛載NAS

  1. 使用以下YAML內容,建立nas-test-nfs.yaml檔案。

    以下YAML樣本可以建立包含2個Pod的Deployment,2個Pod均通過名為nfs-nas的volume將NAS檔案系統掛載至/data路徑。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nas-test
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            ports:
            - containerPort: 80
            volumeMounts:
              - name: nfs-nas
                mountPath: /data
          volumes:
          - name: nfs-nas
            nfs:
              server: file-system-id.region.nas.aliyuncs.com    # 阿里雲NAS檔案系統掛載點地址,請根據實際值替換。例如,7bexxxxxx-xxxx.ap-southeast-1.nas.aliyuncs.com。
              path: /    # NAS檔案系統目錄路徑。該目錄必須為已經存在的目錄或根目錄。通用型NAS的根目錄為“/”,極速型NAS的根目錄為“/share”。
  2. 建立Deployment並掛載NAS。

    kubectl create -f nas-test-nfs.yaml
  3. 查看Deployment中Pod的部署情況。

    kubectl get pod | grep nas-test

    返回樣本如下,已建立2個Pod。

    nas-test-****-***a   1/1     Running   0          40s
    nas-test-****-***b   1/1     Running   0          40s
  4. 查看掛載路徑。

    kubectl exec nas-test-****-***a -- df -h /data

    預期輸出:

    Filesystem                                        Size  Used Avail Use% Mounted on
    350514*****-mw***.cn-shanghai.nas.aliyuncs.com:/   10P     0   10P   0% /data

    如果輸出類似資訊,則表示掛載檔案系統成功。

驗證NAS的共用儲存和持久化儲存

按照上文樣本建立的Deployment中含有2個Pod,2個Pod掛載了同一NAS檔案系統。可通過以下方式進行驗證:

  • 在一個Pod中建立檔案,然後另一個Pod中查看檔案,以此來驗證共用儲存。

  • 重建Deployment,然後在新建立的Pod中查看檔案系統中的資料是否存在,以此來驗證持久化儲存。

  1. 查看Pod資訊。

    kubectl get pod | grep nas-test

    返回樣本如下:

    nas-test-****-***a   1/1     Running   0          40s
    nas-test-****-***b   1/1     Running   0          40s
  2. 驗證共用儲存。

    1. 在一個Pod中建立檔案。

      以名為nas-test-****-***a的Pod作為樣本:

      kubectl exec nas-test-****-***a -- touch /data/test.txt
    2. 在另一個Pod中查看檔案。

      以名為nas-test-****-***b的Pod作為樣本:

      kubectl exec nas-test-****-***b -- ls /data

      預期返回如下,可以看到已共用建立的檔案test.txt

      test.txt
  3. 驗證持久化儲存。

    1. 重建Deployment。

      kubectl rollout restart deploy nas-test
    2. 查看Pod,等待新Pod建立成功。

      kubectl get pod | grep nas-test

      返回樣本如下:

      nas-test-****-***c   1/1     Running   0          67s
      nas-test-****-***d   1/1     Running   0          49s
    3. 在新Pod中查看檔案系統中的資料是否存在。

      以名為nas-test-c***的Pod作為樣本:

      kubectl exec nas-test-****-***c -- ls /data

      預期返回如下,可以看到NAS檔案系統中的資料依然存在,在新Pod的掛載目錄下可以重新擷取。

      test.txt