Kubernetes 是当今云原生开发的事实上的标准。长期以来,Kubernetes 主要与无状态应用程序相关,例如 Web 和批处理应用程序。然而,与大多数事物一样,Kubernetes 也在不断发展。如今,我们看到 Kubernetes 上有状态应用程序的数量呈指数级增长。事实上,自 2019 年以来,在 Google Kubernetes Engine (GKE) 上运行有状态应用程序的集群数量每年都增加一倍。
如今,Kubernetes 越来越多地用于运行有状态和数据应用程序,例如数据库(Kafka、MySQL、PostgreSQL 和 MongoDB)、大数据(Hadoop 和 Spark)、数据分析(Hive 和 Pig)以及机器学习(TensorFlow 和 PyTorch) 。Airbyte和矢量 DB等现代数据工程工具以及Qdrant、Weaviate和Feast等特征存储使用容器和 Kubernetes 作为默认的自管理计算部署选项。
与此同时,Kubernetes平台工程师越来越熟悉这些数据工具,而数据工程师也越来越熟悉Kubernetes。我们在2022 年 Data On Kubernetes (DoK) 报告中对此进行了报道,客户报告称,通过在 Kubernetes 上运行数据应用程序,生产力提高了 3 倍。此外,超过 41% 的受访者表示,他们计划重新培训或聘用有关 Kubernetes 人才的数据。在 Kubernetes 上运行数据工作负载的推动只会进一步增长。
图 1. Kubernetes 上的有状态工作负载呈指数级增长(以 Google Kubernetes Engine 为例)
由于多种原因,DoK 是一种很有前途的运行数据工作负载的方法:
1、可扩展性和灵活性
大规模人工智能的计算以 petaFlops 为单位。客户利用 Kubernetes 的规模来运行大型超级计算机。例如,PGS 将其 Cray 替换为基于 GKE 的超级计算机,处理能力为 72.02 petaFLOPS。这相当于世界第七大计算机。
随着大规模计算的出现,需要可扩展的存储。Kubernetes 的灵活性导致了通过容器存储接口 (CSI) 进行存储集成,这为客户提供了广泛的存储选项来访问其数据。
对块和文件存储的支持已经存在一段时间了;最近,新的基于对象存储的 Fuse CSI 驱动程序被证明是与有状态应用程序的流行的新集成。这种需求是由需要高吞吐量和低成本存储的 AI/ML 和数据分析应用程序驱动的。添加 Fuse 层有助于提高可移植性,因为数据科学家在访问对象存储上的数据时可以简单地使用文件语义,而不是使用特定于云提供商的 SDK。
图 2. GCS Fuse CSI 允许 Pytorch 和 Tensorflow 上的 AI/ML 应用程序通过文件语义访问对象存储中的数据
2. 韧性
Kubernetes 提供了高度的弹性,可以自动从故障场景中恢复。Kubernetes 可以自动修复,包括自动重新启动失败的容器,它还可以将数据工作负载分布在多个节点上,以提高性能和可用性。例如,您可以使用分散策略跨区域放置副本、设置负载平衡、无缝附加持久卷以及安排备份。您还可以使用 Terraform 等基础设施即代码 (IaC) 工具使其成为可重复的模式。
Kubernetes 进行频繁的更新,这可以被视为对有状态应用程序的破坏。然而,凭借 Pod 中断预算、维护窗口和蓝绿部署,Kubernetes 拥有优雅地管理升级所需的所有自动化功能,使组织能够实现在现代基础设施上运行的好处。
3、开放性
Kubernetes 是一个社区主导的项目和完全开源的工具(曾经是有史以来增长最快的开源软件),这意味着存在一个由其他开源工具组成的庞大生态系统,旨在与它一起使用。还有丰富的工具和服务生态系统可帮助您管理数据工作负载。您可以使用 Spark、Airflow 和 Kafka 等 Kubernetes 运算符,它们有 OSS 和企业版本。然后还有现代数据工程 OSS 工具,如Airbyte、Feast和矢量数据库(如 Weaviate 和Qdrant),支持容器和 kubernetes 进行自我管理的计算部署。
4. 费用
Kubernetes 允许细粒度的装箱和正确调整资源大小。这为数据应用带来了一定程度的成本优化,而这在传统的虚拟机领域是看不到的。GKE 等托管 Kubernetes 产品现在可为您提供开箱即用的建议,帮助您做出正确调整工作负载大小和提高效率的决策。
总而言之,在数据和 AI/ML 应用预计将增长的世界中,Data on Kubernetes 完全有能力成为操作默认选项。要了解有关在 Kubernetes 上运行有状态和数据应用程序的更多信息,请浏览GKE文档中的数据。