ACS挂载CPFS智算版文件系统

更新时间:
复制为 MD 格式

本文介绍如何在容器计算服务(ACS)中挂载CPFS智算版文件系统,支持多个Pod同时挂载实现数据共享。

前提条件

  • 已创建CPFS智算版文件系统。具体操作,请参见创建文件系统

  • ACS集群中已安装csi-provisioner组件。

    说明

    您可以在ACS集群管理页的左侧导航栏单击组件管理,然后在存储页签下确认csi-provisioner组件的安装情况。

步骤一:确定挂载方式

根据您的计算资源类型,确定网络方式并完成前置准备:

您的资源

对应网络

前置准备

GPU Pod(支持RDMA:GU8TF、GU8TEF、L20X、P16EN等)

RDMA

确保CPFS智算版的可用区(AZ)和集群编号与所使用的灵骏GPU保持一致

GPU Pod(不支持RDMA:L20、G49E、T4、A10、G59等)

VPC

创建VPC挂载点

CPU Pod

VPC

创建VPC挂载点

如不确定您的GPU类型,请参见ACS支持的GPU卡型

步骤二:创建PVPVC

CPFS智算版采用静态挂载方式,需手动创建PVPVC:

  • PV(PersistentVolume):持久卷,定义CPFS的连接信息(文件系统ID、网络类型、挂载路径等)

  • PVC(PersistentVolumeClaim):持久卷声明,Pod通过引用PVC使用存储,实现存储与应用的解耦

根据您的操作习惯选择命令行或控制台方式。

kubectl命令行

根据步骤一确定的网络类型,选择对应配置。

RDMA网络

适用于灵骏GPU(GU8TF、GU8TEF、L20X、P16EN等)。

  1. 创建cpfs-pv-pvc.yaml文件,定义PVPVC:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: cpfs-test
      labels:
        alicloud-pvname: cpfs-test
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 10Ti
      csi:
        driver: bmcpfsplugin.csi.alibabacloud.com
        volumeAttributes:
          filesystemId: bmcpfs-*****
          path: /
        volumeHandle: bmcpfs-*****
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: cpfs-test
    spec:
      accessModes:
      - ReadWriteMany
      selector:
        matchLabels:
          alicloud-pvname: cpfs-test
      resources:
        requests:
          storage: 10Ti

    参数说明:

    • PV参数

      参数

      说明

      labels

      设置Label,以便PVC使用selector进行匹配绑定。

      accessModes

      PV的访问模式。

      capacity.storage

      声明存储卷容量。

      csi.driver

      驱动类型,设置为povplugin.csi.alibabacloud.com

      csi.volumeAttributes

      CPFS存储卷的属性。

      • filesystemId:CPFS智算版文件系统ID。

      • path:默认为/表示挂载CPFS文件系统的根目录,支持设置为子目录,如/dir。如果子目录不存在,会在挂载时被自动创建。

      csi.volumeHandle

      CPFS智算版文件系统ID。

    • PVC参数

      参数

      说明

      accessModes

      PVC请求PV的访问模式。

      selector

      使用PV上的Label进行匹配绑定。

      resources.requests.storage

      分配给Pod的存储容量。不大于PV容量即可。

  2. 执行创建命令:

    kubectl create -f cpfs-pv-pvc.yaml
  3. 确认PVC已绑定PV。

    kubectl get pvc cpfs-test

    返回示例如下(STATUS显示Bound表示成功):

    NAME        STATUS   VOLUME           CAPACITY   ACCESS MODES   STORAGECLASS    VOLUMEATTRIBUTESCLASS   AGE
    cpfs-test   Bound    cpfs-test        10Ti       RWX            <unset>         <unset>                 10s

VPC网络

