继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

数据平台,在Kubernetes上的部署数据栈

慕尼黑5497867
关注TA
已关注
手记 378
粉丝 23
获赞 77

Prateek Dubey-5 分钟阅读

这篇文章是关于我在以前和现在的组织中围绕数据基础设施所做的一些工作。在过去的几年里,我一直在使用Kubernetes作为容器协调平台来管理docker容器,同时也运行大数据和ML工作负载。我想现在是时候与大家分享一些这方面的知识和我的心得了。让我们来看看我们如何在Kubernetes上建立一个数据平台。

数据基础设施的状况

当我加入我现在的组织时,我们在裸机CentOS服务器上使用CDH 6.1(Cloudera Distribution Hub)On-Premise来运行我们的数据和ML工作负载。我们利用CDH来管理Apache Kafka集群、Apache Hive、Apache Hadoop和Apache Spark。我们的数据工程师在网关节点上使用crontab调度数据和ML管道。我们缺少一些重要的功能,如数据治理、适当的作业调度、可观察性/监控、任何DevOps流程和最重要的可靠性。

为了满足数据治理的要求,我首先将Apache Atlas、Apache Ranger和HUE添加到我们的数据基础设施中。这些技术帮助我们为存储在Hive和HDFS中的数据添加访问控制,并提供元数据发现、沿袭和编目功能。我开始以docker容器的形式运行所有这些服务,并将它们与CDH服务整合。与CDH的整合并不是一件容易的事,因为它需要不断地更新配置属性和多次重启Cloudera集群。

数据平台,在Kubernetes上的部署数据栈

Cloudera数据平台

替换CDH的动机仅从这里开始。我们的要求很简单–

重新设计平台,使整合其他服务成为一项无缝任务。 减少我们的CDH环境中由于内存问题和计算资源(CPU和内存)利用不当而导致的频繁停机。 我们有计划在未来将一些工作负载从内部部署转移到AWS,所以我们希望我们的迁移到云端是无缝的。

因此,我开始了现代数据平台的工作,目的是建立一个不依赖于云的、云原生的和具有成本效益的解决方案。在我之前的工作中,我积累了相当多的系统和基础设施设计经验。我的目标是利用这些二手经验,利用大数据领域广泛认可的开源技术建立一个数据平台,并建立一个可以在任何地方(内部或云)部署的平台。

我从AWS的解决方案开始,做了一个POC,向我们的领导层展示我们如何利用Kubernetes来建立一个数据平台。这个解决方案看起来像下面这样 -

数据平台,在Kubernetes上的部署数据栈

AWS数据平台

POC是成功的,我们能够实现我们的关键任务,即:

在Kubernetes上构建一个数据平台解决方案。 为我们的数据科学家和数据工程师在Kubernetes上设置JupyterHub。 在Kubernetes上运行Apache Spark作业,处理TB级的数据。 使用同样在Kubernetes上运行的Apache Airflow安排Apache Spark作业。

我们能够证明建立这样一个平台的价值,将其用于我们的项目,甚至跨越不同的项目。我们还能够围绕这样一个平台提出一个好的CI/CD解决方案。我的建议是使用EKS(Elastic Kubernetes Service)作为部署所有数据平台服务的容器编排平台。

这给了我们最终用Rancher Kubernetes平台上运行的现有解决方案取代内部运行的CDH的途径。该解决方案看起来像下面这样 -

数据平台,在Kubernetes上的部署数据栈

企业内部数据平台

如果你仔细观察,我们能够设计出一个完全相似的数据平台,可以在AWS和On-Premise裸机上运行。

我从一个有3个主节点和3个工作节点的高可用Rancher 2.5.5 Kubernetes集群开始。到现在为止,我们的集群已经增长了8倍,全部使用Ubuntu操作系统。我们决定用Ubuntu取代CentOS,因为CentOS的支持即将消失。选择Rancher的原因很简单–它是完全开源的。

在建立这样一个平台的过程中,一些关键的经验是: –

仔细阅读文档。Rancher写了一份关于如何建立一个高可用、生产就绪的Kubernetes集群的惊人文档。 在Kubernetes上运行HDFS是可能的,但是我们还没有看到任何文章/博客说公司已经在生产中使用它。因此,我们决定用Ceph代替HDFS。Ceph可以使用Rook部署在Kubernetes上,也可以部署在没有Kubernetes的裸机上。 使用MetalLB作为负载平衡器,在企业内部运行K8s应用程序。 使用Bind9 DNS服务器和外部DNS来更新带有Ingress记录的DNS服务器。 我们使用Ceph来创建具有一次读取写入(RWO)访问模式的持久性卷,使用Longhorn来创建多次读取写入(RWX)访问模式。Longhorn是Rancher公司为Kubernetes创建的一个分布式存储平台。

让我也带你看看我是如何为这个平台建立我们的CI/CD解决方案的。我决定用GitLab做CI,用ArgoCD做CD。我们还使用GitLab来存储我们的Docker镜像。我想把我们的CICD作为两部分解决方案来介绍,一部分涉及我们的Kubernetes平台,另一部分是我们的数据管道。

CI/CD Kubernetes平台数据平台,在Kubernetes上的部署数据栈

CI/CD Kubernetes平台

这是一个跨组织使用的标准CICD流程。使用GitLab来存储所有的工件,同时利用GitLab进行CI。在我们的案例中,由于我们的平台是在内部运行的,所以我们也使用GitLab进行Docker注册。我建立了Gitlab CI管道来构建和发布镜像到GitLab Container Registry。我使用ArgoCD将对Helm图表的任何修改部署到Rancher Kubernetes集群上。

CI/CD数据管线数据平台,在Kubernetes上的部署数据栈

CI/CD数据管线

为了给我们的数据ETL管道建立一个CICD流程,我使用了与我们的K8s集群相同的方法。我们使用Apache Airflow来安排ETL管道,并设置了Gitlab CI管道来推送PySpark脚本到Ceph桶。我们的Airflow部署启用了Git Sync,因此DAG会自动同步到Airflow调度器,从而每60秒同步到Airflow webserver。

我在我们的DAG中使用KubernetesPodOperator来提交Spark作业到我们的K8s集群。

最后,在结束这篇文章之前,我想说我希望我的工作能让人了解如何使用Kubernetes On-Premise,以及我们如何在其上有效地构建数据平台。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP