赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 文件存储NAS
  4. 操作指南
  5. 挂载访问
  6. 容器挂载文件系统
  7. 阿里云容器服务挂载NAS
  8. 容器服务Kubernetes版(ACK)挂载NAS
  9. 使用CSI存储插件挂载NAS
  10. 开启CNFS NAS计算端分布式缓存

开启CNFS NAS计算端分布式缓存

  • 使用CSI存储插件挂载NAS
  • 发布于 2025-04-22
  • 0 次阅读
文档编辑
文档编辑

CNFS文件存储计算端分布式缓存可提供多链接访问、元数据缓存、分布式数据缓存等加速能力,并提供端侧性能监控、QoS能力。本文介绍如何在ACK集群中开启CNFS NAS计算端分布式缓存,并通过分布式缓存功能加速读取数据。

前提条件

  • 分布式缓存支持的操作系统为Alibaba Cloud Linux 2,内核版本为v4.19.91-23至v4.19.91-26。

  • 已创建Kubernetes集群,Kubernetes版本为v1.20及以上,且存储插件选择为CSI。具体操作,请参见创建Kubernetes托管版集群。

  • CSI-Plugin和CSI-Provisioner组件版本不低于v1.22.11-abbb810e-aliyun。关于升级CSI-Plugin和CSI-Provisioner组件的操作,请参见安装与升级CSI组件。

  • storage-operator组件版本不低于v1.22.86-041b094-aliyun。关于升级storage-operator组件的操作,请参见管理组件。

  • 已通过kubectl工具连接Kubernetes集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。

分布式缓存关键性能指标

指标

测试场景①

未开启分布式缓存

开启分布式缓存

元数据性能

100万文件目录遍历耗时

18min

小于60s

创建写入4 KB文件耗时

3000μs

小于200μs

重复读取4 KB文件耗时

400μs

小于100μs

吞吐性能

单节点读写吞吐性能②

200~500 MB/s

大于800 MB/s

综合场景性能

5000张150 KB图片解压缩耗时

52s

约15s

构建Redis项目耗时

27s

约21s

重要

本文以上表格提供的数据仅为理论值(参考值),实际数据以您的操作环境为准。

  • 注解①:测试数据的ECS机型为ecs.hfg6.4xlarge,测试环境的差异可能导致性能数据有一定偏差。

  • 注解②:ECS网络带宽和NAS文件系统规格会影响单节点读写吞吐性能。

步骤一:使用分布式缓存挂载NAS文件系统

  1. 执行以下命令,在集群中创建并部署csi-plugin的ConfigMap,安装加速插件。

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: csi-plugin
      namespace: kube-system
    data:
      cnfs-client-properties: |
        nas-efc=true
      nas-efc-cache: |
        enable=true
        container-number=3
        volume-type=memory
        volume-size=15Gi
      node-selector: |
        cache=true
    EOF

    参数

    说明

    cnfs-client-properties

    分布式缓存的缓存开关。当配置nas-efc=true时,表示开启分布式缓存。

    nfs-efc-cache.

    container-number

    当开启分布式缓存时需要配置。

    缓存的DaemonSet的容器数量,当缓存出现性能瓶颈时,可以增加容器数量。

    nfs-efc-cache.

    volume-type

    当开启分布式缓存时需要配置。

    缓存容器EmptyDir使用的介质。

    • disk:磁盘。

    • memory:内存。

    nfs-efc-cache.

    volume-size

    当开启分布式缓存时需要配置。表示缓存数据卷Volume的总大小,单位:GiB。

    node-selector

    缓存的DaemonSet通过Label进行调度。如果不配置,则所有节点都会部署缓存。

    重要
    • 使用磁盘和内存时,会使用节点的数据盘和内存资源,请确保不影响业务运行。

    • 本示例部署了分布式缓存的DaemonSet,缓存中有3个容器,在缓存Pod容器内每个容器挂载5 GiB的tmpfs卷,并且只调度到带有cache=true标签的节点上。

    ConfigMap配置完成后,会根据已配置的ConfigMap自动部署缓存的DaemonSet以及Service。

  2. 执行以下命令,重启CSI-Plugin组件,安装相关依赖。

    kubectl get pod -nkube-system -owide | grep csi-plugin | awk '{print $1}' | xargs kubectl -nkube-system delete pod
  3. 执行以下命令,为CNFS的文件存储开启分布式缓存。

    创建一个CNFS托管NAS文件系统,StatefulSet通过使用动态存储卷的方式挂载分布式缓存,使用busybox镜像,Pod启动时会通过dd命令将1 G大小的文件写入/data下面,1 G文件后续用于测试缓存是否生效。

    展开查看开启分布式缓存使用的YAML文件

    cat << EOF | kubectl apply -f -
    apiVersion: storage.alibabacloud.com/v1beta1
    kind: ContainerNetworkFileSystem
    metadata:
      name: cnfs-nas-filesystem
    spec:
      description: "cnfs"
      type: nas
      reclaimPolicy: Retain
      parameters:
        filesystemType: standard
        storageType: Capacity
        protocolType: NFS
        encryptType: None
        enableTrashCan: "true"
        trashCanReservedDays: "5"
        useClient: "EFCClient" # 通过EFC客户端使用分布式缓存进行挂载。
    ---
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alibabacloud-cnfs-nas-sc
    mountOptions:
      - g_tier_EnableClusterCache=true              # 挂载时,分布式缓存使用缓存配置。
      - g_tier_EnableClusterCachePrefetch=true      # 挂载时,分布式缓存开启预读功能。
    parameters:
      volumeAs: subpath
      containerNetworkFileSystem: cnfs-nas-filesystem
      path: "/"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain
    allowVolumeExpansion: true
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: cnfs-nas-sts
      labels:
        app: busybox
    spec:
      serviceName: "busybox"
      replicas: 1
      selector:
        matchLabels:
          app: busybox
      template:
        metadata:
          labels:
            app: busybox
        spec:
          containers:
          - name: busybox
            image: busybox
            command: ["/bin/sh"]
            args: ["-c", "dd if=/dev/zero of=/data/1G.tmpfile bs=1G count=1;sleep 3600;"]
            volumeMounts:
            - mountPath: "/data"
              name: www
      volumeClaimTemplates:
      - metadata:
          name: www
        spec:
          accessModes: [ "ReadWriteOnce" ]
          storageClassName: "alibabacloud-cnfs-nas-sc"
          resources:
            requests:
              storage: 50Gi
    EOF
  4. 执行以下命令,确认分布式缓存是否挂载成功。

    kubectl exec cnfs-nas-sts-0   -- mount | grep /data

    预期输出:

    xxx.cn-xxx.nas.aliyuncs.com:/nas-6b9d1397-6542-4410-816b-4dfd0633****:2fMaQdxU on /data type alifuse.aliyun-alinas-eac (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)

    输出显示有挂载点,说明分布式缓存已挂载成功。

  5. 执行以下命令,确认分布式缓存的DaemonSet是否启动。

    kubectl get ds/cnfs-cache-ds -n kube-system -owide

    预期输出:

    NAME             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   CONTAINERS              IMAGES                                                         SELECTOR
    cnfs-cache-ds   3         3         3       3            3           <none>          19d   alinas-dadi-container   registry-vpc.cn-shenzhen.aliyuncs.com/acs/nas-cache:20220420   app=cnfs-cache-ds

    本示例的集群有3个节点,DaemonSet的3个Pod均处于可用状态,说明分布式缓存的DaemonSet已经启动完成。

  6. 执行以下命令,确认分布式缓存的Service是否实现服务发现。

    kubectl get ep cnfs-cache-ds-service  -n kube-system -owide

    预期输出:

    NAME                     ENDPOINTS                                          AGE
    cnfs-cache-ds-service   10.19.1.130:6500,10.19.1.40:6500,10.19.1.66:6500   19d

    Service已经发现后端缓存Pod对应的EndPoints为10.19.1.130、10.19.1.40、10.19.1.66,端口为6500。

