全部產品
Search
文件中心

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

更新時間:Jan 22, 2026

CPFS智算版具有高輸送量和IOPS效能,支援端到端RDMA網路加速,適用於AIGC、自動駕駛等智算情境。ACK支援將CPFS智算版檔案系統以靜態儲存卷(PV)的形式掛載給工作負載使用。

重要

CPFS智算版目前處於邀測中,僅部分地區和可用性區域支援。如需使用,請聯絡客戶經理申請。

功能介紹

基於CSI組件,ACK支援以PV/PVC的方式為工作負載掛載CPFS智算版靜態儲存卷。CSI會根據Pod最終調度的節點類型,自動選擇最優的掛載方式:

  • VSC掛載:僅支援靈駿節點,需分別向 CPFS產品和靈駿產品諮詢提交工單開通白名單。

  • VPC掛載:支援非靈駿節點,通過建立VPC掛載點實現。同一VPC下的節點均可掛載訪問。

前提條件

  • 已瞭解CPFS智算版的CPFS智算版使用限制

  • 叢集滿足以下條件:

    • 叢集版本:1.26及以上版本。如需升級叢集,請參見手動升級叢集

    • 節點作業系統:Alibaba Cloud Linux 3。

    • 已安裝以下儲存群組件,且版本滿足要求。

      可在叢集的組件管理頁面,確認組件版本、安裝或升級組件。
      • CSI組件(csi-plugincsi-provisioner):v1.33.1及以上版本。如需升級,請參見管理CSI組件

      • cnfs-nas-daemon組件:0.1.2及以上版本。

        展開查看cnfs-nas-daemon介紹

        cnfs-nas-daemon負責管理EFC進程,其資源消耗較高,並直接影響儲存效能。可在組件管理頁面調整其資源配置,推薦的調整策略如下:

        • CPU:CPU請求量與節點總頻寬相關。計算規則為:每1Gb/s頻寬需分配0.5 Core,並額外增加1 Core用於中繼資料管理。請根據此規則調整CPU配置。

          例如,對於一個配置了100Gb/s網卡的節點,推薦的CPU請求量為 100 * 0.5 + 1 = 51 Cores。
        • Memory:CPFS智算版通過FUSE訪問,其資料讀寫緩衝及檔案中繼資料均佔用記憶體。推薦將記憶體請求量設定為節點總記憶體的15%。

        配置調整後,可根據實際負載情況進行動態擴縮。

        重要
        • 更新生效方式:cnfs-nas-daemon DaemonSet預設更新策略為OnDelete。在組件管理頁面調整其CPU或Memory後,需手動刪除節點上原有的cnfs-nas-daemon Pod,以觸發重建使新配置生效。

          為確保業務穩定性,建議在業務低峰期執行此操作。

        • 操作風險:刪除或重啟 cnfs-nas-daemon Pod 會臨時中斷該節點上的CPFS掛載服務。

          • 不支援掛載點熱升級的節點:此操作為硬中斷,將導致應用Pod運行異常。需手動刪除應用Pod,等待應用Pod重啟後恢複。

          • 支援熱升級的節點:應用Pod可在cnfs-nas-daemon Pod重啟後自動回復。

          ①:符合以下條件的節點支援熱升級:

          • 節點系統核心為5.10.134-18及以上

          • bmcpfs-csi-controller和bmcpfs-csi-plugin版本為 1.35.1 及以上

          • cnfs-nas-daemon版本為0.1.9-compatible.1及以上

      • bmcpfs-csi組件:包括bmcpfs-csi-controller(控制面組件,由ACK託管)和bmcpfs-csi-node(節點側組件,以DaemonSet形式部署在叢集中)。

注意事項

  • 使用VSC掛載時,運行 Pod 的節點必須與 CPFS 智算版檔案系統執行個體處於同一 hpn-zone。

  • 靈駿節點在初始化的時候必須與某一個 CPFS 智算版關聯,否則無法使用 CSI 進行掛載。

  • 靈駿節點出現故障需要下線前,必須先執行Pod排水(drain)操作。否則,將導致叢集元資訊不一致,造成Pod資源殘留且無法被正常回收。

  • 不支援在同一個Pod中通過多個PV掛載源於同一個CPFS執行個體的不同子目錄。由於底層驅動的限制,此類配置會導致Pod掛載失敗而無法啟動。

    推薦僅為該CPFS執行個體建立一個PV/PVC,然後在Pod的volumeMounts配置中使用subPath欄位來分別掛載所需的子目錄。

    subPath 基於輕量級的bind mount 機制實現,不會帶來額外效能開銷。