适用于CPU Pod,以及普通GPU(T4、A10等)。

  1. 创建cpfs-pv-pvc.yaml文件,定义PVPVC:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: cpfs-test
      labels:
        alicloud-pvname: cpfs-test   # [PV标签] PVC通过此绑定
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 10Ti
      csi:
        driver: nasplugin.csi.alibabacloud.com
        volumeAttributes:
          mountProtocol: efc
          server: cpfs-***-vpc-***.cn-wulanchabu.cpfs.aliyuncs.com  # 替换为VPC挂载点域名
          path: /
        volumeHandle: bmcpfs-*****   # 替换为您的CPFS智算版文件系统ID
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: cpfs-test      # [PVC名称] Deployment通过此引用
    spec:
      accessModes:
      - ReadWriteMany
      selector:
        matchLabels:
          alicloud-pvname: cpfs-test    # [PVC选择器] 需与PV标签一致
      resources:
        requests:
          storage: 10Ti

    参数说明:

    • PV参数

      参数

      说明

      labels

      设置Label,以便PVC使用selector进行匹配绑定。

      accessModes

      访问模式。

      capacity.storage

      声明存储卷容量。

      csi.driver

      驱动类型,设置为nasplugin.csi.alibabacloud.com

      csi.volumeAttributes

      CPFS存储卷的属性。

      • mountProtocol:挂载协议,设置为efc

      • server:CPFS文件系统的VPC挂载点域名。

      • path:默认为/表示挂载CPFS文件系统的根目录,支持设置为子目录,如/dir

      csi.volumeHandle

      CPFS智算版文件系统ID。

    • PVC参数

      参数

      说明

      accessModes

      PVC请求PV的访问模式。

      selector

      使用PV上的Label进行匹配绑定。

      resources.requests.storage

      分配给Pod的存储容量。不大于PV容量即可。

  2. 执行创建命令:

    kubectl create -f cpfs-pv-pvc.yaml
  3. 确认PVC已绑定PV。

    kubectl get pvc cpfs-test

    返回示例如下(STATUS显示Bound表示成功):

    NAME        STATUS   VOLUME           CAPACITY   ACCESS MODES   STORAGECLASS    VOLUMEATTRIBUTESCLASS   AGE
    cpfs-test   Bound    cpfs-test        10Ti       RWX            <unset>         <unset>                 10s

控制台

控制台方式仅支持RDMA网络挂载GPU应用,VPC网络请使用kubectl方式。
  1. 登录容器计算服务控制台

  2. 集群列表页面,单击目标集群名称,进入该集群的管理页面。

  3. 在左侧导航栏选择存储 > 存储声明,单击创建,完成以下配置:

    参数

    说明

    示例

    存储声明类型

    选择CPFS

    CPFS

    名称

    PVC名称,自定义输入。格式要求请参考界面提示。

    cpfs-pvc

    分配模式

    根据需要选择已有存储卷创建存储卷

    创建存储卷

    CPFS类型

    选择CPFS智算版

    CPFS智算版

    访问模式

    支持ReadWriteManyReadWriteOnce

    ReadWriteMany

    文件系统ID

    配置要挂载的CPFS智算版文件系统ID。

    bmcpfs-0115******13q5

  4. 查看创建的PVPVC。

    存储声明页面和存储卷页面,可以看到新创建的PVPVC,确认两者已绑定。

步骤三:创建应用并挂载CPFS

创建Deployment应用,通过引用PVC将存储挂载到容器指定目录。根据您的操作习惯选择命令行或控制台方式。

kubectl方式

根据您的应用类型选择对应的配置。

GPU应用

适用于灵骏GPU(GU8TF等)和普通GPU(T4、A10等)。

  1. 创建cpfs-test.yaml文件,定义Deployment并引用PVC:

    以下YAML示例可以创建包含2PodDeployment,2Pod均通过alibabacloud.com/compute-class: gpu标签声明要使用GPU型算力,并且通过名为cpfs-testPVC申请存储资源,挂载路径均为/data

    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
            # 指定计算类型为GPU型
            alibabacloud.com/compute-class: gpu
            # 指定GPU型号,请按实际情况填写,如T4
            alibabacloud.com/gpu-model-series: T4
            alibabacloud.com/compute-qos: default
        spec:
          containers:
          - name: nginx
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            ports:
            - containerPort: 80
            volumeMounts:
              - name: pvc-cpfs
                mountPath: /data
          volumes:
            - name: pvc-cpfs
              persistentVolumeClaim:
                claimName: cpfs-test    # [Deployment] 需与PVC名称一致
  2. 创建应用:

    kubectl create -f cpfs-test.yaml
  3. 确认Pod运行成功:

    kubectl get pod | grep cpfs-test

    返回示例如下,已创建2Pod。

    cpfs-test-****-***a   1/1     Running   0          45s
    cpfs-test-****-***b   1/1     Running   0          45s
  4. 验证挂载成功

    命令示例如下,预期会返回CPFS智算版文件系统挂载目录下的数据。默认为空。

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

