使用CPFS2.0静态存储卷

CPFS(Cloud Paralleled File System)是一种并行文件系统。CPFS的数据存储在集群中的多个数据节点,并可由多个客户端同时访问,从而能够为大型高性能计算机集群提供高IOPS、高吞吐、低时延的数据存储服务。本文介绍如何在ACK集群中挂载及使用CPFS2.0静态存储卷。

前提条件

步骤一:创建协议服务并获取挂载地址

您需要先创建CPFS文件系统对应的协议服务,并获取协议服务的挂载地址方便后续在ACK集群中挂载使用。

  1. 登录NAS控制台,选择文件系统 > 文件系统列表

  2. 文件系统列表页面,单击目标文件系统名称。

  3. 在文件系统详情页面,确认CPFS的版本号大于等于2.3.0,最大容量大于等于3600 GiB,然后单击协议服务

  4. 协议服务页面,单击创建协议服务,配置如下参数,然后单击确定

    参数

    说明

    协议服务配置

    选择协议服务规格,默认为通用型。

    说明
    • 文件系统容量大于3600 GiB才能创建通用型协议服务。

    • 通用型协议服务的带宽与CPFS文件系统的带宽一致,不提供数据缓存,不产生费用。

    协议类型

    NFSv3协议。

    VPC网络

    协议集群使用的VPC网络,与CPFS文件系统使用的VPC网络相同,不可修改。

    交换机

    选择协议集群使用的vSwitch网络,默认为CPFS文件系统使用的vSwitch,可配置为该VPC内的其他vSwitch。

    说明

    单个协议服务最多消耗vSwitch上32个IP地址,请确保该vSwitch IP资源充足。

    协议导出

    指定CPFS文件系统中通过协议服务导出的Fileset或者目录。推荐使用Fileset导出,具备更强的功能,例如文件数量管理、数据流动。

    说明
    • 指定导出的Fileset或目录必须已存在。若Fileset不存在,请先创建Fileset。具体操作,请参见创建Fileset

    • 使用目录导出时,目录格式如下:

      • 长度为1~1024个字符。

      • 使用UTF-8编码。

      • 必须以正斜线(/)开头和结尾,导出根目录为/

    导出VPC网络

    选择与ECS实例相同的VPC。该VPC内的ECS可通过协议服务访问CPFS文件系统。

    导出交换机

    选择与ECS实例相同的交换机,协议集群通过该vSwitch将协议服务导出到指定的导出VPC。

    说明

    单个协议服务最多消耗vSwitch上32个IP地址,请确保该vSwitch IP资源充足。

    权限组

    仅支持VPC默认权限组。

  5. 协议服务页面,单击目标协议服务右侧操作列下的导出目录,然后在弹出的对话框中复制对应的挂载地址并保存,挂载地址包含挂载点域名以及挂载目录,如果指定导出的是 / 目录,则挂载地址显示为cpfs-****.regionID.cpfs.aliyuncs.com:/share

步骤二:在ACK集群中使用CPFS2.0静态卷

  1. 执行以下命令,配置ConfigMap信息,开启挂载CPFS2.0时使用的NFS协议。

    cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: csi-plugin
      namespace: kube-system
    data:
      cpfs-nas-enable: "true"   #使用CPFS2.0挂载时,使用NFS协议。
    EOF
  2. 执行以下命令,重启csi-plugin,安装相关依赖。

    此操作不影响业务正常运行。

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

    预期输出:

    daemonset.apps/csi-plugin restarted
  3. 执行以下命令,创建PV和PVC。

    cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: cpfs-pv
      labels:
        alicloud-pvname: cpfs-pv
    spec:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 20Gi
      csi:
        driver: nasplugin.csi.alibabacloud.com
        volumeAttributes:
          mountProtocol: cpfs-nfs             # 使用NFS协议进行挂载。
          path: "/share"                      # 挂载地址中的目录。
          volumeAs: subpath
          server: "cpfs-****.regionID.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:
      - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      selector:
        matchLabels:
          alicloud-pvname: cpfs-pv
    EOF
  4. 执行以下命令,创建StatefulSet工作负载并使用CPFS2.0静态卷。

    cat << EOF | kubectl apply -f -
    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: nginx
            volumeMounts:
            - name: cpfs-pvc
              mountPath: /data
          volumes:
          - name: cpfs-pvc
            persistentVolumeClaim:
              claimName: cpfs-pvc
    EOF
  5. 执行以下命令,验证CPFS2.0静态卷是否挂载成功。

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

    预期输出:

    cpfs-****.regionID.cpfs.aliyuncs.com:/share/nas-885ae9e7-9b0e-4f8f-a9ee-6a1bcf1ddb57 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)

    有预期输出结果,说明CPFS2.0静态卷挂载成功。