使用 Apache DolphinScheduler 构建和部署大数据平台,将任务提交至 AWS 的实践经验

news2024/9/21 8:03:54

作者介绍

李庆旺 - 软件开发工程师,思科

引言

大家好,我是李庆旺,来自思科的软件开发工程师。我们的团队已经使用Apache DolphinScheduler搭建我们自己的大数据调度平台近三年时间。从最初的2.0.3版本开始至今,我们与社区一同成长,今天给大家分享的技术思路是基于3.1.1版本进行的二次开发,增加了一些社区版本中未包含的新功能。

今天,我将分享我们如何使用Apache DolphinScheduler构建大数据平台,将我们的任务提交部署到AWS上,期间遇到的一些挑战和我们的解决方案。

架构设计与调整

初始我们所有的服务均部署在Kubernetes(K8s)上,包括API、Alert、以及Zookeeper(ZK)、Master和Worker等组件。

file

大数据处理任务

我们对Spark、ETL和Flink等任务进行了二次开发:

  • ETL任务:我们团队开发了一种简单的拖拉拽形式的工具,用户可以通过这种方式快速生成ETL任务。
  • Spark支持:早期版本仅支持在Yarn上运行的Spark,我们通过二次开发使其支持在K8s上运行。目前社区的最新版本已支持Spark on K8s。
  • *Flink 二次开发: 同样,我们新增了Flink On K8s的流任务,同时还有SQL任务和Python任务On K8s的支持。

支持Job上AWS

随着业务的扩展和数据政策的需求,我们面临必须在不同地区运行数据任务的挑战。这需要我们构建一个能够支持多集群的架构。以下是我们的解决方案和实施过程的详细描述。

file

我们的当前架构包括一个集中控制终端,即一份单一的Apache DolphinScheduler服务,它负责管理多个集群。这些集群分布在不同的地理位置,例如欧盟和美国,以遵守当地的数据政策和隔离需求。

架构调整

为了满足这一需求,我们进行了如下调整:

  • 保持Apache DolphinScheduler服务的集中管理:我们的DolphinScheduler服务仍然部署在自建的Cisco Webex DC中,保持了管理的集中性和一致性。
  • 支持AWS EKS集群:同时,我们扩展了架构的能力,以支持多个AWS EKS集群。这样,可以满足任务运行在EKS集群上的新业务需求,而不影响其他Webex DC集群的运行和数据隔离。

file

通过这种设计,我们能够在保证数据隔离和政策遵守的同时,灵活应对不同的业务需求和技术挑战。

接下来介绍下如何处理Apache DolphinScheduler在Cisco Webex DC中运行任务时的技术实现和资源依赖。

file

资源依赖和存储

由于我们所有的任务都在Kubernetes(K8s)上运行,对我们来说,以下几点是至关重要的:

Docker 镜像
  • 存储位置:之前,我们所有Docker镜像都存储在Cisco的一个Docker仓库中。
  • 镜像管理:这些镜像为我们运行的各种服务和任务提供了必要的运行环境和依赖。
资源文件和依赖
  • Jar包和配置文件等:我们使用Amazon S3 Bucket作为资源存储中心,存储用户的 Jar包和可能的依赖配置文件。
  • 安全性资源管理:包括数据库密码、Kafka的加密信息和用户依赖的密钥等,这些敏感信息都存储在Cisco的Vault服务中。

安全访问和权限管理

对于访问S3 Bucket这一需求,我们需要配置和管理AWS凭证:

IAM 账户配置
  • 凭证管理:我们使用IAM账户来管理对AWS资源的访问权限,包括访问密钥(Access Keys)和秘密密钥(Secret Keys)。
  • K8s集成:这些凭证信息被存储在Kubernetes的Secret中,由Api-Service引用,从而安全地访问S3 Bucket。
  • 权限控制和资源隔离:通过IAM账户,我们可以实现精细的权限控制,确保数据安全和业务的合规性。

