Fluid-数据缓存亲和性调度原理解析

news2024/10/6 2:21:36

前言

在Fluid中,Dataset资源对象中所定义的远程文件是可被调度的,这意味着你能够像管理你的Pod一样管理远程文件缓存在Kubernetes集群上的存放位置。另外,Fluid同样支持对于应用的数据缓存亲和性调度,这种调度方式将应用(e.g. 数据分析任务、机器学习任务等)与所需要的数据缓存放置在一起,以尽可能地减少额外的开销。

本文对Fluid功能-数据缓存亲和性调度能力进行原理解析。其中涉及到Fluid架构和k8s csi driver相关知识。建议先了解相关概念。

为了便于理解,本文使用JuiceFS作为后端runtime引擎。

原理概述

实际上,fluid是利用node label和k8s原生提供的pod亲和性、反亲和性实现的。

在之前文章中,我们知道runtime 缓存worker pod所在的node上,都会被打上label:s-runtime.namespace-runtime.name,表示该node具有数据缓存能力。

对于业务pod使用webhook拦截,在pod的spec配置中,加上对具有该label的node的亲和性。最后借助k8s调度器将pod尽可能调度到具有缓存数据的Node上。

工作流程梳理

详细流程解析

一、创建业务pod,并使用dataset pvc

apiVersion: v1
kind: Pod
metadata:
  name: demo-app
spec:
  containers:
    - name: demo
      image: nginx
      volumeMounts:
        - mountPath: /data
          name: demo
  volumes:
    - name: demo
      persistentVolumeClaim:
        claimName: jfsdemo

二、fluid webhook拦截Pod

1)检测pod是否符合要求

排除fluid自身组件的pod:

func (a *CreateUpdatePodForSchedulingHandler) Handle(ctx context.Context, req admission.Request) admission.Response {
 ......
 if pod.Labels["app"] == "alluxio" || pod.Labels["app"] == "jindofs" || pod.Labels["app"] == "goosefs" || pod.Labels["app"] == "juicefs" {
  setupLog.Info("skip mutating the pod because it's fluid Pods", "Pod", pod.Name, "Namespace", pod.Namespace)
  return admission.Allowed("skip mutating the pod because it's fluid Pods")
  ......
 }

2)检测是否具有dataset的PVC

对于不具有的,需要添加Node 反亲和性,最好不要调度到有缓存的节点上。

func getPreferredSchedulingTermForPodWithoutCache() corev1.PreferredSchedulingTerm {
 return corev1.PreferredSchedulingTerm{
  Weight: 100,
  Preference: corev1.NodeSelectorTerm{
   MatchExpressions: []corev1.NodeSelectorRequirement{
    {
     Key:      common.GetDatasetNumLabelName(),
     Operator: corev1.NodeSelectorOpDoesNotExist,
    },
   },
  },
 }
}

3)添加Node亲和性:必须要在fuse pod所在的Node上

因为只有fuse pod,才能与底层的runtime进行通信,因此业务pod必须要与fuse pod在同一节点:

requiredSchedulingTerm = corev1.NodeSelectorTerm{
   MatchExpressions: []corev1.NodeSelectorRequirement{
    {
     Key:      runtimeInfo.GetCommonLabelName(),
     Operator: corev1.NodeSelectorOpIn,
     Values:   []string{"true"},
    },
   },

4)添加Node亲和性:最好要在worker所在Node

这里就是缓存亲和性调度了。最好与worker pod在同一节点。

  preferredSchedulingTerm = &corev1.PreferredSchedulingTerm{
   Weight: 100,
   Preference: corev1.NodeSelectorTerm{
    MatchExpressions: []corev1.NodeSelectorRequirement{
     {
      Key:      runtimeInfo.GetCommonLabelName(),
      Operator: corev1.NodeSelectorOpIn,
      Values:   []string{"true"},
     },
    },
   },
  }
 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/333709.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iOS 导航条isTranslucent几个注意点(iOS11及iOS13的变化)

文章主要针对11及13之后的导航变化进行总结,主要是设置透明度时对转场,包括标题,背景透明,图片,颜色等设置的影响。 每一个iOS版本的发布苹果最不稳写的可能就数这个导航条了吧,改了又改。 因此isTranslu…

Prometheus监控Java-JMX

一、什么是 JMX Exporter ? JMX Exporter 利用 Java 的 JMX 机制来读取 JVM 运行时的一些监控数据,然后将其转换为 Prometheus 所认知的 metrics 格式,以便让 Prometheus 对其进行监控采集。 那么,JMX 又是什么呢?它的全称是&a…

【Redis场景4】单机环境下秒杀问题

单机环境下的秒杀问题 秒杀下单功能及并发测试 完整代码GitHub:https://github.com/xbhog/hm-dianping/tree/20230130-xbhog-redisSpike 秒杀条件分析: 秒杀是否开始或结束,如果尚未开始或已经结束则无法下单库存是否充足,不足…

【体验测评】ChatGDP

前言 今天在去打针之前测试了下比较火的ChatGPT,总得来说还是比较好用的,尤其是跟浏览器搭配可以当摘要看,然后再进行细化查阅。 ​针对可以写论文跟交作业,我觉得查重率这一关比较麻烦,不现实,尤其是参与人增多的时…

php宝塔搭建部署实战易优养殖基地网站源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套php开发的易优养殖基地网站源码,感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码,宝…