CPU应用

  1. 创建cpfs-test.yaml文件。

    以下YAML示例可以创建包含2PodDeployment,通过名为cpfs-testPVC申请存储资源,挂载路径均为/data

    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: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            ports:
            - containerPort: 80
            volumeMounts:
              - name: pvc-cpfs
                mountPath: /data
          volumes:
            - name: pvc-cpfs
              persistentVolumeClaim:
                claimName: cpfs-test     # [Deployment] 需与PVC名称一致
  2. 创建Deployment并挂载CPFS。

    kubectl create -f cpfs-test.yaml
  3. 查看DeploymentPod的部署情况。

    kubectl get pod | grep cpfs-test

    返回示例如下,已创建2Pod。

    cpfs-test-****-***a   1/1     Running   0          45s
    cpfs-test-****-***b   1/1     Running   0          45s
  4. 查看挂载路径。

    命令示例如下,预期会返回CPFS智算版文件系统挂载目录下的数据。默认为空。

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

控制台

  1. 在集群管理页面的左侧导航栏,选择工作负载 > 无状态

  2. 无状态页面,单击使用镜像创建

  3. 完成Deployment的参数配置,单击创建

    需要注意的参数如下,其他参数保持默认即可。更多信息,请参见创建无状态工作负载Deployment

    GPU应用

    配置页

    参数

    说明

    示例

    应用基本信息

    应用名称

    Deployment名称,自定义输入。格式要求请参考界面提示。

    cpfs-test

    副本数量

    配置Deployment的副本数量。

    2

    实例类型

    选择Pod的计算类型。

    说明

    关于GPU卡具体型号,请参见ACS GPU Pod指定GPU型号和驱动版本

    GPU,T4

    容器配置

    镜像名称

    输入用于部署应用的镜像地址。

    registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest

    所需资源

    设置所需的GPU、vCPU和内存资源。

    • GPU:1

    • CPU:2 vCPU

    • 内存:2 GiB

    数据卷

    单击增加云存储声明,然后完成参数配置。

    • 挂载源:选择之前创建的PVC。

    • 容器路径:输入CPFS文件系统要挂载到的容器路径。

    • 挂载源:pvc-cpfs

    • 容器路径:/data

    CPU应用

    配置页

    参数

    说明

    示例

    应用基本信息

    应用名称

    Deployment名称,自定义输入。格式要求请参考界面提示。

    cpfs-test

    副本数量

    配置Deployment的副本数量。

    2

    实例类型

    选择Pod的计算类型。

    CPU,通用型

    容器配置

    镜像名称

    输入用于部署应用的镜像地址。

    registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest

    所需资源

    设置所需的vCPU和内存资源。

    • CPU:0.25 vCPU

    • 内存:0.5 GiB

    数据卷

    单击增加云存储声明,然后完成参数配置。

    • 挂载源:选择之前创建的PVC。

    • 容器路径:输入CPFS文件系统要挂载到的容器路径。

    • 挂载源:pvc-cpfs

    • 容器路径:/data

  4. 查看应用部署情况。

    1. 无状态页面,单击应用名称。

    2. 容器组页签下,确认Pod已正常运行(状态为Running)。

步骤四:验证挂载结果

按照上文示例创建的Deployment中含有2Pod,2Pod同时挂载了同一CPFS文件系统。您可以通过以下方式进行验证:

重建Deployment,然后在新创建的Pod中查看文件系统中的数据是否存在,以此来验证持久化存储。

  1. 查看Pod信息。

    kubectl get pod | grep cpfs-test

    返回示例如下:

    cpfs-test-****-***a   1/1     Running   0          45s
    cpfs-test-****-***b   1/1     Running   0          45s
  2. 验证共享存储。

    1. 在一个Pod中创建文件。

      以名为cpfs-test-****-***aPod作为示例:

      kubectl exec cpfs-test-****-***a -- touch /data/test.txt
    2. 在另一个Pod中查看文件。

      以名为cpfs-test-****-***bPod作为示例:

      kubectl exec cpfs-test-****-***b -- ls /data

      预期返回如下,可以看到已共享新建的文件test.txt

      test.txt
  3. 验证持久化存储。

    1. 重建Deployment。

      kubectl rollout restart deploy cpfs-test
    2. 查看Pod,等待新Pod创建成功。

      kubectl get pod | grep cpfs-test

      返回示例如下:

      cpfs-test-****-***c   1/1     Running   0          78s
      cpfs-test-****-***d   1/1     Running   0          52s
    3. 在新Pod中查看文件系统中的数据是否存在。

      以名为cpfs-test-c***Pod作为示例:

      kubectl exec cpfs-test-****-***c -- ls /data

      预期返回如下,可以看到CPFS文件系统中的数据依然存在,在新Pod的挂载目录下可以重新获取。

      test.txt