K8ssandra 操作器
这是 K8ssandra 的 Kubernetes 操作器。
k8ssandra-operator 是一个用于在 Kubernetes 上管理 Apache Cassandra 和 DSE 的全面解决方案。Apache Cassandra 是首屈一指的宽列 NoSQL 数据存储,提供低延迟、地理复制和存储 PB 级数据的能力。Apache Cassandra 在某种程度上被财富 500 强中的 90% 企业所使用。
DataStax Enterprise(DSE)是 DataStax 公司发行的 Apache Cassandra 版本,提供额外功能,如高级安全性、搜索和图形,以及 Cassandra 尚未提供的功能,如用于生成式 AI 应用的向量搜索。
k8ssandra-operator 允许在多个 Kubernetes 集群上部署多个 Apache Cassandra 数据中心。这种架构的目的是提供地理复制,以提高延迟(通过将数据移近最终用户)和可用性(通过提供多个数据中心来处理请求,以应对数据中心故障或网络分区)。
Apache Cassandra 提供机架和故障区域感知的数据复制,这种复制既有复制又有分片,以提高性能和保护数据。
它包含以下功能:
部署
Apache Cassandra 可以部署到不同地区或可用性/故障区域的多个数据中心中。k8ssandra-operator 通过实现多个 Kubernetes 集群之间的通信并将 Cassandra 数据中心部署到这些集群中,使这成为可能。
这将 k8ssandra-operator 与 cass-operator(在 k8ssandra-operator 内部使用)区分开来,后者不自动化多区域部署。
控制平面集群中的单个 k8ssandra-operator 实例可以管理跨多个 Kubernetes 集群的多个数据平面 DC,并分布在多个 Cassandra 集群中。已经测试并确认了高达 1000 个节点的集群性能良好。
支持高级 Cassandra 功能,如变更数据捕获(CDC),并可以使用 Kubernetes 清单进行配置。
监控
监控是任何分布式系统中的关键服务,k8ssandra-operator 通过添加到 Cassandra JVM 的代理提供丰富的 Apache Cassandra 指标套件。
通过与 Vector 集成,k8ssandra-operator 允许指标流向用户选择的位置,包括现有的 Prometheus 或 Mimir 实例。还支持各种其他协议和系统,如 AMQP、Elasticsearch、Kafka 或 Redis(完整的集成列表请参见此处)。
可以使用 Kubernetes 自定义资源配置指标管道,允许创建多个管道以支持跨多个集群的不同用例。
支持 Cassandra 审计和监控功能(如完整查询日志记录),可以直接从 K8ssandraCluster 清单进行配置。
修复和数据维护
Apache Cassandra 需要定期维护以确保数据在集群中一致地复制。k8ssandra-operator 通过使用 Reaper(一个由 K8ssandra 团队维护的广泛采用的 Cassandra 反熵修复解决方案)定期运行修复来自动化这个过程。
使用 k8ssandra-operator,您可以使用 Kubernetes 清单来配置和监控跨多个 Cassandra 数据中心和集群的修复计划的成功情况。
备份和恢复
k8ssandra-operator 使用 Medusa 来实现 Cassandra SSTables 到云存储位置(如 S3 存储桶、GCS 和 Azure 存储)的备份。
可以使用 Kubernetes 清单配置备份和恢复计划,允许以声明式、可审计的方式管理备份和恢复过程。
灵活的 API
Apache Cassandra 的 Stargate 提供高级 API,包括与 node.js 的 Mongoose 对象建模框架、GraphQL 和 REST 的集成。在某些集群拓扑中,它还可以提高 Cassandra 原生 CQL 的性能。
使用 k8ssandra-operator,可以通过简单的 Kubernetes 清单部署和配置 Stargate。
接下来怎么办?
本文档涵盖了从安装细节、部署的组件、配置参考到引导式基于结果的任务的所有内容。
要安装 k8ssandra-operator,请从[这里]({{< relref "install/" >}})开始。 请务必在 Github 上为我们留下一颗星星!
架构
K8ssandra 操作符在开发时首先考虑的是多集群支持。它也可以无缝地用于单集群部署。
K8ssandra 操作符由控制平面和数据平面组成。 控制平面创建和管理仅存在于 API 服务器中的对象。控制平面不部署或管理 Pod。
注意: 控制平面只能安装在一个集群中,即控制平面集群。
数据平面可以安装在任意数量的集群上。控制平面集群也可以作为数据平面使用。
数据平面部署和管理 Pod。此外,数据平面可能直接与受管理的应用程序交互。例如,操作符调用管理 API 在 Cassandra 中创建键空间。
图表
在这个图表中,你可以看到一个多集群部署的小例子。
要求
Kubernetes 集群之间需要有可路由的 Pod IP;然而,这个要求在将来可能会放宽。
如果你在云提供商上运行,你可以通过在同一个 VPC 中安装 Kubernetes 集群来获得可路由的 IP。
如果你在本地运行多个 kind 集群,假设它们运行在同一个 Docker 网络上(通常情况下是这样),你将拥有可路由的 Pod IP。我们在多集群 E2E 测试中利用了这一点。
安装操作符
请参阅安装指南。
贡献
有关参与 K8ssandra 的更多信息,请查看 K8ssandra 社区页面。
本节的其余部分主要关注操作符本身的开发。
社区
在 k8ssandra.io 查看完整的 K8ssandra 文档。
在 forum.k8ssandra.io 开始或加入论坛讨论。
在这里加入我们的 Discord。
对于任何特定于 K8ssandra 1.x 的问题,请在 k8ssandra 仓库中创建问题。
开发
请参阅开发指南。