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

本文涉及的产品
对象存储 OSS,20GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
简介: Kubernetes 是市面上最受欢迎的集群管理解决方案之一,本文将介绍 EasyMR 作为一款提供一站式可视化组件安装部署与可观测运维管理能力的大数据计算引擎产品,是如何基于 Kubernetes 部署进行实践探索的。

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 部署的要求。


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


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

架构图中 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/1001?src=szsm

《数栈V6.0产品白皮书》下载地址:https://www.dtstack.com/resources/1004?src=szsm

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

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术 qun」,交流最新开源技术信息,qun 号码:30537511,项目地址:https://github.com/DTStack

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
Kubernetes 持续交付 Docker
利用 Docker 和 Kubernetes 实现微服务部署
【10月更文挑战第2天】利用 Docker 和 Kubernetes 实现微服务部署
|
28天前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
115 60
|
29天前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
169 62
|
6天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
29 4
|
7天前
|
Kubernetes 监控 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第26天】随着云计算技术的发展,容器化成为现代应用部署的核心趋势。Kubernetes(K8s)作为容器编排领域的佼佼者,以其强大的可扩展性和自动化能力,为开发者提供了高效管理和部署容器化应用的平台。本文将详细介绍Kubernetes的基本概念、核心组件、实践过程及面临的挑战,帮助读者更好地理解和应用这一技术。
29 3
|
14天前
|
Kubernetes 监控 开发者
专家级实践:利用Cloud Toolkit进行微服务治理与容器化部署
【10月更文挑战第19天】在当今的软件开发领域,微服务架构因其高可伸缩性、易于维护和快速迭代的特点而备受青睐。然而,随着微服务数量的增加,管理和服务治理变得越来越复杂。作为阿里巴巴云推出的一款免费且开源的开发者工具,Cloud Toolkit 提供了一系列实用的功能,帮助开发者在微服务治理和容器化部署方面更加高效。本文将从个人的角度出发,探讨如何利用 Cloud Toolkit 来应对这些挑战。
32 2
|
15天前
|
Kubernetes 持续交付 Docker
探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
【10月更文挑战第18天】探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
58 2
|
26天前
|
NoSQL 关系型数据库 Redis
高可用和性能:基于ACK部署Dify的最佳实践
本文介绍了基于阿里云容器服务ACK,部署高可用、可伸缩且具备高SLA的生产可用的Dify服务的详细解决方案。
|
29天前
|
运维 Kubernetes Cloud Native
云原生时代的容器编排:Kubernetes入门与实践
【10月更文挑战第4天】在云计算的浪潮中,云原生技术以其敏捷、可扩展和高效的特点引领着软件开发的新趋势。作为云原生生态中的关键组件,Kubernetes(通常被称为K8s)已成为容器编排的事实标准。本文将深入浅出地介绍Kubernetes的基本概念,并通过实际案例引导读者理解如何利用Kubernetes进行高效的容器管理和服务部署。无论你是初学者还是有一定经验的开发者,本文都将为你打开云原生世界的大门,并助你一臂之力在云原生时代乘风破浪。
|
1月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
68 0