1 序言
本文分四部分
第一部分:Alluxio在Kubernetes上落地的难点 & Fluid的诞生背景
第二部分:Fluid核心功能&Fluid-CRD
第三部分:在华为云CCE中部署Fluid+Alluxio,测试Fluid缓存对读写速率的提升
第四部分:Fluid进阶用法
2 Alluxio在Kubernetes上落地的难点
2.1 Alluxio自身的局限性
k8s是计算和存储分离的架构,与 "移动计算而不是数据”的大数据处理和AI训练理念相违背。因此云原生环境里需要一款组件来补充数据驱动应用(大数据、机器学习)拥抱云原生以后的数据本地性的缺失。
但Alluxio自身的局限性使得其无法(很难)直接在Kubernetes平台中落地。
2.2 Fluid 愿景和使用价值
Fluid的项目旨在 利用CRD-Operator将 不同的开源分布式缓存系统(Alluxio、JuiceFS、Vineyard、CubeFS等)的缓存变为Kubernetes资源对象,并实现自动化管理、扩展、修复。
用户可以通过Fluid-CRD声明式的 把所需数据缓存到节点上,用户也可以进行细粒度的设置,例如:将Pod优先调度到缓存了所需数据的节点、声明数据缓存的生效时长。
目前Fluid结合Alluxio的用法最为主流。
3 Fluid核心功能
这两者还可以组合形成协同编排场景,即协同考虑数据集和应用需求进行节点资源调度。
4 Fluid-CRD
4.1 Dataset
Dataset CRD 用来定义你所需要的数据在哪里获取。Fluid将该CRD对象中定义的mountPoint属性挂载到Alluxio之上,因此该属性可以是任何合法的能够被Alluxio识别的UFS地址。
Dataset-CRD示例
DataSet不仅整合了来自多个存储源的数据,还描述了数据的可移植性和特性,并提供了可观测性,如DataSet的总数据量、当前缓存空间大小和缓存命中率。用户可以根据此信息评估缓存系统是否需要放大或缩小。
4.2 Runtime
Runtime用来定义提供分布式缓存的系统,目前 Fluid 支持的 Runtime 类型有 JuiceFS、Alluxio、JindoFS,GooseFS,这些缓存系统使用Kubernetes集群中节点上的存储资源(如:内存和磁盘)来作为远程存储系统的计算侧缓存。本文使用 AlluxioRuntime 进行演示说明。
Runtime在架构中的位置
4.3 DataLoad
DataLoad用来控制数据预加载行为。为了确保应用程序在访问数据时的性能,可以在应用程序启动前通过数据预加载将远程存储系统中的数据拉到靠近计算节点的分布式缓存引擎。然后,使用数据的应用程序即使在第一时间也可以享受分布式缓存带来的加速效果。
在Alluxio中,数据的加载和数据的使用可以并行进行,并不冲突。当我们同时 kubectl apply DataLoad 和 数据驱动Job时,作用应用在初期可能会因部分文件未缓存而读取速率较慢,等加载完毕后则完全使用缓存。
5 在华为云CCE中部署Fluid+Alluxio
执行如下命令:
因为华为云CCE与原生Kubernetes有些不同,需要对DaemonSet进行如下修改:
完成部署
6 测试Fluid缓存对读写速率的提升
6.1 创建DataSet和AlluxioRuntime
提交上面Yaml之后可以看到Alluxio-Master 和 Alluxio-Worker 会被自动创建。
并且可以看到只生效Dataset和AlluxioRuntime不会自动预加载数据。
只生效Dataset和AlluxioRuntime 不会自动预加载数据
查看Fluid自动创建的Pod。demo1-master里面有Alluxio-Master和Alluxio-Job-Master两个容器,demo1-work里面有Alluxio-Worker和Alluxio-Job-worker两个容器,这与上一篇文章中介绍的Alluxio架构是完全一样的。
demo1-master里的worker-master容器挂载了 emptydir /journal 存储Journal-Log。
demo1-worker里面的两个container都挂载了宿主机上 /dev/shm/flj/demo1 目录,这是缓存数据块保存的位置【在AlluxioRuntime-CRD中定义的路径】。
6.3 查看PVC PV
Fluid自动给demo1 Alluxio文件系统创建对应的PVC PV,待Pod挂载使用
6.4 创建Deployment使用demo1-PV
应用下面的yaml
会自动生成demo1-fuse-pod,并且和我们的deployment-pod调度在1个节点上,这是通过label亲和性实现的。
Fluid会自动创建alluxio-fuse-pod
6.5 测试Fluid缓存对读速率的提升
缓存百分比的变化和读效率的变化
通过上图的测试,可以直观感受到缓存对读速度的提升,由74秒 —> 10秒。
7 进阶用法
7.1 dataset数据缓存亲和性调度
在Fluid中,Dataset资源对象中所定义的远程文件是可被调度的,这意味着你能够像管理你的Pod一样管理远程文件缓存在Kubernetes集群上的存放位置。
控制Alluxio-Worker-Pod与应用Pod在相同节点,可以最大化的提升读写效率(本地读写)。
7.2 数据预加载(预缓存)
为了确保应用程序在访问数据时的性能,可以在应用程序启动前通过数据预加载将远程存储系统中的数据拉到靠近计算节点的分布式缓存引擎。然后,使用数据的应用程序即使在第一时间也可以享受分布式缓存带来的加速效果。
为了获得上述巨大的好处,我们提供DataLoad CRD。这是一个CRD,它为您提供了一种清晰简单的方法来控制数据预加载行为。
缓存比例100%
有时不需要缓存UFS中的全部数据,可以通过target字段指定缓存子目录。
7.3 Fuse-Pod清除策略
默认情况下Fuse组件的生命周期是与AlluxioRuntime-CRD生命周期一致。
使用时可能需要Fuse组件生命周期与数据驱动APP-Pod一致(即:当使用Fuse的Pod删除,FUSE Pod将被清理)。
到此这篇webflux详解(webflux原理)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/72437.html