全部產品
Search
文件中心

Container Service for Kubernetes:使用NAS靜態儲存卷

更新時間:Dec 12, 2024

NAS儲存卷是一種可共用訪問、彈性擴充、高可靠以及高效能的Distributed File System,適用於巨量資料分析、共用資料、Web應用以及儲存日誌等情境。通過CSI組件,您可以使用已有的NAS建立PV和PVC,並在工作負載中掛載,實現資料的持久化儲存和共用儲存。

前提條件

使用限制

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

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

  • NAS靜態儲存卷不支援擴容。

注意事項

  • NAS為共用儲存,一個NAS儲存卷可以掛載到多個Pod上,可能出現多個Pod同時寫入資料的問題,需應用自行確保資料一致性。關於NAS並發寫入的一些限制條件,請參見如何避免多進程或多用戶端並發寫同一記錄檔可能出現的異常?如何解決向NFS檔案系統中寫入資料延遲問題?

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

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

  • 若您在應用模板中配置了securityContext.fsgroup參數,kubelet在儲存卷掛載完成後會執行chmodchown操作,導致掛載時間延長。若已配置securityContext.fsgroup參數,且需要減少掛載時間。具體操作,請參見NAS儲存卷掛載時間延長

步驟一:掛載NAS靜態儲存卷

kubectl

  1. 建立靜態PV。

    1. 將以下樣本YAML內容儲存為pv-nas.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   # 必須與PV Name保持一致。
          volumeAttributes:
            server: "0c47****-mpk25.cn-shenzhen.nas.aliyuncs.com"  # NAS掛載點,與叢集VPC一致。
            path: "/csi"  # 掛載子目錄。
        mountOptions:
        - nolock,tcp,noresvport
        - vers=3

      參數

      說明

      name

      PV的名稱。

      labels

      設定PV的標籤。

      storage

      NAS的可使用量。

      說明

      NAS儲存卷在實際使用中,不受此storage使用量限制,根據不同NAS使用限制確認NAS儲存卷最終可使用的容量。

      accessModes

      配置訪問模式,預設為ReadWriteMany,也支援ReadWriteOnceReadOnlyMany

      driver

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

      volumeHandle

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

      server

      NAS掛載點地址,必須與叢集VPC一致。

      說明

      替換為實際的掛載點地址,如何查看掛載點地址,請參見查看掛載點地址

      path

      在容器中掛載NAS儲存卷的子目錄。通用型NAS的父目錄為/。

      重要

      極速型NAS需要以/share為父目錄,則此處子目錄應為/share/csi

      mountOptions

      掛載NAS的options參數在mountOptions中配置,包括NFS協議版本。掛載NAS儲存卷的NFS協議版本號碼,推薦使用v3,極速類型NAS僅支援v3。關於NFS協議的更多資訊,請參見NFS協議

    2. 建立靜態PV。

      kubectl create -f pv-nas.yaml
  2. 建立NAS儲存聲明PVC,使用selector篩選PV,精確配置PVC和PV的綁定關係。

    1. 將以下樣本YAML內容儲存至pvc-nas.yaml檔案。

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

      參數

      說明

      樣本值

      name

      PVC名稱。

      pvc-nas

      accessModes

      訪問模式。預設為ReadWriteMany,也支援ReadWriteOnceReadOnlyMany

      ReadWriteMany

      storage

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

      說明

      NAS儲存卷在實際使用中,不受此storage使用量限制,根據不同NAS使用限制確認NAS儲存卷最終可使用的容量。

      5Gi

      matchLabels

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

      pv-nas

    2. 建立靜態PVC。

      kubectl create -f pvc-nas.yaml
  3. 建立名為nas-static的應用,並掛載PVC。

    1. 以下為建立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: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              ports:
              - containerPort: 80
              volumeMounts:
                - name: pvc-nas
                  mountPath: "/data"
            volumes:
              - name: pvc-nas
                persistentVolumeClaim:
                  claimName: pvc-nas

      參數

      說明

      mountPath

      NAS在容器中掛載的位置。

      claimName

      PVC的名稱,用於綁定PVC。

    2. 建立名為nas-static的應用,並掛載PVC。

      kubectl create -f nas.yaml
  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

控制台