步驟一:建立CPFS檔案系統

  1. 參見建立CPFS智算版檔案系統建立CPFS檔案系統,並記錄檔案系統ID。

  2. (可選)如需在非靈駿節點實現掛載,請建立VPC掛載點(與叢集節點所在的VPC一致),並記錄掛載點網域名稱。格式為cpfs-***-vpc-***.<Region>.cpfs.aliyuncs.com

    如果Pod將調度到靈駿節點,則預設使用VSC掛載,無需此步驟。

步驟二:建立PV和PVC

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

    1. 修改以下YAML樣本,儲存為bmcpfs-pv-pvc.yaml。

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: bmcpfs
      spec:
        accessModes:
        - ReadWriteMany
        capacity:
          storage: 10Ti
        claimRef:
          name: bmcpfs
          namespace: default
        csi:
          driver: bmcpfsplugin.csi.alibabacloud.com
          volumeAttributes:
             # 如果Pod調度至非靈駿節點,或者開啟了跨域自動切換vpc能力,此項為必填,否則掛載會失敗
            vpcMountTarget: cpfs-***-vpc-***.<Region>.cpfs.aliyuncs.com
            # 如果Pod調度到與當前 bmcpfs 所在的不同可用性區域的節點, 則自動使用 vpcMountTarget 掛載點訪問 cpfs 儲存
            mountpointAutoSwitch: "true"
          # 將volumeHandle替換為CPFS智算版檔案系統ID
          volumeHandle: bmcpfs-*****
        mountOptions: []
      
      ---
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: bmcpfs
        namespace: default
      spec:
        accessModes:
        - ReadWriteMany
        resources:
          requests:
            storage: 10Ti
        volumeMode: Filesystem
        volumeName: bmcpfs
      • PV參數

        參數

        說明

        accessModes

        PV的訪問模式。

        capacity.storage

        聲明儲存卷容量。僅作聲明,不影響實際容量。

        csi.driver

        驅動類型。掛載CPFS智算版時,固定為bmcpfsplugin.csi.alibabacloud.com

        csi.volumeAttributes.vpcMountTarget

        CPFS的VPC掛載點網域名稱。置空會導致在非靈駿節點上掛載失敗。

        如果Pod調度至靈駿節點,則無需設定。

        csi.volumeAttributes.mountpointAutoSwitch

        是否允許 bmcpfs 在 vsc 掛載點(預設建立&擷取)和 vpc 掛載點(需指定)之間自動切換

        csi.volumeAttributes.vpcMountTarget 綁定使用

        csi.volumeHandle

        CPFS檔案系統的ID。

        mountOptions

        掛載參數。

      • PVC參數

        參數

        說明

        accessModes

        PVC請求PV的訪問模式,需與PV匹配。

        resources.requests.storage

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

        volumeMode

        掛載模式,需設定為Filesystem

        volumeName

        PVC要綁定的PV名稱。

    2. 建立PV和PVC。

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

    kubectl get pvc bmcpfs

    預期輸出:

    NAME     STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    bmcpfs   Bound    bmcpfs   10Ti       RWX                           <unset>                 51s

    STATUSBound,PV和PVC綁定成功。

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

情境一:掛載整個CPFS檔案系統

