静态挂载CPFS智算版存储卷

文件存储CPFS是阿里云推出的全托管、可扩展并行文件系统,满足高性能计算场景的需求。CPFS支持成百上千的机器同时访问,拥有数十GB的吞吐量、数百万的IOPS能力,同时还能保证亚毫秒级的延时。本文介绍如何在ACS中挂载CPFS存储卷,并验证CPFS的共享存储和持久化存储。

背景信息

CPFS包含智算版和通用版两种版本。更多信息,请参见CPFS产品概述

重要

CPFS智算版目前处于邀测中。更多信息,请参见CPFS智算版

前提条件

ACS集群中已安装managed-csiprovisioner组件。

说明

您可以在ACS集群管理页的左侧导航栏选择运维管理 > 组件管理,在存储页签下查看managed-csiprovisioner组件的安装情况。

使用限制

  • 不同计算类型的ACS Pod与不同规格的CPFS的支持情况如下表所示。

    CPU

    GPU

    GPU-HPN

    CPFS通用版

    支持

    支持

    支持

    CPFS智算版

    支持(VPC挂载点)

    暂不支持

    支持

  • 仅部分地域和可用区支持创建CPFS智算版文件系统,具体请参见CPFS智算版

注意事项

  • CPFS为共享存储。一个CPFS存储卷可以挂载到多个Pod上。

  • CPFS智算版采用按量计费,具体请参见CPFS智算版

创建CPFS文件系统

CPFS通用版

  1. 创建CPFS通用版文件系统,请参见创建文件系统

  2. 对应ACS集群的VPC和交换机创建VPC挂载点,创建完成后,记录下协议服务下导出目录的挂载地址,包含了挂载点域名和路径信息,例如cpfs-***-***.cn-wulanchabu.cpfs.aliyuncs.com:/share。更多信息,请参见创建协议服务

CPFS智算版

  1. CPFS智算版目前处于邀测中,您需要提交工单申请添加CPFS智算版服务使用白名单后,才能创建CPFS智算版文件系统。更多信息,请参见创建CPFS智算版文件系统

  2. (可选)如果您需要在CPU计算类型Pod中挂载CPFS智算版,需要对应ACS集群的VPC和交换机创建VPC挂载点,记录下挂载点域名,例如cpfs-***-vpc-***.cn-wulanchabu.cpfs.aliyuncs.com。更多信息,请参见管理VPC挂载点

    说明

    对于GPU-HPN计算类型Pod,不需要创建VPC挂载点。

挂载CPFS存储卷

步骤一:创建PV

  1. 连接集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群在CloudShell上通过kubectl管理Kubernetes集群

  2. 将以下YAML内容保存为pv.yaml。

    CPFS通用版

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: cpfs-test
      labels:
        alicloud-pvname: cpfs-test
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 10Ti
      csi:
        driver: nasplugin.csi.alibabacloud.com
        volumeAttributes:
          mountProtocol: cpfs-nfs
          server: cpfs-***-***.cn-wulanchabu.cpfs.aliyuncs.com
          path: /share
        volumeHandle: cpfs-*****

    相关参数说明如下:

    参数

    说明

    labels

    设置alicloud-pvname: cpfs-testlabel用于PVC使用selector进行匹配绑定。

    accessModes

    访问模式。

    capacity

    声明存储卷容量。

    csi.driver

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

    csi.volumeAttributes

    • mountProtocol设置为cpfs-nfs

    • server设置为CPFS通用版协议服务导出目录的挂载点域名,例如cpfs-***-***.cn-wulanchabu.cpfs.aliyuncs.com

    • path设置为CPFS通用版协议服务导出目录对应路径,例如/share。支持设置为子目录,例如/share/dir

    csi.volumeHandle

    设置为CPFS通用版文件系统ID。

    CPFS智算版

    仅支持GPU-HPN计算类型Pod挂载。

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

    相关参数说明如下:

    参数

    说明

    labels

    设置alicloud-pvname: cpfs-testlabel用于PVC使用selector进行匹配绑定。

    accessModes

    访问模式。

    capacity

    声明存储卷容量。

    csi.driver

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

    csi.volumeAttributes

    • filesystemIdCPFS智算版文件系统ID,例如bmcpfs-*****

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

    csi.volumeHandle

    设置为CPFS智算版文件系统ID。

    CPFS智算版(VPC挂载点)

    仅支持CPU计算类型Pod挂载。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: cpfs-test
      labels:
        alicloud-pvname: cpfs-test
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 10Ti
      csi:
        driver: nasplugin.csi.alibabacloud.com
        volumeAttributes:
          mountProtocol: efc
          server: cpfs-***-vpc-***.cn-wulanchabu.cpfs.aliyuncs.com
          path: /
        volumeHandle: bmcpfs-*****

    相关参数说明如下:

    参数

    说明

    labels

    设置alicloud-pvname: cpfs-testlabel用于PVC使用selector进行匹配绑定。

    accessModes

    访问模式。

    capacity

    声明存储卷容量。

    csi.driver

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

    csi.volumeAttributes

    • mountProtocol设置为efc

    • serverCPFS智算版VPC挂载点域名,例如cpfs-***-vpc-***.cn-wulanchabu.cpfs.aliyuncs.com

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

    csi.volumeHandle

    设置为CPFS智算版文件系统ID。

  3. 创建PV。

    kubectl create -f pv.yaml

步骤二:创建PVC

  1. 将以下YAML内容保存为pvc.yaml。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: cpfs-test
    spec:
      accessModes:
      - ReadWriteMany
      selector:
        matchLabels:
          alicloud-pvname: cpfs-test
      resources:
        requests:
          storage: 10Ti

    相关参数说明如下:

    参数

    说明

    accessModes

    访问模式。

    selector

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

    resources.requests

    容量不大于PV容量即可。

  2. 创建PVC。

    kubectl create -f pvc.yaml
  3. 检查PVC完成绑定。

    kubectl get pvc cpfs-test

    返回示例如下:

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

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

  1. 使用以下YAML内容,创建cpfs-test.yaml文件。

    以下YAML示例可以创建包含2个Pod的Deployment,2个Pod均通过alibabacloud.com/compute-class: gpu-hpn标签声明要使用GPU型算力,并且通过名为cpfs-pvc的PVC申请存储资源,挂载路径均为/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
            alibabacloud.com/compute-class: gpu-hpn
        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
  2. 创建Deployment并挂载CPFS。

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

    kubectl get pod | grep cpfs-test

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

    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

验证CPFS的共享存储和持久化存储

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

  • 在一个Pod中创建文件,然后另一个Pod中查看文件,以此来验证共享存储。

  • 重建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-****-***a的Pod作为示例:

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

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

      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