Kubernetes 存储平台在实时分析数据库中的应用
在 2023 年 KubeCon + CloudNativeCon 北美会议上,Altinity 公司的 CEO Robert Hodges 发表了题为《数据冒险:依赖 Kubernetes 存储运行数百个实时分析数据库》的演讲。他分享了其团队如何利用 Kubernetes (K8s) 存储平台构建数据解决方案,并讨论了相关技术和挑战。
主要内容
ClickHouse 数据库简介
Hodges 首先介绍了开源的实时分析数据库 ClickHouse。该数据库采用列式存储设计,基于无共享架构,可在裸金属或云基础设施上运行。ClickHouse 支持查询的并行和向量化执行,并具备复制、分片和分布式查询执行等分布式数据库功能。
Kubernetes 上的数据库部署
团队通过编写 Altinity ClickHouse Operator 将 ClickHouse 映射到 Kubernetes 平台。ClickHouse Server 作为 Docker 镜像运行,数据库组件通过 StatefulSets 在 Kubernetes 中表示,数据则存储在 AWS 的 Elastic Block Store (EBS) 上。Hodges 还分享了在 Kubernetes 上运行数据库时遇到的一些挑战,例如数据库副本在不同可用区 (AZ)、资源和软件版本上运行不对称,以及多样化的数据访问需求(读/写与只读)。
存储与计算的分离
团队通过为每个数据库服务器使用 StatefulSet 来映射资源,并创建不同的 podTemplate 值以按区域划分 Pod,同时使用 volumeClaimTemplate 确保所有 Pod 具有相同的存储规格。这种设计使得服务器能够精确映射到虚拟机和存储。
Hodges 还分享了存储性能统计数据,比较了使用 NVMe SSD 的 i3.4xlarge 虚拟机服务器与使用 EBS 的 m6i.4xlarge 虚拟机实例的性能。结果显示,在缓存查询响应方面,EBS 在所有查询中均表现更快,尤其是在内存读取和时钟速度方面,这使得 EBS 成为数据库集群背后更好的存储选择。这些性能测试通过 ClickBench 工具进行。
Kubernetes 的优势与技巧
Kubernetes 的另一个优势是支持存储与计算的分离。使用类似 EBS 的解决方案,可以独立扩展计算和存储资源。Hodges 还讨论了 Kubernetes 的一些组件和技巧,例如使用 Node Selector 和 反亲和性 来避免与其他服务的冲突,以及通过将 StatefulSet 的副本数设置为零来关闭计算资源,同时保持存储资源的活动状态。
此外,团队还开发了 Altinity EBS Params Controller,用于通过自定义注解批量修改存储卷,并在不重启系统的情况下扩展块存储。
总结与经验教训
Hodges 总结了使用 Kubernetes 存储运行云端分析数据库的经验教训:
- Kubernetes 是运行数据库的理想平台,能够在多种环境中(如不同云平台、本地 Minikube 或数百个节点的集群)实现可移植性。
- 性能测试至关重要,因为性能取决于数据库用例和数据访问模式。
- Kubernetes 与云块存储结合 提供了存储与计算的分离。
- 利用 Kubernetes 技巧(如自定义控制器)直接管理存储资源。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。