全部產品
Search
文件中心

Container Service for Kubernetes:掛載NAS靜態儲存卷

更新時間:Jul 31, 2025

NAS儲存卷是一種可共用訪問、彈性擴充、高可靠以及高效能的Distributed File System。本文介紹如何使用阿里雲NAS靜態儲存卷,以及如何?持久化儲存與共用儲存。

前提條件

使用情境

  • 對磁碟I/O要求較高的應用。

  • 可實現跨主機檔案分享權限設定,例如可作為檔案伺服器。

注意事項

  • 在使用極速NAS檔案系統時,配置儲存卷的path需要以/share為父目錄。例如,Pod掛載的NAS檔案系統子目錄可配置為/share/path1

  • NAS支援同時被多個Pod掛載,此時多個Pod可能同時修改相同資料,需要應用自行實現資料的同步。

    說明

    NAS儲存的/目錄不支援修改許可權、屬主和屬組。

  • 若您在應用模板中配置了securityContext.fsgroup參數,Kubelet在儲存卷掛載完成後會執行chmodchown操作,導致掛載時間延長。

    說明

    若已配置securityContext.fsgroup參數,且需要減少掛載時間。具體操作,請參見NAS儲存卷掛載時間延長

通過控制台的方式使用NAS靜態儲存卷

步驟一:建立PV

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

  2. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

  3. 在叢集管理頁左側導覽列,選擇儲存 > 儲存卷

  4. 儲存卷頁面單擊右上方的建立

  5. 建立儲存卷對話方塊中配置參數。

    參數

    說明

    儲存卷類型

    本文中選擇為NAS

    名稱

    建立的儲存卷的名稱。儲存卷名在叢集內必須唯一。本例為pv-nas

    總量

    所建立儲存卷的容量。注意NAS檔案系統本身不限制使用量。此處不是NAS檔案系統的使用限額,只是所建立儲存卷的容量聲明。

    訪問模式

    選擇ReadWriteManyReadWriteOnce。預設為ReadWriteMany

    掛載點網域名稱

    您可以通過選擇掛載點或者自訂的方式定義叢集在NAS檔案系統中掛載點的掛載地址。

    進階選項(選填)

    掛載路徑

    要掛載的NAS子目錄。

    • 如果未設定,則預設掛載到根目錄。

    • 如果NAS中沒有該目錄,會自動建立後再進行掛載。

    說明

    通用型NAS的根目錄為/,極速型NAS的根目錄為/share。掛載極速型NAS的子目錄時,path必須以/share開頭,如/share/data

    回收策略

    預設為Retain。表示刪除PVC時,PV和NAS檔案不會被刪除,需要您手動刪除。

    掛載選項

    NAS的掛載參數,包括NFS協議版本等。推薦使用NFS v3協議,極速型NAS僅支援NFS v3。關於NFS協議的更多資訊,請參見NFS協議

    標籤

    為該儲存卷添加標籤。

  6. 參數配置完成後,單擊建立

步驟二:建立PVC

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

  2. 儲存聲明頁面,單擊右上方的建立

  3. 在彈出的建立儲存聲明對話方塊中,填寫介面參數。

    參數

    說明

    儲存宣告類型

    本文中選擇NAS

    名稱

    建立的儲存聲明名稱在叢集內必須唯一。

    分配模式

    選擇已有儲存卷。

    說明

    若未建立儲存卷,您可以設定分配模式建立儲存卷,配置建立儲存卷參數。更多資訊,請參見建立PV

    已有儲存卷

    單擊選擇已有儲存卷,在目標儲存卷右側操作列單擊選擇,選擇儲存卷。

    總量

    所建立儲存卷的容量。

    說明

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

  4. 單擊建立

    建立成功後可以在列表中看到建立的儲存聲明,並且已綁定相應的儲存卷。

步驟三:建立應用

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

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

  3. 配置建立應用的參數資訊,配置完成後,單擊建立

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

    配置項

    參數

    說明

    樣本

    應用基本資料

    應用程式名稱

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

    nas-test

    副本數量

    Deployment的副本數量。

    2

    容器配置

    鏡像名稱

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

    anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

    所需資源

    所需的vCPU和記憶體資源。

    0.25 Core,512 MiB

    資料卷

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

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

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

    • 掛載源:pvc-nas

    • 容器路徑:/data

  4. 查看應用部署狀態。

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

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

