为什么Kubernetes是运行云原生数据库的最佳技术 - foojay


让我们看看一些指明方向的 Kubernetes 设计原则。 
原则 1:利用计算、网络和存储作为商品 API 
云计算成功的关键之一是将计算、网络和存储作为我们可以通过简单 API 提供的资源的商品化。考虑以下 AWS 服务样本: 

  • 计算:我们通过 EC2 和自动缩放组 (ASG) 分配虚拟机
  • 网络:我们使用弹性负载均衡器 (ELB)、Route 53 和 VPC 对等来管理流量 
  • 存储:我们使用诸如用于长期对象存储的简单存储服务 (S3) 或用于计算实例的弹性块存储 (EBS) 卷等选项来持久化数据。

Kubernetes 提供自己的 API 来为容器化应用程序提供类似的服务: 
  • 计算:Pod、部署和副本集管理计算硬件上容器的调度和生命周期
  • 网络:服务和入口暴露容器的网络接口
  • 存储:持久卷和有状态集使容器能够灵活地关联到存储

Kubernetes 资源促进了应用程序在 Kubernetes 发行版和服务提供商之间的可移植性。这对数据库意味着什么?它们只是利用计算、网络和存储资源来提供数据持久性和检索服务的应用程序: 
  • 计算:数据库需要足够的处理能力来处理传入的数据和查询。每个数据库节点都部署为一个 Pod 并在 StatefulSet 中分组,使 Kubernetes 能够管理扩展和扩展。
  • 网络:数据库需要公开数据和控制的接口。我们可以使用 Kubernetes 服务和入口控制器来公开这些接口。
  • 存储:数据库使用指定存储类的持久卷来存储和检索数据。

从计算、网络和存储需求方面考虑数据库可以消除在 Kubernetes 上部署所涉及的大部分复杂性。
 
原则 2:分离控制平面和数据平面 
Kubernetes 促进了控制平面和数据平面的分离。Kubernetes API 服务器是用于请求计算资源的关键数据平面接口,而控制平面管理将这些请求映射到底层 IaaS 平台的细节。 
我们可以将同样的模式应用于数据库。例如,Cassandra 的数据平面由每个节点公开的用于客户端访问 Cassandra 查询语言 (CQL) 的端口和用于节点间通信的端口组成。控制平面包括每个 Cassandra 节点提供的 Java 管理扩展 (JMX) 接口。尽管 JMX 是一个显示其年龄并存在一些安全漏洞的标准,但采用更加云原生的方法是一项相对简单的任务。在 K8ssandra 中,Cassandra 部署在自定义容器镜像中,该镜像添加了 RESTful 管理 API,绕过了 JMX 接口。 
控制平面的其余部分由利用管理 API 来管理 Cassandra 节点的逻辑组成。这是通过 Kubernetes 操作符模式实现的。Operator 定义自定义资源并提供控制循环来观察这些资源的状态并采取行动将它们移至所需状态,从而帮助使用特定于域的逻辑扩展 Kubernetes。 
K8ssandra 项目使用 cass  -operator 来自动化 Cassandra 操作。Cass-operator 定义了一个“CassandraDatatcenter”自定义资源(CRD)来表示 Cassandra 集群的每个顶级故障域。这构建了基于状态集和持久卷的更高级别的抽象。 
 
原则 3:使可观察性变得容易 
可观察系统的三大支柱是日志记录、指标和跟踪。Kubernetes 通过将每个容器的日志暴露给第三方日志聚合解决方案提供了一个很好的起点。指标和跟踪需要更多的努力来实现,但有多种解决方案可用。 
K8ssandra 项目支持使用 kube-prometheus-stack 收集指标。Metrics Collector for Apache Cassandra (MCAC) 作为代理部署在每个 Cassandra 节点上,提供专用的指标端点。来自 kube-prometheus-stack 的 ServiceMonitor 从每个代理中提取指标并将它们存储在 Prometheus 中以供 Grafana 或其他可视化和分析工具使用。 
 
原则 4:确保默认配置安全 
默认情况下,Kubernetes 网络是安全的:端口必须显式公开才能从外部访问 pod。这为数据库部署开了一个有用的先例,迫使我们仔细考虑每个控制平面和数据平面接口将如何公开,以及哪些接口应该通过 Kubernetes 服务公开。 
在 Kassandra 中,CQL 访问作为每个 CassandraDatacenter 资源的服务公开,而用于管理和度量的 API 分别由 cass-operator 和 Prometheus Service Monitor 访问各个 Cassandra 节点。 
Kubernetes 还提供秘密管理工具,包括共享加密密钥和配置管理帐户。K8ssandra 部署使用新的管理员用户名和密码替换 Cassandra 的默认管理员帐户。 
 
原则 5:首选声明式配置 
在 Kubernetes 声明式方法中,您指定所需的资源状态,控制器操作底层基础设施以实现该状态。Cass-operator 允许您指定集群中所需的节点数量,并管理放置新节点以向上扩展以及选择要删除哪些节点以向下扩展的细节。 
下一代运算符应该使我们能够指定存储数据大小、每秒事务数或两者的规则。也许我们将能够指定最大和最小集群大小,以及何时将不太常用的数据移动到对象存储。