利用 Kubernetes 降本增效?EasyMR 基于 Kubernetes 部署的探索实践

news2024/11/27 10:20:59

Kubernetes 是用于编排容器化应用程序的云原生系统。最初由 Google 创建,如今由 Cloud Native Computing Foundation(CNCF)维护更新。

Kubernetes 是市面上最受欢迎的集群管理解决方案之一。它自动化容器化应用程序的部署、扩展和管理,允许管理和协调跨多个主机的容器集群,提供容错性和可伸缩性等服务。

简单点说,如果你的应用程序可以容器化(例如,借助 Docker),那么绝对应该使用 Kubernetes 来运行和管理这些应用程序。在 k8s 的支持下,可以大大提高本地或云托管基础架构的利用率,所有计算资源都可以在多个应用程序之间动态而合理地共享。

Kubernetes 负责在整个应用生命周期中调度并自动执行与容器相关的任务,包括部署、运维、服务发现、存储配置、负载均衡、自动扩展、自我治愈实现高可用性等等。

如今,Kubernetes 和更广泛的容器生态系统日益成熟,成为通用的计算平台和生态系统,可与作为现代云基础架构和应用基本构建块的虚拟机 (VM) 一争高下,甚至大有后来居上之势。但是 Kubernetes 本身是一个比较复杂的平台,一个运维或者开发人员如果要说快速精通 Kubernetes 是不可能的,所以这就提高了传统运维开发人员使用其的门槛。

EasyMR 作为一款提供一站式可视化组件安装部署与可观测运维管理能力的大数据计算引擎产品,我们自然也基于 Kubernetes 部署进行了实践探索。

EasyMR 基于 Kubernetes 部署的探索

之前我们讨论的 EasyMR 都是基于主机集群的模式下,需要部署服务就需要先接入主机,然后部署对应产品包服务从而完成应用集群的快速搭建。但是随着云原生相关技术栈(容器、微服务、服务网格等)和 Kubernetes 近些年的流行,传统模式也急需更新换代以适应大趋势的发展。所以我们决定在 EasyMR 原有的基于产品包部署的产品模式基础上,全新打造一个容器化部署的版本。

前面我们说过,由于 Kubernetes 自身的复杂性,一般开发运维人员使用起来是比较费力的,比如控制器(Deployment/Daemonset/Statefulset/Job/CronJob),存储(PVC/PV/StorageClass)等等,所以我们还是将复杂性交给平台去解决,暴露给用户的交互则是通俗易懂的。

在主机集群模式下,部署服务的步骤为下载包->解压缩安装包->配置下发->服务启动,EasyMR 自身的 easyagent 可以做到服务的全生命周期管理。基于 Kubernetes 的架构下,我们再去开发对应版本的 agent 也是可以做到的,但是经过对市面上一些开源服务的调研,我们发现 kubevela 正好可以弥补我们这部分能力。

kubevela 使用 OAM(Open Application Model),本质是根据软件设计的关注点分离原则对负责的 DevOps 流程的高度抽象和封装,一个以应用为中心的 Kubernetes API 分层,这种模型旨在定义云原生应用的标准。

作为 EasyMR 平台,基于 kubevela,我们只需要提供多种可扩展的组件类型,便可以对上层用户屏蔽 Kubernetes 的底层复杂实现逻辑。使用 EasyMR 部署 Kubernetes 服务的用户只需要关注服务类型以及修改应用配置,便可以实现服务的部署,关于 kubevela/OAM 更详细的部分我们会在后面的文章中介绍,本文便不多赘述。

对 EasyMR 而言,部署服务的维度始终是产品包,这点我们并没有去做更改,产品包的核心就是 schema 文件。因此,我们扩展了一些字段以适应 Kubernetes 部署的要求。

file

上述表格的 workload 表示服务类型,比如说平台内置主从 MySQL 的 workload,那么只需要在产品包中声明服务类型是 MySQL 以及镜像的名称,当执行部署的时候,平台会自动创建 MySQL 的有状态应用 statefulset、配置文件 configmap、服务 service、存储 pv/pvc 等等 Kubernetes 底层资源。大大节省了人力成本,提升了交付效率,后续如果需要扩展组件类型也可以在平台迭代中逐步完善。

