全部產品
Search
文件中心

Container Compute Service:靜態掛載NAS儲存卷

更新時間:Dec 11, 2024

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

背景資訊

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

說明

ACS支援靜態和動態掛載NAS儲存卷。本文介紹靜態掛載方式,動態掛載方式請參見動態掛載NAS儲存卷

前提條件

ACS叢集中已安裝managed-csiprovisioner組件。

說明

您可以在ACS叢集管理頁的左側導覽列選擇營運管理 > 組件管理,在儲存頁簽下查看managed-csiprovisioner組件的安裝情況。

使用限制

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

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

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

注意事項

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

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

    說明

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

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

建立NAS檔案系統和掛載點

NAS掛載點所屬VPC必須與ACS叢集中Pod所屬VPC一致,否則會導致掛載失敗。如果在Pod使用的VPC和交換器下,您已有NAS檔案系統和掛載點,可跳過該步驟。

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

    說明

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

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

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

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

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

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

  2. 建立NAS檔案系統和掛載點。

    1. 登入NAS檔案系統控制台

    2. 建立檔案系統。

      1. 檔案系統列表頁面,單擊建立檔案系統,然後選擇建立通用型NAS建立極速型NAS

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

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

      2. 在彈出面板完成NAS相關參數配置,然後單擊立即購買,並完成後續操作。

        本文以通用型NAS為例,需要注意的參數如下,更多資訊,請參見建立檔案系統

        參數

        說明

        地區

        與ACS叢集一致。

        可用性區域

        根據步驟1所擷取的Pod使用的交換器ID,選擇對應的可用性區域。

        協議類型

        選擇NFS。目前不支援掛載SMB協議的NAS檔案系統。

        Virtual Private Cloud虛擬交換器

        選擇ACS叢集中Pod使用的VPC和交換器。可根據步驟1所擷取的VPC ID和交換器ID在專用網路控制台查詢。

    3. 查看掛載點,並擷取掛載點地址。

      說明

      通用型NAS在建立檔案系統時會自動建立一個掛載點,極速型NAS需要手動建立掛載點。具體操作,請參見管理掛載點

      1. 檔案系統列表頁面,單擊檔案系統ID。

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

      3. 掛載點地區,確認已有掛載點,且掛載點的狀態為可用

        NAS掛載點.png

靜態掛載NAS儲存卷

通過kubectl命令

步驟一:建立PVC

  1. 串連叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集在CloudShell上通過kubectl管理Kubernetes叢集

  2. 將以下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

    相關參數說明如下:

    參數

    說明

    csi.alibabacloud.com/mountpoint

    要掛載的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儲存卷容量。

  3. 建立PVC。

    kubectl create -f nas-pvc.yaml
  4. 查看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
  5. 查看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

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

  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. 查看掛載路徑。

    命令樣本如下,預期會返回NAS檔案系統掛載目錄下的資料。預設為空白。

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

通過控制台

步驟一:建立PVC

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

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

  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

  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的共用儲存和持久化儲存

按照上文樣本建立的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