为什么Kubernetes在数据工程中火起来了?
容器(Containers)已经成了把数据项目转移到生产中的实际标准。本地机器上开发的项目,通常可以毫无意外地“运送”到暂存和生产集群,所以依赖式管理不再是人们噩梦。
最终,数据管道和机器学习模型也能重现,并能以相同的方式在任意地点运行。
但是,随着容器化数据工作负载数量的不断增加,编排的平台变得越来越重要。本文将介绍以Kubernetes为代表的容器编排工具,带你了解它们在数据工程中是如何应用的。如果你想了解更多数据工程相关内容,可以阅读以下这些文章:
跟数据科学家相比,数据工程师更需要哪些技能?
2021 Data Engineer求职必备技能
面试常见5大SQL题目:培养SQL技能,助你完胜任何面试!
四条SQL准则:提升你的数据科学技能
1 编排的容器
如果你想运行可重复的数据管道,或者可以在任意地点运行的机器学习模型,Docker Image可能是最好的选择。无论从软件工程师还是到DevOps、SREs,每个人都很喜欢container images。
过去,最大的挑战是要大规模的运行容器。自从有了Kubernetes(特别是部署到弹性云服务上时),执行大规模的管理化容器就没那么痛苦了。
2 团队之间的沟通
虽然很多人都喜欢构建端到端的数据产品,但是,很多企业都会把构建数据产品和运行数据产品,这两个角色的责任分割出来。通常,在建立了数据管道之后,数据科学家和工程师就会把它们交给DevOps和SRE来部署、监控。Container images的参与让这个转换过程变得更容易了。
同时,容器还促进了数据工程师、数据科学家和分析人员之间的代码共享和协作,允许他们在相同的可重复环境中工作。
3 声明式定义(Declarative Definition)
现在,数据工程工作负载本质上都是动态的。想象一下,如果你把数据管道部署到Kubernetes集群当中,却因为内存不足导致故障,要解决这个问题,你可能需要增加该声明式部署文件的内存,并把最新的更改应用到集群中。
4 记录
另一个把工作流和配置当作代码的好处是,它能把所有的内容都记录在案——不仅是业务逻辑,还有执行细节。比如东西在哪里运行,消耗了哪些资源等等。当其他工程师需要处理你的代码时,不需要猜测、也不用来回沟通,就能跟上你的数据工作进度。
5 版本控制
声明式工作流和环境定义的另一个好处是,一切都可以进行版本控制。如果出现问题,你可以恢复到以前的版本。还可以随着时间推移,对环境所做的更改进行跟踪、提供合规性的审核日志。如果说,GitOps和MLOps是让这种方法流行不可缺少的途径,那容器和编配平台就是保证它能成功实施的必要条件。
6 维护执行层的运行状况
Kubernetes有一个最突出的优点是,它始终在维护当前所需的一切状态,并且在资源消失后,能够重新启动或重新创建资源。当然,Kubernetes的自愈“能力”并不能解决你的所有问题(比如业务逻辑被破坏),但至少,在临时网络发生错误时,不需要你自行干预,它会重新启动或重新部署问题到新pod中来解决。
7 随着数据的增长,无缝扩展执行平台
现在,只靠单个服务器上运行的数据管道,可能无法解决你的问题。但随着数据量的增长,无论是把代码打包为container images还是在本地进程中单独运行,都很难进行数据管理。
大多数云提供商都会提供自动扩展服务,甚至还会提供完全无服务器的数据平面(比如,Fargate上的AWS EKS和GCP GKE Autopilot)。这些云服务商负责在需要时向外扩展工作节点,完全避免了预估所需容量的麻烦。
虽然Kubernetes有很多优点,但也不能立刻就看到数据工作负载中具体发生了什么。不过,它会让安装分布式计算引擎的过程变得更加容易,而且能无缝扩展到多个节点上。
8 开发和生产环境的平衡
构建数据产品时的一个常见的难点是,开发环境经常和产品在生产中的运行方式大不相同。容器化的工作负载可以让这种转变更加容易。对于不同的平台或生产环境,可能你会有不同的集群或命名空间,但它们之间的切换应该是无缝的。
9 迭代更快
迭代对于构建数据工作负载至关重要。大多数数据产品一开始都很乱,可能需要你多次清理和转换数据、测试各种分类器和超参数,或者用新数据来丰富模型。但Kubernetes部署能让你使用不同的超参数,实施A/B测试、或者运行相同机器学习训练作业的多个实例。
利用Kubernetes可以加快迭代的真正原因是,当你把Kubernetes和工具结合使用时,能把低级别的细节省略掉。比如:
- 要构建和扩展数据流,可以利用Prefect和Kubernetes上的Dask。
- 要进行机器学习模型或执行A/B测试,可以利用Seldon。
- 要构建可视化、洞察力、指标和KPI,可以使用GoodData.CN。
10 安装带有Helm Chart和更多功能的软件
Kubernetes现在变得非常流行,以至于构建出甚至重新设计出了很多能在K8s集群上运行的工具,而且可以用Helm图表存储库进行安装。在上面的列表中,我们只聊了一些表面。你可以利用这个容器编排平台来构建所有数据工作负载,比如执行ETL作业、训练并提供机器学习模型,甚至构建、托管可视化等等。
共同点
以上所有要点之间的共同点是,容器(和容器编排平台)能让我们:
- 构建可以在任何规模、任意地点以相同方式运行的可复制代码。
- 减少不同团队交接上的摩擦。
- 把现代软件工程实践应用到数据工作中,包括GitOps、DevOps和MLOps。
如果你想在数据可视化中遵循这种模式,GoodData 最近推出了其云原生平台GoodData.CN,你可以把它安装到Kubernetes集群中。然后从运行一个single-image Docker container开始,进行仪表板、指标和KPI的本地开发:
在本地开发了图表、生成了指标和洞察力之后,就可以导出声明式定义,然后把它们部署到生产Kubernetes的集群中。GoodData团队还提供了详细文件来展示不同场景下的软件安装:
- 带有RDS Postgres数据库的AWS EKS,和用于Redis 的ElastiCache,
- GCP GKE和用于Postgres的Cloud SQL、用于Redis的MemoryStore
- Azure AKS与用于Postgres的Azure数据库、用于Redis的Azure缓存的Azure AKS
- 本地部署
- 以及很多关于如何管理公司、工作区和数据源的有效建议。
小结
本文,我们详解了Kubernetes(以及一般容器编排平台)的特性,这些特性让容器在数据团队中可以普遍流行。K8s集成的大量工具,以及它在每个云平台中的存在,让它成为可重复和可伸缩数据工作负载的全面执行层。
感谢你的阅读!你还可以订阅我们的YouTube频道,观看大量数据科学相关公开课:https://www.youtube.com/channel/UCa8NLpvi70mHVsW4J_x9OeQ;在LinkedIn上关注我们,扩展你的人际网络!https://www.linkedin.com/company/dataapplab/
原文作者:Anna Geller
翻译作者:Lea
美工编辑:过儿
校对审稿:Jiawei Tong
原文链接:https://betterprogramming.pub/why-kubernetes-has-become-so-popular-in-data-engineering-7206b1b6d748