步驟一:建立PV

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

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

  3. 儲存卷頁面,單擊建立

  4. 建立儲存卷頁面配置參數,配置完成後,單擊建立

    配置項

    說明

    樣本值

    儲存卷類型

    選擇NAS

    NAS

    名稱

    儲存卷名稱。在叢集內必須唯一。

    pv-nas

    總量

    儲存卷的容量。

    說明

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

    20Gi

    訪問模式

    支援ReadWriteManyReadWriteOnce。預設為ReadWriteMany

    ReadWriteMany

    是否使用CNFS

    是否使用CNFS功能。開啟後,您需要進行以下操作:

    開啟

    掛載點網域名稱

    僅在未開啟CNFS時,需要設定。

    您可以通過選擇掛載點或者自訂的方式配置要掛載的NAS檔案系統目錄。關於如何查看掛載點地址,請參見查看掛載點地址

    0c47****-mpk25.cn-shenzhen.nas.aliyuncs.co

    進階選項(選填)

    掛載路徑:NAS檔案系統中的掛載路徑。以/為根目錄,設定後儲存卷將掛載到指定的子目錄。

    • 如果NAS根目錄下沒有此子目錄,會預設建立後再進行掛載。

    • 您可以不填此項,預設掛載到NAS根目錄。

    • 極速型NAS需要以/share為根目錄,例如/share/data

    /data

    回收策略:預設為Delete,支援Retain

    • Delete:需配合archiveOnDelete一起使用。

      • archiveOnDeletetrue時,刪除PVC時,PV和NAS檔案只會被重新命名,不會被刪除。

      • archiveOnDeletefalse時,刪除PVC時,PV和NAS檔案會被真正刪除。

    • Retain:刪除PVC時,PV和NAS檔案不會被刪除,需要您手動刪除。

    如果資料安全性要求高,推薦使用Retain,以免誤刪除資料。

    Retain

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

    v3

    標籤

    為該儲存卷添加標籤。

    pv-nas

    建立完成後,在儲存卷頁面可以看到新建立的PV。

步驟二:建立PVC

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

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

  3. 建立儲存聲明頁面配置參數。配置完成後,單擊建立

    參數

    說明

    樣本值

    儲存宣告類型

    選擇NAS

    NAS

    名稱

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

    pvc-nas

    分配模式

    選擇已有儲存卷。

    說明

    若未建立儲存卷,您可以設定分配模式建立儲存卷,配置建立儲存卷參數。

    選擇已有儲存卷

    已有儲存卷

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

    已有儲存卷

    總量

    聲明所需使用的儲存卷的容量。

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

    20

    訪問模式

    預設為ReadWriteMany,也可選擇ReadWriteOnceReadOnlyMany

    ReadWriteMany

步驟三:建立應用

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

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

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

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

    配置項

    參數

    說明

    樣本

    應用基本資料

    應用程式名稱

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

    test-nas

    副本數量

    Deployment的副本數量。

    2

    容器配置

    鏡像名稱

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

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

    所需資源

    所需的vCPU和記憶體資源。

    0.25 vCPU,0.5 GiB

    資料卷

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

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

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

    • 掛載源:pvc-nas

    • 容器路徑:/data

    image.png

  4. 查看應用部署狀態。

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

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

步驟二:驗證NAS儲存特性

以上建立的工作負載Deployment中包含2個Pod,2個Pod掛載了同一個NAS檔案系統,您可以通過以下方式對NAS儲存卷進行共用儲存和持久化儲存驗證。

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

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

驗證NAS的持久化儲存

  1. 查看應用所在的Pod。

    kubectl get pod 

    預期輸出:

    NAME                          READY   STATUS    RESTARTS   AGE
    nas-static-5b5cdb85f6-a****   1/1     Running   0          32s
    nas-static-c5bb4746c-b****    1/1     Running   0          32s
  2. 在一個Pod中建立檔案。

    1. 查看應用中掛載的/data路徑下有無檔案。

      以一個名為nas-static-5b5cdb85f6-a****的Pod為例。

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

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

    2. 在該Pod的/data路徑下建立檔案nas。

      kubectl exec nas-static-5b5cdb85f6-a**** -- touch /data/nas
  3. 在另一個Pod中查看檔案。

    以另一個名為nas-static-5b5cdb85f6-b****的Pod為例。

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

    預期輸出:

    nas
  4. 重建Pod。

    1. 刪除Pod。

      kubectl delete pod nas-static-5b5cdb85f6-a****
    2. 同時在另一個視窗中,查看Pod刪除及Kubernetes重建Pod的過程。

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

    1. 查看重建的Pod名稱。

      kubectl get pod

      預期輸出:

      NAME                                  READY    STATUS    RESTARTS   AGE
      nas-static-5b5cdb85f6-c****   1/1     Running   0          32s
      nas-static-c5bb4746c-a****    1/1     Running   0          32s
    2. 查看重建Pod的/data路徑下的檔案。

      以名為nas-static-5b5cdb85f6-c****的Pod為例。

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

      預期輸出:

      nas

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

驗證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. 查看兩個Pod的/data路徑下的檔案。

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

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

  3. 在任意一個Pod 的/data路徑下建立檔案nas。

    以名為nas-static-5b5cdb85f6-n****的Pod為例。

     kubectl exec nas-static-5b5cdb85f6-n**** -- touch /data/nas
  4. 查看兩個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。

相關文檔