IAM账户访问密钥的过期问题及对策

在使用IAM账户管理AWS资源的过程中,我们面临着访问密钥过期的问题。这里详细介绍我们如何应对这一挑战。

访问密钥过期问题
  • 密钥周期:IAM账户的AWS密钥通常设置为每90天自动过期,这是为了增强系统的安全性。
  • 任务影响:一旦密钥过期,所有依赖这些密钥访问AWS资源的任务都将无法执行,这需要我们及时更新密钥以保持业务的连续性。

针对这种情况,我们给任务设置了定期重启,同时设置了对应的监控,如果 AWS 的账号在未到过期时间之内出现了问题,那么就需要通知到我们相应的开发人员,去做一些处理。

支持 AWS EKS

随着业务扩展到AWS EKS,我们需要对现有架构和安全措施进行一系列调整。 file

比如像刚才说的 Docker image,我们之前是放到 Cisco 自己的 Docker repo 里,那现在就需要把 Docker image 放到 ECR 上。 file

多个 S3 Bucket 的支持

由于AWS集群的分散性和不同业务的数据隔离需求,我们需要支持多个S3 Bucket来满足不同集群的数据存储需求: file

  • 集群与Bucket的对应:每个集群将访问其对应的S3 Bucket,以确保数据的局部性和合规性。
  • 修改策略:我们需要调整我们的存储访问策略,以支持从多个S3 Bucket读写数据,不同的业务方要访问自己对应的 S3 bucket。

密码管理工具的变更

为了提高安全性,我们从Cisco的自建Vault服务迁移到了AWS的Secrets Manager(ASM):

  • ASM的使用:ASM提供了一个更加集成的解决方案来管理AWS资源的密码和密钥。

我们采取了使用IAM Role和Service Account的方式,以增强Pod的安全性:

  • 创建IAM Role和Policy:首先创建一个IAM Role,为其绑定必要的Policy,确保只有必要的权限被授予。
  • 绑定K8s Service Account:随后创建一个Kubernetes Service Account,并将其与IAM Role关联。
  • Pod的权限集成:在运行Pod时,通过关联到Service Account,Pod可以直接通过IAM Role获取所需的AWS凭证,从而访问必要的AWS资源。

这些调整不仅提升了我们系统的可扩展性和灵活性,还加强了整体的安全架构,确保在AWS环境中的运行既高效又安全。同时也避免了之前密钥自动过期需要重启的问题。

优化资源管理与存储流程

为了简化部署流程,我们计划直接将Docker镜像推送到ECR,而不是通过二次中转:

  • 直接推送:修改当前的打包流程,使Docker镜像在构建后直接推送到ECR,减少时间延迟和潜在的错误点。
改动实施
  • 代码级调整:我们在DolphinScheduler的代码中进行了修改,使其能够支持多个S3 Client,增加了对多个S3Client的缓存管理,。
  • 资源管理UI调整:允许用户通过界面选择不同的AWS Bucket名称进行操作。
  • 资源访问:修改后的Apache DolphinScheduler服务现在可以访问多个S3 Bucket,允许在不同的AWS集群之间灵活管理数据。

AWS资源的管理和权限隔离

集成AWS Secrets Manager(ASM)

我们对Apache DolphinScheduler进行了扩展,以支持AWS Secrets Manager,使得用户可以在不同的集群类型中选择密钥:

file

ASM的功能集成
  • 用户界面改进:在DolphinScheduler的用户界面中,增加了对不同secret类型的展示和选择功能。
  • 自动密钥管理:运行时将保存了用户选定的secret的文件路径映射到实际的Pod环境变量中,确保了密钥的安全使用。

动态资源配置和初始化服务(Init Container)

为了更灵活地管理和初始化AWS资源,我们实施了一个名为Init Container的服务:

