好消息!TDengine的K8s部署方案终于正式落地!

好消息!好消息!今天我们有一个令人激动的好消息要宣布!

虽然开局的文风看着有些“震惊党”,但是希望大家不要介意。因为从今天开始,TDengine Database终于正式推出了基于K8s的部署方案。

这么久以来,我们时常看到用户问什么时候才能看到TDengine在K8s上的部署方案——现在,这一天终于来了。

Kubernetes是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。作为该领域的事实标准,K8s可以促进完善组件和工具的生态系统,以减轻应用程序在公有云或私有云中部署和运维的负担。

因此,有了K8s的助力,TDengine Database的性能和轻便性以及强大的资源利用能力都会如虎添翼。

所以,我们着实有必要“震惊”一下。

(图二来自于: Kubernetes官方文档

TDengine 时序数据库 - 好消息!TDengine的K8s部署方案终于正式落地! K8s 1
TDengine 时序数据库 - 好消息!TDengine的K8s部署方案终于正式落地! K8s 2

早在2019年,Gartner公司的报告就显示:当前世界的联网设备数在该年已经超过142亿,预计2021年将达到250亿,如此庞大的设备数量会产生海量的数据。

另一方面,IDC(国际数据中心)的研究报告称:到2022年,90%的新应用将具有微服务架构,这些架构可提高设计、调试、更新和利用第三方代码的能力,35%的生产应用将是云原生的。

因此,在云原生的场景处理海量的数据是未来的大势所趋。而容器化,作为基础设施和微服务的实践者,能够实现产品的快速部署迭代,灵活扩容缩容,隔离应用。它的这些特征,正是云原生重要的组成部分。

如今,TDengine终于也正式踏入了这一领域。

众所周知,除了时序数据库(Time-Series Database)之外,TDengine还提供缓存、消息队列、订阅、流式计算等功能,为物联网、工业互联网大数据的处理提供全栈的技术方案。所以,如果TDengine能得到容器化的加成,对于使用旧有大数据体系工具的用户来说,这样的替换无异于“鸟枪换炮”,使用体验和维护难度都会得到质变级别的优化。

为此,涛思数据提供了一组Docker镜像,并使用这组镜像分别实现了TDengine在minikube及rancher rk2 环境下的部署和测试,初步实现了Helm Chart支持(Chart名称:tdengine, 当前版本 0.1.0,Chart地址:https://github.com/taosdata/TDengine-Operator/raw/main/helm/tdengine-0.1.0.tgz)。

Docker构建流程及Helm源代码托管在 TDengine-Operator 仓库中;初步的中英文文档使用GitHub Pages发布在:https://taosdata.github.io/TDengine-Operator/ 。

中文文档见:https://taosdata.github.io/TDengine-Operator/zh/index.html ;

英文文档见 https://taosdata.github.io/TDengine-Operator/en/index.html 。

在部署过程中,由于数据库节点间存在主从关系之类的独立特征,并不是单纯一模一样的数据节点,即每个节点都是“有状态”的。因此我们选用的是statefulset(“有状态应用”的控制器)来部署集群。它能提供给pod以稳定的顺序,稳定的网络,稳定的存储。这样可以保证数据库节点在恢复后不论是数据状态还是网络状态都可以维持原样,从而保护TDengine集群的稳定性和易维护性。

TDengine 时序数据库 - 好消息!TDengine的K8s部署方案终于正式落地! K8s 3

接下来,利用Docker的entrypoint 特性,我们每次在增加pod的副本数时,都会通过脚本自动连接firstEP(即是第一个创建的pod),然后执行“create dnode +新节点的fqdn+端口”。由于statefulset特性使得pod的创建具有顺序性,名字具有唯一性,所以我们用这些特性来区分不同TDengine节点的地址信息。

综上逻辑,因此在操作的时候,我们只需要在控制器的yaml中指定副本(replica)数量,就可以直接得到一个相等数量的数据库集群,从而完成TDengine集群的快速搭建。

示范如下:

TDengine 时序数据库 - 好消息!TDengine的K8s部署方案终于正式落地! K8s 4
TDengine 时序数据库 - 好消息!TDengine的K8s部署方案终于正式落地! K8s 5
TDengine 时序数据库 - 好消息!TDengine的K8s部署方案终于正式落地! K8s 6
TDengine 时序数据库 - 好消息!TDengine的K8s部署方案终于正式落地! K8s 7

与之类似,我们只需按照文档操作,在线调整副本数就可以方便的动态扩容和缩容,十分便捷。但因为文章篇幅有限,不能赘述太多。所以,如果想了解更多其他TDengine在K8s上的部署方式和实现,欢迎大家阅读:https://taosdata.github.io/TDengine-Operator/并自己实操一番。该文档对一些错误操作和部署时需要留意的细节也做了说明。

附上本方案作者、涛思数据工程师霍琳贺想对大家说的话:

为了支持TDengineKubernetes上的部署,特编写此文档。此文档完全开源,源码托管在 taosdata/TDengine-Operator,并欢迎所有人对此文档进行修改,您可以直接提交Pull Request,也可以添加 Issue,任何一种方式都将是我们的荣幸。TDengine完善离不开社区的共同努力,谢谢!

在本文档中,我们将从部署一套Kubernetes环境开始,介绍如何启动Kubernetes,并在Kubernetes上从头部署TDengine集群,简单介绍如何在K8s环境中进行TDengine集群的扩容和缩容,其中我们未能完整支持的地方也会有说明,可能出现问题的操作也作了简要的提示。

如果在实际操作过程中遇到问题,您总是可以通过官方微信 tdengine 联系到我们。

如您所见,TDengine还在不断地优化自己的生态和性能,感谢大家一路以来的支持与陪伴。