全部產品
Search
文件中心

Container Service for Kubernetes:使用CPFS通用版靜態儲存卷

更新時間:Nov 07, 2025

CPFS是一種並行檔案系統,具有高吞吐和高IOPS,能夠滿足HPC高效能運算情境的需求,如AI訓練、自動駕駛、基因計算、影視渲染等業務。本文介紹如何建立CPFS通用版靜態儲存卷,並在工作負載中掛載。

前提條件

csi-plugin和csi-provisioner組件版本不低於v1.22.11-abbb810e-aliyun。如需升級,請參見升級CSI組件

使用限制

  • 僅支援部分地區,請參見CPFS通用版開服地區

  • 僅支援通過NFS協議掛載,不支援通過POSIX協議掛載。

  • 僅支援掛載到x86架構的節點上。

  • 不支援跨VPC掛載,僅支援掛載到同一VPC的叢集中。

  • 不支援掛載到作業系統為ContainerOS的節點上。

配置儲存群組件

請根據csi-plugin組件的版本,選擇配置方式。

  • csi-plugin版本為1.33及以上

    安裝cnfs-nas-daemon組件,並配置csi-plugin開啟AlinasMountProxy=true FeatureGate,使得CSI後續調用cnfs-nas-daemon進行掛載。具體操作,請參見管理cnfs-nas-daemon組件

  • csi-plugin版本小於1.33

    1. 配置ConfigMap,開啟掛載CPFS通用版時使用的NFS協議。

      cat << EOF | kubectl apply -f -
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: csi-plugin
        namespace: kube-system
      data:
        cpfs-nas-enable: "true"   # 使用CPFS通用版掛載時,使用NFS協議。
      EOF
    2. 重啟csi-plugin,安裝相關依賴。

      此操作不影響業務正常運行。

      kubectl -n kube-system rollout restart daemonset csi-plugin

      預期輸出:

      daemonset.apps/csi-plugin restarted

步驟一:建立CPFS檔案系統和協議服務

CPFS僅支援靜態掛載。您需要先建立CPFS檔案系統以及對應的協議服務,並擷取掛載地址以便後續掛載使用。

  1. 建立CPFS通用版檔案系統

    • 請在叢集所屬地區建立CPFS檔案系統。

    • 如果使用已有CPFS檔案系統,請在NAS控制台檔案系統列表頁面單擊目標CPFS檔案系統,在基本資料頁面確認CPFS版本號碼為2.3.0及以上。如果不滿足,請建立新的CPFS檔案系統。

  2. 建立協議服務

    • 請使用叢集對應的VPC和交換器建立協議服務,並產生掛載點。

    • 如果使用已有協議服務,請確認協議服務所使用的VPC是否與叢集一致(CPFS不支援跨VPC掛載)。如果不滿足,請重新建立協議服務。

  3. 擷取協議服務的掛載地址。

    協議服務頁面,單擊匯出目錄,然後在掛載地址列複製並儲存掛載地址。掛載地址包含掛載點網域名稱以及掛載目錄,如果指定匯出的是 / 目錄,則掛載地址顯示為cpfs-****.<Region ID>.cpfs.aliyuncs.com:/share

步驟二:建立PV和PVC

  1. 基於已有的CPFS檔案系統,建立對應的PV和PVC。

    1. 將以下內容儲存為cpfs-pv-pvc.yaml。

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: cpfs-pv
        labels:
          alicloud-pvname: cpfs-pv
      spec:
        accessModes:
        - ReadWriteMany
        capacity:
          storage: 20Gi
        csi:
          driver: nasplugin.csi.alibabacloud.com
          volumeAttributes:
            mountProtocol: cpfs-nfs                                         # 使用NFS協議進行掛載。
            path: "/share"                                                  # 掛載地址中的目錄。
            volumeAs: subpath                                               # 子目錄。
            server: "cpfs-******-******.cn-shanghai.cpfs.aliyuncs.com"      # 掛載地址中的網域名稱
          volumeHandle: cpfs-pv                                             # 必須與PV Name保持一致。
        mountOptions:
        - rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport
        - vers=3
      ---
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: cpfs-pvc
      spec:
        accessModes:
        - ReadWriteMany
        resources:
          requests:
            storage: 20Gi
        selector:
          matchLabels:
            alicloud-pvname: cpfs-pv
      • PV參數

        參數

        說明

        labels

        設定Label,以便PVC使用selector進行匹配綁定。

        accessModes

        PV的訪問模式。

        capacity.storage

        聲明儲存卷容量。

        csi.driver

        驅動類型,設定為nasplugin.csi.alibabacloud.com

        csi.volumeAttributes

        CPFS儲存卷的屬性。

        • mountProtocol:設定為cpfs-nfs,表示使用NFS協議掛載CPFS。

        • path:設定為CPFS通用版協議服務匯出目錄對應路徑,例如/share。支援設定為子目錄,例如/share/dir

        • volumeAs:設定為subpath,表示建立子目錄類型的PV。

        • server:設定為CPFS通用版協議服務匯出目錄的掛載地址的網域名稱。

        csi.volumeHandle

        必須與PV Name保持一致。

      • PVC參數

        參數

        說明

        accessModes

        PVC請求PV的訪問模式。

        selector

        使用PV上的Label進行匹配綁定。

        resources.requests.storage

        分配給Pod的儲存容量。不大於PV容量即可。

    2. 建立PV和PVC。

      kubectl apply -f cpfs-pv-pvc.yaml
  2. 確認PVC已綁定PV。

    kubectl get pvc cpfs-pvc

    返回樣本如下:

    NAME       STATUS   VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    cpfs-pvc   Bound    cpfs-pv   20Gi       RWO                           <unset>                 18m

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

  1. 建立StatefulSet並掛載CPFS通用版靜態卷。

    1. 將以下內容儲存為cpfs-test.yaml。

      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: cpfs-sts
      spec:
        selector:
          matchLabels:
            app: nginx
        serviceName: "nginx"
        replicas: 1
        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:
              - name: cpfs-pvc
                mountPath: /data
            volumes:
            - name: cpfs-pvc
              persistentVolumeClaim:
                claimName: cpfs-pvc
    2. 建立StatefulSet。

      kubectl apply -f cpfs-test.yaml
  2. 確認CPFS通用版靜態卷是否掛載成功。

    kubectl exec cpfs-sts-0 -- mount | grep /data

    預期輸出如下,說明CPFS通用版靜態卷掛載成功。

    cpfs-******-******.cn-shanghai.cpfs.aliyuncs.com:/share on /data type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,port=30000,timeo=600,retrans=2,sec=sys,mountaddr=127.0.1.255,mountvers=3,mountport=30000,mountproto=tcp,local_lock=all,addr=127.0.1.255)