file

  • 资源拉取:Init Container在Pod执行前,会自动拉取用户配置的S3资源,并将其放置到指定目录下。
  • 密钥和配置管理:根据配置,Init Container会检查并拉取ASM中的密码信息,随后将其存放在文件中,并通过环境变量映射,供Pod使用。

Terraform在资源创建和管理中的应用

我们通过Terraform自动化了AWS资源的配置和管理过程,简化了资源分配和权限设定:

file

  • 资源自动化配置:使用Terraform创建所需的AWS资源,如S3 Bucket和ECR Repo。
  • IAM策略和角色管理:自动创建IAM策略和角色,确保每个业务单元可以按需访问其所需的资源。

权限隔离和安全性

我们通过精细的权限隔离策略,确保不同业务单元在独立的Namespace中操作,避免了资源访问冲突和安全风险:

实施细节
  • Service Account的创建和绑定:为每个业务单元创建独立的Service Account,并将其与IAM角色绑定。
  • Namespace隔离:每个Service Account操作在指定的namespace内,通过IAM角色访问其对应的AWS资源。

file

集群支持与权限控制的改进

集群类型的扩展

我们增加了一个新的字段 cluster type,以支持不同类型的K8S集群,这不仅包括标准的Webex DC集群和AWS EKS集群,还可以支持具有更高安全要求的特定集群:

file

集群类型管理
  • 集群类型字段:通过引入cluster type字段,我们可以轻松地管理和扩展对不同K8S集群的支持。
  • 代码级别的定制:针对特定集群的独特需求,我们可以进行代码级别的修改,以确保在这些集群上运行job时能够满足其安全和配置要求。

增强的权限控制系统(Auth系统)

我们开发了Auth系统,专门用于细粒度的权限控制,包括project、resource和namespace间的权限管理:

权限管理功能
  • 项目和资源权限:用户可以通过项目维度控制权限,一旦拥有项目权限,即拥有该项目下所有资源的访问权。
  • namespace权限控制:确保特定团队只能在指定的namespace中运行其项目的job,从而保证运行资源隔离。

比如说 A team,那么它的 A namespace 上面只能运行某一些 project job,那么比如说像 B 用户,他就不能去在 A 用户的那些 namespace 上面去运行job。

AWS资源的管理和权限申请

我们通过Auth系统和其他工具,管理AWS资源的权限和访问控制,使得资源分配更加灵活和安全:

file

  • 多AWS Account支持:在Auth系统中可以管理多个AWS账户,并绑定不同的AWS资源如S3 Bucket、ECR和ASM等。
  • 资源映射和权限申请:用户可以在系统中对已有的AWS资源进行映射和权限申请,这样在运行job时可以轻松地选择需要访问的资源。

Service Account的管理和权限绑定

为了更好地管理服务账户和其权限,我们实现了以下功能:

file

Service Account的绑定和管理
  • Service Account唯一区分:通过特定的集群、namespace和项目名称绑定Service Account,确保其唯一性。
  • 权限绑定界面:用户可以在界面上将Service Account绑定到具体的AWS资源,如S3、ASM或ECR,从而实现权限的精确控制。

file

简化操作和资源同步

刚才说了很多,但实际对于用户来说操作其实比较简单,整个申请的流程那些都其实都是一次性的工作,为了进一步提高Apache DolphinScheduler在AWS环境中的用户体验,我们采取了一系列措施来简化操作流程和增强资源同步功能。

file

给大家总结一下:

简化的用户操作界面

在DolphinScheduler中,用户可以轻松配置其作业运行的具体集群和namespace:

集群和namespace选择
  • 集群选择:用户在提交作业时,可以选择希望作业运行的集群。
  • namespace配置:根据选择的集群,用户还需要指定作业运行的namespace。
Service Account和资源选择
  • Service Account展示:页面将根据选定的项目、集群和namespace自动展示相应的 Service Account。
  • 资源访问配置:用户可以通过下拉列表选择与服务账户关联的S3 Bucket、ECR地址和ASM秘钥。

