如何运行cassandra
随着Kubernetes成为事实上的容器编排解决方案,越来越多的开发人员(和企业)希望在Kubernetes上运行Apache Cassandra数据库。 入门非常容易,尤其是考虑到Kubernetes的StatefulSets具备的功能。 但是,Kubernetes在存储状态数据和了解不同数据库的工作方式时肯定有改进的余地。
例如,Kubernetes不知道您是要写入领导者或关注者数据库,多分片领导者基础结构还是单个数据库实例。 StatefulSets(用于管理有状态应用程序的工作负载API对象)提供了稳定,唯一的网络标识符所需的构件。 稳定的持久存储; 有序,顺畅的部署,扩展,删除和终止; 和自动滚动更新。 但是,虽然在Kubernetes上开始使用Cassandra可能很容易,但是运行和管理它仍然是一个挑战。
为了克服这些障碍,我们决定构建一个开源的Cassandra运算符,该程序在Kubernetes中运行和操作Cassandra。 您可以将其视为Kubernetes之上的Cassandra即服务。 我们已将此Cassandra运算符设为开放源代码,可在GitHub上免费使用。 我们的Instaclustr团队和合作伙伴仍在努力进行这项工作,但是它已经可以使用了。 Cassandra运算符支持Docker映像,这些映像是开源的,也可以从项目的GitHub存储库中获得。
尽管开发人员可以构建用于在Kubernetes上管理和运行Cassandra的脚本,但是Cassandra运算符具有的优势是可以通过不同的生产集群提供相同的一致,可复制的环境以及相同的一致,可再现的操作集。 (在开发,登台和QA环境中都是如此。)而且,由于最佳实践已内置在操作员中,因此开发团队无需担心操作,而是可以专注于其核心功能。
什么是Kubernetes运营商?
Kubernetes运算符由两个组件组成:控制器和自定义资源定义(CRD)。 CRD允许开发人员在Kubernetes中创建Cassandra对象。 这是Kubernetes的扩展,它允许我们使用Kubernetes定义自定义对象或资源,然后我们的控制器可以侦听资源定义的任何更改。 开发人员可以在Kubernetes中定义一个对象,该对象包含Cassandra的配置选项,例如集群名称,节点数,JVM调整选项等,这些都是您想为Kubernetes提供的有关如何部署Cassandra的信息。
您可以将Cassandra运算符隔离到特定的Kubernetes命名空间,定义其应使用的持久卷类型,以及更多。 Cassandra运算符的控制器侦听Cassandra CRD上的状态更改,并将创建自己的StatefulSet来满足这些要求。 它还将管理这些操作,并可以确保通过CRD指定的维修,备份和安全扩展。 这样,它利用Kubernetes在其他控制器上构建控制器的概念来实现智能和有用的行为。
那么它是怎样工作的?
![Cassandra运算符体系结构 Cassandra operator architecture](https://i-blog.csdnimg.cn/blog_migrate/5f115a55019f7a45ab608d41912774a5.png)
在结构上,Cassandra控制器连接到Kubernetes Master。 它侦听状态更改并操纵吊舱定义和CRD。 然后部署它们,等待更改发生,直到所有必要的更改完全完成为止。
当然,Cassandra控制器可以在Cassandra集群中执行操作。 例如,要缩小您的Cassandra集群吗? 代替操纵StatefulSet来处理此任务,控制器将看到CRD更改。 节点数将更改为较小的数字(例如,从六到五)。 控制器将获得状态更改,并且它将首先在要删除的Cassandra节点上运行停用操作。 这样可以确保Cassandra节点正常停止,并在其余节点之间重新分配和重新平衡其保存的数据。 一旦Cassandra控制器看到成功完成此操作,它将修改StatefulSet定义以允许Kubernetes停用该Pod。 因此,Cassandra控制器为Kubernetes环境带来了所需的智能,以正确运行Cassandra并确保更流畅的操作。
随着我们继续该项目并迭代Cassandra运算符,我们的目标是添加新组件,这些组件将继续扩展该工具的功能和价值。 一个很好的例子是Cassandra SideCar(如上图所示),它可以负责备份和修复等任务。 该项目的当前和未来功能可以在GitHub上查看 。 我们对Cassandra运算符的目标是为开发人员提供一个功能强大的开源选项,以使其在Kubernetes上运行Cassandra的方式简单而优雅,而这并非易事。
翻译自: https://opensource.com/article/18/9/cassandra-operator-kubernetes
如何运行cassandra