FOSS 项目聚焦:BlueK8s

作者:Tom Phelan

在 Kubernetes 上部署和管理复杂的状态ful应用。

Kubernetes (又名 K8s) 现在是事实上的容器编排框架。与其他流行的开源技术一样,Kubernetes 已经积累了一个相当大的互补工具生态系统,以解决从存储到安全的一切问题。虽然它最初是为运行无状态应用而创建的,但越来越多的组织对使用 Kubernetes 用于状态ful应用感兴趣。

然而,虽然 Kubernetes 在过去几年中在许多领域取得了显著进展,但在运行复杂的状态ful应用方面仍然存在相当大的差距。使用 Kubernetes 部署和管理由大量协作服务组成的分布式状态ful应用(例如用于大规模分析和机器学习的用例)仍然具有挑战性。

在过去的几年里,我一直专注于这个领域,作为 BlueData 的联合创始人。在那段时间里,我与多个行业的 Global 2000 企业中的许多团队合作,成功部署了分布式状态ful服务,例如 Hadoop、Spark、Kafka、Cassandra、TensorFlow 以及其他分析、数据科学、机器学习 (ML) 和深度学习 (DL) 工具在容器化环境中。

在那段时间里,我了解了使用容器部署像这些复杂的状态ful应用需要什么,同时确保企业级的安全性、可靠性和性能。我和我在 BlueData 的同事一起,在使用 Docker 容器进行大数据分析、数据科学和高度分布式环境中的 ML/DL 方面取得了新的突破。我们开发了新的创新技术,以解决存储、安全性、网络、性能和生命周期管理等领域的需求。

现在我们想把这些创新带给开源社区——以确保 Kubernetes 生态系统中支持这些状态ful服务。BlueData 的工程团队一直忙于与 Kubernetes 合作,在我们的实验室中使用 Kubernetes 开发原型,并与多家企业组织合作评估在复杂状态ful应用中使用 Kubernetes 的机会(和挑战)。

为此,我们最近介绍了一个新的 Kubernetes 开源计划:BlueK8s。BlueK8s 计划将由几个开源项目组成,每个项目都将为 Kubernetes 带来企业级状态ful应用能力。

Kubernetes Director(或简称 KubeDirector)是该计划中的第一个开源项目。KubeDirector 是一个自定义控制器,旨在简化和精简大数据分析和 AI/ML/DL 用例的复杂分布式状态ful应用的打包、部署和管理。

当然,其他现有的开源项目也解决了状态ful和无状态应用的各种需求。例如,Kubernetes Operator 框架管理特定应用的生命周期,为构建和部署特定于应用的 Operator 提供有用的资源。这是通过创建一个简单的有限状态机来实现的,通常称为协调循环

  • 观察:确定应用的当前状态。
  • 分析:将应用的当前状态与应用的预期状态进行比较。
  • 行动:采取必要的步骤使应用的运行状态与其预期状态相匹配。
""

图 1. 协调循环

使用 Kubernetes Operator 管理云原生无状态应用非常简单,但并非所有应用都是如此。大多数用于大数据分析、数据科学和 AI/ML/DL 的应用都不是在云原生架构中实现的。而且,这些应用通常是状态ful的。此外,分布式数据管道通常由各种不同的服务组成,这些服务都具有不同的特性和配置要求。

因此,您无法轻易地将这些应用分解为自给自足且可容器化的微服务。而且,这些应用通常是紧密集成的进程与复杂相互依赖关系的混合体,其状态分布在多个配置文件中。因此,为每种可能的配置创建、部署和集成特定于应用的 Operator 将具有挑战性。

KubeDirector 项目旨在解决这个问题。KubeDirector 构建在 Kubernetes 自定义资源定义 (CRD) 框架之上,具有以下功能:

  • 它采用原生的 Kubernetes API 扩展、设计理念和身份验证。
  • 对于任何有 Kubernetes 开发经验的开发人员来说,它只需要极少的学习曲线。
  • 无需分解现有应用以适应微服务模式。
  • 它提供对保留应用配置和状态的原生支持。
  • 它遵循与应用无关的部署模式,从而缩短了状态ful应用加入 Kubernetes 的时间。
  • 它是应用中立的,通过 YAML 格式配置文件中指定的特定于应用的指令,同时支持许多应用。
  • 它支持管理由多个应用组成的分布式数据管道,例如 Spark、Kafka、Hadoop、Cassandra、TensorFlow 等,包括各种相关工具,用于数据科学、ML/DL、商业智能、ETL、分析和可视化。

KubeDirector 使您无需创建和实施多个 Kubernetes Operator 即可管理由多个复杂状态ful应用组成的集群。您只需使用 KubeDirector 即可管理整个集群。与 KubeDirector 的所有通信都通过 kubectl 命令执行。集群的预期状态作为请求提交到 API 服务器,并存储在 Kubernetes etcd 数据库中。KubeDirector 将应用必要的特定于应用的工作流程,将集群的当前状态更改为集群的预期状态。可以为每种应用类型指定不同的工作流程,如图 2 所示,该图显示了一个简单的示例(使用 KubeDirector 部署和管理容器化的 Hadoop 和 Spark 应用集群)。

""

图 2. 使用 KubeDirector 部署和管理容器化的 Hadoop 和 Spark 应用集群

如果您有兴趣,我们非常欢迎您加入不断壮大的 KubeDirector 开发人员、贡献者和采用者社区。KubeDirector 的初始 pre-alpha 版本最近在 https://github.com/bluek8s/kubedirector 发布。有关架构概述,请参阅 GitHub 项目 wiki。您还可以在 Kubernetes 网站上的这篇技术博客文章中阅读更多关于其工作原理的信息。

Tom Phelan 是 BlueData 的联合创始人兼首席架构师。

加载 Disqus 评论