通過kubectl命令列方式使用NAS靜態儲存卷

  1. 執行以下命令建立靜態PV。

    kubectl create -f pv-nas.yaml

    以下為建立靜態卷PV的YAML樣本檔案。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-nas
      labels:
        alicloud-pvname: pv-nas
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteMany
      csi:
        driver: nasplugin.csi.alibabacloud.com
        volumeHandle: pv-nas
        volumeAttributes:
          server: "2564f4****-ysu87.cn-shenzhen.nas.aliyuncs.com"
          path: "/csi"
      mountOptions:
      - nolock,tcp,noresvport
      - vers=3

    參數

    說明

    name

    PV的名稱。

    labels

    設定PV的標籤。

    storage

    NAS的可使用量。

    accessModes

    配置訪問模式。

    driver

    驅動類型。本例中取值為nasplugin.csi.alibabacloud.com,表示使用阿里雲NAS CSI外掛程式。

    volumeHandle

    配置PV的唯一識別碼。若需要同時使用多個PV,則各個PV中該值必須不一致。

    server

    NAS掛載點。

    path

    掛載子目錄,極速NAS需要以/share為父目錄。

    vers

    掛載NAS儲存卷的NFS協議版本號碼,推薦使用v3,極速類型NAS只支援v3。

  2. 執行以下命令建立靜態PVC。

    建立NAS儲存聲明PVC,使用selector篩選PV,精確配置PVC和PV的綁定關係。

    kubectl create -f pvc-nas.yaml

    以下為建立靜態卷PVC的YAML樣本檔案。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-nas
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
      selector:
        matchLabels:
          alicloud-pvname: pv-nas

    參數

    說明

    name

    PVC的名稱。

    accessModes

    配置訪問模式。

    storage

    聲明應用使用量,不能大於儲存卷的總量。

    matchLabels

    輸入PV的標籤,用於關聯PV。

  3. 執行以下命令建立名為nas-static的應用,並掛載PVC。

    kubectl create -f nas.yaml

    以下為建立nas-static應用的nas.yaml樣本檔案。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nas-static
      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: pvc-nas

    參數

    說明

    mountPath

    NAS在容器中掛載的位置。

    claimName

    PVC的名稱,用於綁定PVC。

  4. 執行以下命令,查看Pod資訊。

    kubectl get pod

    預期輸出:

    NAME                          READY   STATUS    RESTARTS   AGE
    nas-static-5b5cdb85f6-n****   1/1     Running   0          32s
    nas-static-c5bb4746c-4****    1/1     Running   0          32s

驗證NAS的持久化儲存

  1. 查看部署應用和NAS檔案。

    1. 執行以下命令,查看部署的應用程式名稱。

      kubectl get pod 

      預期輸出:

      NAME                          READY   STATUS    RESTARTS   AGE
      nas-static-5b5cdb85f6-n****   1/1     Running   0          32s
      nas-static-c5bb4746c-4****    1/1     Running   0          32s
    2. 執行以下命令,查看任意一個應用的/data路徑下的檔案,本文以名為nas-static-5b5cdb85f6-n****的Pod為例。

      kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data

      無返回結果,說明/data路徑下無檔案。

  2. 執行以下命令,在名為nas-static-5b5cdb85f6-n****Pod的/data路徑下建立檔案nas

    kubectl exec nas-static-5b5cdb85f6-n**** -- touch /data/nas
  3. 執行以下命令,查看名為nas-static-5b5cdb85f6-n****Pod的/data路徑下的檔案。

    kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data

    預期輸出:

    nas
  4. 執行以下命令,刪除Pod。

    kubectl delete pod nas-static-5b5cdb85f6-n****
  5. 同時在另一個視窗中,執行以下命令,查看Pod刪除及Kubernetes重建Pod的過程。

    kubectl get pod -w -l app=nginx
  6. 驗證刪除Pod後,NAS裡建立的檔案是否還存在。

    1. 執行以下命令,查看Kubernetes重建的Pod名稱。

      kubectl get pod

      預期輸出:

      NAME                                READY   STATUS    RESTARTS   AGE
      nas-static-5b5cdb85f6-n****   1/1     Running   0          32s
      nas-static-c5bb4746c-4****    1/1     Running   0          32s
    2. 執行以下命令,查看名為nas-static-5b5cdb85f6-n****的Pod在/data路徑下的檔案。

      kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data

      預期輸出:

      nas

      nas檔案仍然存在,說明NAS的資料可持久化儲存。

驗證NAS的共用儲存

  1. 查看部署的應用所在的Pod和NAS檔案。

    1. 執行以下命令,查看應用所在Pod的名稱。

      kubectl get pod 

      預期輸出:

      NAME                          READY   STATUS    RESTARTS   AGE
      nas-static-5b5cdb85f6-n****   1/1     Running   0          32s
      nas-static-c5bb4746c-4****    1/1     Running   0          32s
    2. 執行以下命令,查看2個Pod /data路徑下的檔案。

      kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data
      kubectl exec nas-static-c5bb4746c-4**** -- ls /data
  2. 執行以下命令,在任意一個Pod的/data路徑下建立檔案nas

     kubectl exec nas-static-5b5cdb85f6-n**** -- touch /data/nas
  3. 執行以下命令,查看2個Pod /data路徑下的檔案。

    1. 執行以下命令,查看名為nas-static-5b5cdb85f6-n****的Pod在/data路徑下的檔案。

      kubectl exec nas-static-5b5cdb85f6-n**** -- ls /data

      預期輸出:

      nas
    2. 執行以下命令,查看名為nas-static-c5bb4746c-4****的Pod在/data路徑下的檔案。

      kubectl exec nas-static-c5bb4746c-4**** -- ls /data

      預期輸出:

      nas

      如果在任意一個Pod的/data下建立的檔案,兩個Pod的/data路徑下均存在此檔案,則說明兩個Pod共用一個NAS。