此情境將整個CPFS檔案系統掛載到容器中。

  1. 使用以下YAML內容,建立cpfs-test.yaml檔案,聲明掛載CPFS智算版靜態儲存卷。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cpfs-test
      labels:
        app: cpfs-test
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: cpfs-test
      template:
        metadata:
          labels:
            app: cpfs-test
        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-cpfs
                mountPath: /data
          volumes:
            - name: pvc-cpfs
              persistentVolumeClaim:
                claimName: bmcpfs
  2. 建立Deployment。

    kubectl create -f cpfs-test.yaml
  3. 查看Pod部署情況。

    kubectl get pod -l app=cpfs-test

    預期輸出:

    NAME                         READY   STATUS    RESTARTS   AGE
    cpfs-test-76b77d64b5-2hw96   1/1     Running   0          42s
    cpfs-test-76b77d64b5-dnwdx   1/1     Running   0          42s
  4. 進入任一Pod,驗證CPFS智算版靜態儲存卷是否掛載成功。

    kubectl exec -it <pod-name> -- mount | grep /data

    預期輸出如下,表明CPFS智算版靜態儲存卷掛載成功。

    bindroot-f0a5c-******:cpfs-*******-vpc-****.cn-shanghai.cpfs.aliyuncs.com:/ on /data type fuse.aliyun-alinas-efc (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=1048576)

情境二:掛載整個CPFS檔案系統的子目錄

在共用儲存情境中,如需實現多租戶或多任務的資料隔離,讓多個應用Pod 共用同一個 CPFS 卷,但又各自擁有獨立目錄時,可通過 volumeMounts.subPath 來實現。

  1. 參見以下內容,建立 pod.yaml。Pod包含兩個容器,分別通過subPath掛載同一個PVC (bmcpfs) 的不同子目錄。

    當Pod掛載時,如果subPath指定的子目錄(例如workspace/alpha)在CPFS檔案系統中不存在,系統將自動建立。
    apiVersion: v1
    kind: Pod
    metadata:
      name: cpfs-subpath-demo-pod
    spec:
      containers:
        - name: task-alpha-container
          image: busybox:1.35
          command: ["/bin/sh", "-c", "sleep 3600"]
          volumeMounts:
            - name: cpfs-storage
              mountPath: /data/workspace # 容器內的掛載路徑
              subPath: workspace/alpha   # 指定掛載卷內的 workspace/alpha 子目錄,而非整個卷
    
        - name: task-beta-container
          image: busybox:1.35
          command: ["/bin/sh", "-c", "sleep 3600"]
          volumeMounts:
            - name: cpfs-storage
              mountPath: /data/workspace # 容器內的掛載路徑可以相同
              subPath: workspace/beta    # 指定掛載卷內的 workspace/beta 子目錄,而非整個卷
      volumes:
        - name: cpfs-storage
          persistentVolumeClaim:
            claimName: bmcpfs # 引用此前建立的PVC
  2. 部署Pod。

    kubectl apply -f pod.yaml
  3. 驗證 task-alpha 容器的掛載和寫入。

    1. 串連到task-alpha容器。

      kubectl exec -it cpfs-subpath-demo-pod -c task-alpha-container -- /bin/sh
    2. 查看已掛載的檔案系統,確認 CPFS 儲存卷是否存在。

      df -h

      預期輸出如下,表明共用目錄(/share)已被成功掛載到容器內的 /data/workspace 路徑下。

      Filesystem                Size      Used Available Use% Mounted on
      ...
      192.XX.XX.0:/share          10.0T     1.0G     10.0T   0% /data/workspace
      ...
    3. 檢查掛載點的父目錄結構。

      ls -l /data/

      預期輸出如下,表明/data 目錄下存在名為 workspace 的子目錄。

      total 4
      drwxr-xr-x    2 root     root          4096 Aug 15 10:00 workspace
    4. 在掛載目錄中建立檔案以驗證寫入許可權。

      echo "hello from alpha" > /data/workspace/alpha.log
      exit
  4. 驗證 task-beta 容器的掛載和資料隔離。

    1. 串連到task-beta容器。

      kubectl exec -it cpfs-subpath-demo-pod -c task-beta-container -- /bin/sh
    2. 在容器的掛載點 /data/workspace 中建立檔案。

      echo "hello from beta" > /data/workspace/beta.log
    3. 檢查/data/workspace/目錄下的檔案。

      ls -l /data/workspace/

      預期輸出如下,表明beta.log寫入成功,且不存在alpha.log,兩個容器間的資料相互隔離。

      total 4
      -rw-r--r--    1 root     root            16 Aug 15 10:05 beta.log