EasyMR 云化部署架构如下图所示:

file

架构图中 vela-core 是核心部署组件,config-reloader 会动态监测 Pod 使用的 configmap 的更新状态从而重启应用 Pod。

EasyMR 基于 Kubernetes 的未来探索

EasyMR 作为基于云原生技术和 Hadoop、Hive、Spark、Flink、Hbase、Presto 等开源大数据组件构建的弹性计算引擎,做到能部署大数据组件只是里程碑中的第一步,未来我们的目标会投向更长远的地方——存算分离:

● 使用 Kubernetes 替代 Yarn 作为调度组件

以 Flink 和 Spark 为代表的分布式流批计算框架的下层资源管理平台逐渐从 Hadoop 生态的 YARN 转向 Kubernetes 生态的 Kubernetes原生 scheduler 以及周边资源调度器,比如 Volcano 和 Yunikorn 等。

● 使用对象存储+缓存加速

随着云计算技术的成熟,企业存储又多了一个选项——对象存储。最早从 AWS 开始,后来所有的云厂商都在向这个方向发展,用对象存储去替换 HDFS。

但是对象存储用于支持 Hadoop 这样复杂的系统,会出现以下问题:文件 Listing 性能较弱;对象存储没有原子 Rename 从而影响任务的稳定性;对象存储数据最终一致性的机制会降低计算过程中的稳定性和正确性。所以我们还需要 Alluxio/Juicefs 这样的缓存加速层来提升我们使用对象存储的性能。

《数栈产品白皮书》:https://www.dtstack.com/resources/1004?src=szsm

《数据治理行业实践白皮书》下载地址:https://www.dtstack.com/resources/1001?src=szsm

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szcsdn

同时,欢迎对大数据开源项目有兴趣的同学加入我们,一起交流最新开源技术信息,号码:30537511,项目地址:https://github.com/DTStack

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

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

相关文章

企业图纸混乱怎么办?

企业图纸混乱怎么办? 随着企业办公自动化的迅速发展,各种技术资料和电子文件日益庞大,图文档管理工作出现新的变化和考验。 在传统的管理模式下,企业的图纸文档分散在各个部门的个人电脑上,致使企业在进行图文档管理的…

统信UOS_麒麟KYLINOS禁用USB存储

原文链接:统信UOS/麒麟KYLINOS禁用USB存储 hello,大家好啊,今天给大家带来一篇在统信UOS/麒麟KYLINOS禁用USB存储的文章,文章通过三种方式:1、在文件管理器中通过图形化方式移除USB;2、通过禁用USB存储模块…

龙迅LT8912B 单通道MIPIDSI桥接LVDS+HDMI(1.4)同显点屏LVDS,加环出一路HDMI

龙迅LT8912B 描述: Lontium LT8912B MIPIDSI到LVDS和HDMI桥采用单通道MIPID-PHY接收器前端配置,每个通道有4个数据通道,每个数据通道运行1.5Gbps,最大输入带宽可达6Gbps。对于屏幕应用,该桥解码MIPIDSI 18bpp RGB666和24bpp RGB…

500mA 线性锂电充电芯片 DP4054/DP4054H完全兼容替代TP4054

锂电池是一种新型的可充电电池,其具有体积小、重量轻、容量大耐用性强等特点,因此被广泛应用于手机、笔记本电脑、移动电源等电了设备上。 充电原理是指电池在充电过程中,用电流将锂离子从外部电源输入电池,使其形成 一个电荷差&…

这几个站点,有点优秀

中国大学慕课网 网址:https://www.icourse163.org/ 大学生们这个白嫖网站咱一定不能错过,与全国801所高效合作,里面都是不同专业的精品课程,关键是它们都是免费的!报名学习,就等着知识装满脑袋吧&#xff0…

IO接口基础知识

一、基本概念 IO接口:CPU与IO设备之间的桥梁 1.IO接口分类 专业接口:连接专用设备,常用附加卡的形式来实现通用接口:基本的输入输出接口,如并行口,串行口(外设和接口一侧) 2.IO接口组成 为了实现下图功…

泛型编程 -- 模板详解