步骤二:测试缓存是否生效

  1. 执行以下命令,将写入到/data中的1 G的tmpfile文件复制到/下,查看耗时情况。

    kubectl exec cnfs-nas-sts-0 -- time cp /data/1G.tmpfile /

    预期输出:

    real    0m 5.66s
    user    0m 0.00s
    sys     0m 0.75s

    可以看到:未开启分布式缓存时,拷贝时间不变,保持约5s左右。

  2. 重复执行以下命令,查看耗时。

    kubectl exec cnfs-nas-sts-0 -- time cp /data/1G.tmpfile /

    预期输出:

    real    0m 0.79s
    user    0m 0.00s
    sys     0m 0.58s

    可以看到:对多次访问的文件,拷贝读加速提升了6~7倍。

相关文章

NAS存储卷 2025-04-22 12:09

NAS文件系统适用于大数据分析、共享数据、Web应用以及保存日志等场景。您可以将NAS文件系统作为存储卷挂载到容器中以满足数据的持久化存储和共享存储的需求。通过阿里云CSI组件,您可以通过CNFS托管NAS或者直接在容器中使用NAS等方式挂载使用。 如何选择NAS

使用CNFS管理NAS共享存储卷(推荐) 2025-04-22 12:09

容器服务 Kubernetes 版支持以NAS共享存储卷的方式挂载和使用CNFS。通过CNFS管理NAS共享存储卷,您可以在多个应用或Pod之间挂载同一个NAS文件系统的相同目录,以解决Pod之间共享数据的问题。本文以StatefulSet类型应用为例介绍如何使用CNFS管理NAS共享存储卷。

使用CNFS管理NAS隔离存储卷(推荐) 2025-04-22 12:09

容器服务 Kubernetes 版支持以NAS隔离存储卷的方式挂载和使用CNFS。在多租户环境或其他需要数据隔离的场景中,您可以通过CNFS管理NAS隔离存储卷,在多个应用或Pod之间挂载同一个NAS文件系统的不同目录,使得每个目录均对应一个存储卷,存储卷之间是相互独立的、相互隔离的。本文以Stat

使用CNFS自动扩容NAS存储卷 2025-04-22 12:09

通过定义CNFS中托管的NAS存储卷的自动扩容策略,当NAS存储卷的使用率高于某个阈值时,触发NAS存储卷的自动扩容。本文介绍如何使用CNFS实现NAS存储卷的自动扩容。 前提条件

通过CNFS管理NAS文件系统(推荐) 2025-04-22 12:09

容器网络文件系统CNFS(Container Network File System)将阿里云的文件存储抽象为一个K8s对象(CRD)进行独立管理,包括创建、删除、描述、挂载、监控及扩容等运维操作,为了提升NAS文件系统的性能,您可以通过CNFS管理NAS文件系统,以提升NAS文件系统的性能和QoS

开启CNFS NAS计算端分布式缓存 2025-04-22 12:09

CNFS文件存储计算端分布式缓存可提供多链接访问、元数据缓存、分布式数据缓存等加速能力,并提供端侧性能监控、QoS能力。本文介绍如何在ACK集群中开启CNFS NAS计算端分布式缓存,并通过分布式缓存功能加速读取数据。 前提条件

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号