在 Kubernetes 上运行 Apache Cassandra

Cassandra operator 提供了一个强大、开源的选项,用于在 Kubernetes 上以简洁优雅的方式运行 Cassandra。
291 位读者喜欢这篇文章。

随着 Kubernetes 成为容器编排的事实标准解决方案,越来越多的开发者(和企业)希望在 Apache Cassandra 数据库上运行 Kubernetes。入门很容易,特别是考虑到 Kubernetes 的 StatefulSets 所带来的功能。然而,Kubernetes 在状态数据存储和理解不同数据库的工作方式方面,肯定还有改进的空间。

例如,Kubernetes 不知道您是写入主数据库还是从数据库,还是写入多分片的主数据库基础设施,还是写入单个数据库实例。StatefulSets——用于管理有状态应用程序的工作负载 API 对象——提供了构建稳定、唯一的网络标识符所需的构建块;稳定的持久存储;有序且平滑的部署和扩展、删除和终止;以及自动滚动更新。然而,虽然在 Kubernetes 上开始使用 Cassandra 可能很容易,但运行和管理它仍然可能是一个挑战。

为了克服这些障碍,我们决定构建一个开源的 Cassandra operator,在 Kubernetes 中运行和操作 Cassandra;您可以将其视为 Kubernetes 之上的 Cassandra 即服务 (Cassandra-as-a-Service)。我们已将这个 Cassandra operator 开源,并在 GitHub 上免费提供。它仍然是我们的 Instaclustr 团队和我们的合作伙伴贡献者正在进行的工作——但它功能齐全,可以投入使用。Cassandra operator 支持 Docker 镜像,这些镜像也是开源的,并且可以从项目的 GitHub 仓库中获取。

Cassandra operator 旨在提供“免运维”的 Cassandra:它负责部署,并允许用户在 Kubernetes 环境中以安全的方式管理和运行 Cassandra。它还使利用一致且可重现的环境变得简单。

虽然开发人员可以构建脚本来管理和运行 Kubernetes 上的 Cassandra,但 Cassandra operator 的优势在于提供了相同一致、可重现的环境,以及在不同的生产集群中提供相同一致、可重现的操作集。(这在开发、暂存和 QA 环境中都是如此。)此外,由于最佳实践已内置到 operator 中,开发团队可以免除运维方面的担忧,并专注于他们的核心能力。

什么是 Kubernetes operator?

Kubernetes operator 由两个组件组成:控制器和自定义资源定义 (CRD)。CRD 允许开发人员在 Kubernetes 中创建 Cassandra 对象。它是 Kubernetes 的一个扩展,允许我们使用 Kubernetes 定义自定义对象或资源,我们的控制器可以监听资源定义的任何更改。开发人员可以在 Kubernetes 中定义一个对象,其中包含 Cassandra 的配置选项,例如集群名称、节点计数、JVM 调优选项等——您希望向 Kubernetes 提供的所有关于如何部署 Cassandra 的信息。

您可以将 Cassandra operator 隔离到特定的 Kubernetes 命名空间,定义它应该使用哪种持久卷等等。Cassandra operator 的控制器监听 Cassandra CRD 上的状态更改,并将创建自己的 StatefulSets 以满足这些要求。它还将管理这些操作,并可以确保按照 CRD 中的指定进行修复、备份和安全扩展。通过这种方式,它利用了 Kubernetes 的概念,即在其他控制器之上构建控制器,以实现智能且有用的行为。

那么,它是如何工作的呢?

Cassandra operator architecture

从架构上讲,Cassandra 控制器连接到 Kubernetes Master。它监听状态变化并操作 pod 定义和 CRD。然后它部署它们,等待更改发生,并重复此过程,直到所有必要的更改完全完成。

当然,Cassandra 控制器可以在 Cassandra 集群内执行操作。例如,想要缩小您的 Cassandra 集群?控制器将看到 CRD 更改,而不是操作 StatefulSet 来处理此任务。节点计数将更改为较低的数字(例如从六个到五个)。控制器将获得该状态更改,并将首先在要删除的 Cassandra 节点上运行 decommission 操作。这确保 Cassandra 节点优雅地停止,并将其持有的数据在剩余节点之间重新分发和重新平衡。一旦 Cassandra 控制器看到这种情况已成功发生,它将修改 StatefulSet 定义,以允许 Kubernetes decommission 该 pod。因此,Cassandra 控制器为 Kubernetes 环境带来了所需的智能,以正确运行 Cassandra 并确保更顺畅的操作。

随着我们继续这个项目并迭代 Cassandra operator,我们的目标是添加新的组件,这些组件将继续扩展该工具的功能和价值。一个很好的例子是 Cassandra SideCar(如上图所示),它可以负责备份和修复等任务。项目的当前和未来功能可以在 GitHub 上查看。我们对 Cassandra operator 的目标是为开发人员提供一个强大、开源的选项,用于在 Kubernetes 上以简洁优雅的方式运行 Cassandra,而这在以前并不容易实现。

标签
User profile image.
Ben Bromhead 是 Instaclustr 的首席技术官和联合创始人,Instaclustr 是一家开源即服务公司。

1 条评论

另一种方法是使用 helm 安装。开箱即用。

© . All rights reserved.