一、模板 在没有模板之前,如果我们写一个swap()两数交换函数,因为我们要支持 int 与int 交换 、double 与 double 交换等等情况,所以要实现swap()函数的多个重载,显得很繁琐,于是就引入了模板。 模板就是在需要模板的地…

CTF-栈溢出-基本ROP-【ret2shellcode】

文章目录 ret2shellcodeHTBCyberSanta 2021 sleigh思路exp ret2shellcode 控制程序去执行我们自己填充的代码。 条件: 我们填充的代码的位置具有可执行权限 HTBCyberSanta 2021 sleigh 检查保护 Has RWX segments提示有可读可写可执行的段 main函数 banner函数…

期望、方差

一、期望和方差的定义 随机变量(Random Variable) X 是一个映射,把随机试验的结果与实数建立起了一一对应的关系。而期望与方差是随机变量的两个重要的数字特征。 1. 期望(Expectation, or expected value) 期望是度量一个随机变量取值的集中位置或平均水平的最基…

Java简介、基本语法

一、Java简介: Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。 Java主要的特性: 1、Java语言是简单的的: Java语言的语法与C、C语言接近。Java丢弃了C中的一些特性,如操…

系列三、GC垃圾回收【总体概览】

一、GC垃圾回收【总体概览】 JVM进行GC时,并非每次都对上面的三个内存区域(新生区、养老区、元空间/永久代)一起回收,大部分回收的是新生区里边的垃圾,因此GC按照回收的区域又分为了两种类型,一种是发生在新…

redis高级案列case

案列一 双写一致性 案例二 双锁策略 package com.redis.redis01.service;import com.redis.redis01.bean.RedisBs; import com.redis.redis01.mapper.RedisBsMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; imp…

HT8313 D/AB切换 音频功率放大器

HT8313具有AB类和D类的自Y切换功能,在受到D类功放EMI干扰困扰时,可随时切换至AB类音频功放模式(此时电荷泵升压功能关闭)。 HT8313内部固定28dB增益,内置的关断功能使待机电流Z小化,还集成了输出端过流保护…

翻转链表(图解)

LCR 024. 反转链表 - 力扣(LeetCode) 题目描述 给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。 样例输入 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2&…

中欧之间,从此万里有云桥

相传在1271年,马可波罗跟随父亲和叔叔前往中国,他们在海上漂泊了足足四年,才最终抵达元大都。从此之后,欧亚大陆的两端在数百年间发生了一系列故事。而海上船只,始终是穿行中欧的交通方式。 直到20世纪,两座…

git 指定时间代码统计

指定时间代码统计 用法 13 - 17 号 代码情况 近一周 git log --since2023-11-13 00:00:00 --until2023-11-17 23:00:00 --prettytformat: --numstat | awk { add $1; subs $2; loc $1 - $2 } END { printf "added lines: %s, removed lines: %s,total lines: %s\n&…

OmniGraffle Pro v7.22.3(流程图UML图)

OmniGraffle Pro是一款非常棒的绘图软件,具有多种功能,包括: 绘制图表:OmniGraffle Pro可以创建各种类型的图表,包括流程图、组织图、UML图、网络图等等。它还支持导入和导出多种文件格式,如PDF、SVG、Vis…

怎么去掉邮件内容中的回车符

上图是Outlook 截图,可见1指向的总有回车符; 故障原因: 不小心误按了箭头4这个选项; 解决方法: 点击2箭头确保tab展开; 点击3以找到箭头4. 取消勾选或者多次点击,即可解决。

Linux - 用户级缓冲区和系统缓冲区 - 初步理解Linux当中文件系统

前言 文件系统 我们先来看两个例子: 这个程序输出: 此时的输出也满足的我们预期。 我们也可以把 程序执行结果,输出重定向到 一个文件当中: 当我们在代码的结尾处,创建了子进程,那么输出应该还是和上述是一样的&…

Vue bus事件总线的原理与使用

这里写自定义目录标题 一、 Vue Bus 总线原理二、Vue bus的使用1、创建总线: 在 Vue 应用中,可以创建一个 Vue 实例作为总线,用于管理事件。2、事件的发布与订阅: 组件通过订阅事件来监听总线上的消息,而其他组件则通过…