未来展望

针对于现在的设计,还有一些地方可以优化改进可以提升用户提交和方便运维:

  • 镜像推送优化:考虑跳过Cisco的中转打包流程,直接将包推送至ECR,尤其是针对特定于EKS的镜像修改。
  • 一键同步功能:我们计划开发一键同步功能,允许用户将一个上传到S3 Bucket的资源包,勾选自动同步到其他S3 Bucket,减少重复上传的工作。
  • 自动映射至Auth系统:Aws资源通过Terraform创建后,系统将自动将这些资源映射到权限管理系统中,避免用户手动进行资源录入。
  • 权限控制优化:通过自动化的资源和权限管理,用户的操作变得更加简洁,减少了设置和管理的复杂性。

通过这些改进,我们期望能够帮助用户使用Apache DolphinScheduler更有效地部署和管理他们的作业,无论是在Webex DC还是在EKS上,同时提高资源管理的效率和安全性。

本文由 白鲸开源科技 提供发布支持!

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

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

相关文章

基于FPGA的数字信号处理(15)--定点数的舍入模式(6)向0取整fix

前言 在之前的文章介绍了定点数为什么需要舍入和几种常见的舍入模式。今天我们再来看看另外一种舍入模式:向上取整fix。 10进制数的fix fix:也叫 向0取整。它的舍入方式是数据往0的方向,舍入到最近的整数,比如1.75 fix到2&#xf…

【操作系统】进程管理——管程(个人笔记)

学习日期:2024.7.12 内容摘要:管程的定义和基本特征 管程 管程存在的意义:在上一章节中,我们学习了利用信号量机制解决进程同步互斥问题的方法,信号量机制编写程序较为复杂困难,易出错。为了让程序员写程…

MySQL查询语句(DQL)

文章目录 查询语句(DQL)简单查询查一个字段查多个字段查所有字段查询字段可以进行数学运算查询时字段可起别名 条件查询and (&&)or (||)between...and...is null 和 is not nullin 和 not inlike (模糊查询) 查询语句(DQL) 简单查询 \c可以清空…

JavaScript中的拷贝技术探秘:浅拷贝与深拷贝的奥秘

最新技术资源(建议收藏) https://www.grapecity.com.cn/resources/ 前言 JavaScript中的浅拷贝和深拷贝是非常重要的概念,它们在处理对象和数组时具有不同的作用。在编程中,经常需要复制数据以便进行各种操作,但必须注…

【python】Python报错分析:深入探索`IndexError`及其解决办法

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

GlobalSign证书介绍以及申请流程

在当今高度互联的世界中,网络安全与数据保护的重要性日益凸显,而数字证书作为保障网络通信安全的关键技术,已成为构建数字信任的基石。GlobalSign,作为全球数字证书行业的先驱和领导者,自成立以来便致力于为全球企业和…

unity 手动制作天空盒及使用

提示:文章有错误的地方,还望诸位大神不吝指教! 文章目录 前言一、使用前后左右上下六张图1.准备6张机密结合的图片2.创建Material材质球3.使用天空盒 二、使用HDR贴图制作1.准备HDR贴图2.导入unity 修改Texture Sourpe 属性3.创建材质球4.使用…

Jenkins 离线升级

1. 环境说明 环境 A: jenkins 版本:2.253使用 systemctl 管理的 jenkins 服务 环境 B: 可以上网的机器,装有 docker-compose docker 和 docker-compose 安装,这里都略了。 2. 安装旧版本 2.1 环境 A jenkins 目录打包文件 …

ARM 虚拟机FVP环境搭建

ARM Fixed Virtual Platforms (FVPs) 是由 ARM 提供的一系列虚拟化硬件模拟器,用于在物理硬件可用之前开发和测试软件。FVP 模型非常适用于软件开发、验证和性能分析,涵盖了从裸机到操作系统和复杂 SoC 系统的各种应用。 这里以Cortex-M55为例&#xff0…