选择游戏开发工具的原则

本文首发于微信公众号: 小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料,每天学点儿游戏开发知识。嗨!大家好,我是小蚂蚁。昨天为了给我的精致1010游戏方便的增加更多关卡,我用 Unity 做了个关卡编辑器&a…

pycharm的terminal与Project interpreter 配置环境不一致的问题

考虑自己的项目名中是否出现了中文,我是因为这个原因导致Terminal 前面出现了PS,用第2条解决切换终端环境后还是安装包不一致。终端出现PS,考虑在settings中搜索找到Terminal,修改其Shell path为cmd.exe,关闭重新打开T…

SpringCloud保姆级搭建教程三---Feign

1、第一点就是要明白服务与服务之间在怎么样的情况下,如何使用feign答:服务A要调用服务B的某个controller方法的时候,服务A就需要使用feign ,和服务B是没关系的所以,首先,在服务A中添加feign的依赖,我这里就…

nodejs基于vue高校图书馆座位预约系统

目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 2.1 使用工具简介 4 2.2 环境配置 4 2.3 B/S结构简介 4 2.4 MySQL数据库 5 2.5 框架介绍 5 3 系统分析 63.1系统可行性分析 6 3.1.1经济可行性 6 3.1.2技术可行…

软件测试电商项目实战(写进简历没问题)

前言 说实话,在找项目的过程中,我下载过(甚至付费下载过)N多个项目、联系过很多项目的作者,但是绝大部分项目,在我看来,并不适合你拿来练习,它们或多或少都存在着“问题”&#xff…

【i2c协议介绍】

文章目录协议简单介绍五种速度模式master/slave和transmitter/receiver关系第一种情况:master作为transmitter,slave作为receiver第二种情况:当master作为receiver,slave作为transmitteri2c基本信号start产生stop信号数据传输有效…

OpenAI ChatGPT 注册使用全攻略,以及常见问题解决办法

前言 这个时代,利用好 AI 完成自己的工作,放大自己的效率,已是一种必不可少的技能。 文章目录前言一、注册和登录二、常见问题和解决办法三、参考链接一、注册和登录 1)注册网址:https://chat.openai.com/auth/login …

8.数据库编程

梳理 名词解释 简答题 1.游标的使用步骤 ① 声明游标。 用DECLARE语句为一条SELECT语句定义游标 EXEC SQL DECLARE<游标名> CURSOR FOR <SELECT语句>;使用T-SQL语句生成一个结果集&#xff0c;并且定义游标的特征&#xff0c;如游标中的记录是否可以修改。 定…

《趣学算法》读书笔记

内容摘要 主要介绍我对本书的一些自我感觉比较亮点地方的总结。 第一章 算法 算法有两条线索&#xff0c;数据结构、算法策略。 算法特性 时间复杂度 常见算法时间复杂度 时间复杂度的渐进上界 渐进精确界 用渐进上界和渐进下界逼近&#xff0c; 空间复杂度 递归 递归包…

浅谈监控易运维系统在金融信创国产化中的使用

自2019年&#xff0c;国家明确信创产业将成为拉动经济发展的重要途径和崭新动能以来&#xff0c;全行业进入一个高速发展新阶段。此前倡导的“28”安全可控体系&#xff0c;其中在8大基础行业中,金融行业信创产品推广成为重中之重。金融行业信创&#xff0c;是为解决行业本质安…

ENVE5.3安装与汉化(一次性安装成功附安装包)

目录 1.安装包下载 2. 软件安装 3. ENVI5安装目录说明 1.安装包下载 链接&#xff1a;https://pan.baidu.com/s/1dp2ucQa3DMHLYpw239-_vA?pwd6944 提取码&#xff1a;6944 2. 软件安装 安装前注意事项&#xff1a; 安装全程断网&#xff1b;下载、解压和安装都应该在英文…

【电商】订单信息与状态流转

前言订单产生后&#xff0c;接下来会继续进行一系列流转&#xff0c;最后送到用户手里。在每个环节都有对应的操作&#xff0c;数据信息也要求其完成性&#xff0c;可以根据订单的每个状态变化&#xff0c;来计算分析&#xff0c;进而进行优化供应链路径&#xff0c;以提升订单…

三勾商城JAVA多商户配置发布

admin、shop、supplier端测试&#xff1a; 账号/密码均为admin/123456 后端vue目录 1、jjj_shop_multi_admin> 对应saas端&#xff0c;后台访问地址/admin。2、jjj_shop_multi_shop> 对应商城管理端&#xff0c;后台访问地址/shop。2、jjj_shop_multi_supplier> 对应供…

Linux---Kernal与Shell讲解

目录 Shell简介 什么是Shell Shell分类 内核Kernal Shell简介 什么是Shell 我们首先需要知道一台完整的计算机是由硬件组成的&#xff0c;而人不可以直接与硬件交互&#xff0c;为了完成交互&#xff0c;进行了以下的操作 将硬件设备交由内核管理&#xff0c;给硬件套个内…

【golang】1797. 设计一个验证系统

你需要设计一个包含验证码的验证系统。每一次验证中&#xff0c;用户会收到一个新的验证码&#xff0c;这个验证码在 currentTime 时刻之后 timeToLive 秒过期。如果验证码被更新了&#xff0c;那么它会在 currentTime &#xff08;可能与之前的 currentTime 不同&#xff09;时…