80. UE5 RPG 实现UI显示技能冷却进度功能

在上一篇文章里,我们实现了通过GE给技能增加资源消耗和技能冷却功能。UI也能够显示角色能够使用的技能的UI,现在还有一个问题,我们希望在技能释放进去冷却时,技能变成灰色,并在技能冷却完成,技能可以再次使…

【算法】代码随想录之数组

文章目录 前言 一、二分查找法(LeetCode--704) 二、移除元素(LeetCode--27) 三、有序数组的平方(LeetCode--977) 四、长度最小的子数组(LeetCode--209) 五、螺旋矩阵II&#x…

LLM:tokenizer分词器概念

在做nlp时,首先要对文本进行分词,也就是给定一个句子,将其归到词表中的一系列token上,token有对应的数字(token_id)。 上图是bert的分词器的json内容,可以看到词表是一个字典,key为t…

电脑显示MSVCR110.dll丢失怎么办,总结5种靠谱的解决方法

在使用电脑过程中,部分用户可能会遇到MSVCR110.dll文件丢失的问题,具体表现为弹出提示窗口,指出缺失该文件,导致部分程序无法正常启动。小编将为您介绍多种解决该问题的指南。 一、找不到MSVCR110.dll是什么情况 MSVCR110.dll是M…

2.线性回归

简化的房价模型 假设1:影响房价的关键因素时卧室个数,卫生间和居住面积,记为 x 1 , x 2 , x 3 x_1,x_2,x_3 x1​,x2​,x3​ 假设2:成交价时关键因素的加权和: y w 1 x 1 w 2 x 2 w 3 x 3 b y w_1x_1w_2x_2w_3x…

在 IVS 2024 加密盛会上开拓创新:CESS 引领去中心化云存储和 CD²N 之发展

作为基于区块链的去中心化云存储网络和 CDN 基础设施网络,CESS 在日本年度加密创业大会 IVS 2024 上成为焦点!此次活动在历史悠久的京都举办,围绕“跨越边界”这一主题,吸引了超过15,000 名参会者,其中包括 3,000 创始…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥证明介绍及算法规格】

密钥证明介绍及算法规格 HUKS为密钥提供合法性证明能力,主要应用于非对称密钥的公钥的证明。 基于PKI证书链技术,HUKS可以为存储在HUKS中的非对称密钥对的公钥签发证书,证明其公钥的合法性。业务可以通过系统提供的根CA证书,逐级…

Python数据分析-Excel和 Text 文件的读写操作

1.Excel和 Text 文件的读写操作 1. Text 文件读写包 import sys print(sys.argv[0]) print(__file__) print(sys.path[0]) qopen(sys.path[0] "\out.txt","w",encodingutf-8) q.write(这个是测试一下) q.close() print(done)open 语句可以打开的创建text…

DR模式介绍

DR模式 lvs的三种模式 nat:地址转换 DR模式:直接路由模式 tun:隧道模式 DR模式的特点 调度器在整个lvs集群当中是最重要的,在nat模式下,即负责接受请求,同时根据负载均衡的算法转发流量,响…

OceanBase 社区版,搭建,安装,部署

这是阿里的数据库,因为我目前在杭州,所以企业用这个的比较多。 我看的版本是V4.3.1 官网概述解读 我看的是社区版 他是分布式关系型数据库,支持事务。兼容mysql语法,支持水平扩展,LSM数据压缩。 社区版&#xff0…

ROS的TF系统

一、SLAM 1、SLAM全称是Simultaneous Localization And Mapping,即同时定位与地图构建 2、SLAM软件包Hector_Mapping,←建图可参考链接所示文章 二、机器人定位 1、假设机器人开始建图的位置是地图坐标系的原点 2、则机器人在建图过程中的位置可以描…