当前位置: 首页 > news >正文

时序数据库 Apache IoTDB 实战:基于 Kubernetes 的部署运维全指南

时序数据库 Apache IoTDB 实战:基于 Kubernetes 的部署运维全指南

在这里插入图片描述

前言

随着物联网设备爆发式增长,海量时序数据的高效存储与分析成为关键挑战,Apache IoTDB 作为专为物联网设计的时序数据库,以高吞吐写入、低存储成本和灵活查询能力著称,而 Kubernetes 则为其提供了弹性部署与运维的标准化平台,本文聚焦 IoTDB 在 K8s 环境的核心部署实践,涵盖环境准备、集群搭建、故障排查与弹性扩容,并辅以基础操作示例,为物联网时序数据管理提供高效落地方案。

Apache IoTDB 介绍

在这里插入图片描述

Apache IoTDB 专为物联网场景设计的开源时序数据库,高效存储、管理和分析海量物联网设备产生的时序数据,由 Apache 软件基金会孵化并托管,具有高写入性能、低存储成本、灵活的查询能力和良好的可扩展性,广泛应用于工业物联网、智能家居、智慧城市等领域

极致的时序数据处理效率:针对物联网高频产生的时序数据深度优化,支持每秒数百万级写入,同时通过列式存储和时间分区技术实现 5-10 倍于传统数据库的压缩率,大幅降低存储成本,兼顾高吞吐与低存储开销

灵活且强大的时序查询能力:提供类 SQL 的查询语言,支持数据筛选、聚合、时间窗口分析、降采样等时序特有的操作,同时支持多设备数据对齐,满足实时监控与历史数据分析的双重需求

边缘与云端协同的高扩展性:轻量级设计可部署于边缘设备,实现本地化数据存储;同时支持分布式集群部署,通过水平扩展提升存储与计算能力,结合数据分片和副本机制,保障数据可靠性与负载均衡,适配从边缘到云端的全场景需求

前提准备

K8s 集群:版本≥1.24,至少 3 节点(4 核 8G 起),网络互通

存储:配置支持动态 PV 的 StorageClass(推荐 SSD)

网络:部署高性能 CNI 插件(如 Calico),规划外部访问方式

镜像:准备 IoTDB 镜像(版本≥1.3.3.2)

权限:创建专用命名空间(如 iotdb)及必要 RBAC 权限

IoTDB Kubernetes 部署

1、创建命名空间

kubectl create ns iotdb-ns

2、查看命名空间

kubectl get ns

3、创建 PV 配置文件

#可新建个文件夹放yaml文件
#创建 pv.yaml 文件语句
touch pv.yaml

4、pv.yaml 示例

# pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: iotdb-pv-01
spec:capacity:storage: 10Gi # 存储容量accessModes: # 访问模式- ReadWriteOncepersistentVolumeReclaimPolicy: Retain # 回收策略# 存储类名称,如果使用本地静态存储storageClassName 不用配置,如果使用动态存储必需设置此项storageClassName: local-storage # 根据你的存储类型添加相应的配置hostPath: # 如果是使用本地路径path: /data/k8s-data/iotdb-pv-01type: DirectoryOrCreate  # 这行不配置就要手动创建文件夹

5、应用 PV 配置

kubectl apply -f pv01.yaml
kubectl apply -f pv-02.yaml
...

6、查看 PV

kubectl get pv

在这里插入图片描述

7、手动创建文件夹

mkdir -p /data/k8s-data/iotdb-pv-01
mkdir -p /data/k8s-data/iotdb-pv-02
...

8、克隆 IoTDB Kubernetes 部署代码

unset HTTPS_PROXY

9、修改 YAML 文件

nameOverride: "iotdb"  
fullnameOverride: "iotdb"   #软件安装后的名称image:repository: nexus.infra.timecho.com:8143/timecho/iotdb-enterprisepullPolicy: IfNotPresenttag: 1.3.3.2-standalone    #软件所用的仓库和版本storage:
# 存储类名称,如果使用本地静态存储storageClassName 不用配置,如果使用动态存储必需设置此项className: local-storagedatanode:name: datanodenodeCount: 3        #datanode的节点数量enableRestService: truestorageCapacity: 10Gi       #datanode的可用空间大小resources:requests:memory: 2Gi    #datanode的内存初始化大小cpu: 1000m     #datanode的CPU初始化大小limits:memory: 4Gi    #datanode的最大内存大小cpu: 1000m     #datanode的最大CPU大小confignode:name: confignodenodeCount: 3      #confignode的节点数量storageCapacity: 10Gi      #confignode的可用空间大小resources:requests:memory: 512Mi    #confignode的内存初始化大小cpu: 1000m      #confignode的CPU初始化大小limits:memory: 1024Mi   #confignode的最大内存大小cpu: 2000m     #confignode的最大CPU大小configNodeConsensusProtocolClass: org.apache.iotdb.consensus.ratis.RatisConsensusschemaReplicationFactor: 3schemaRegionConsensusProtocolClass: org.apache.iotdb.consensus.ratis.RatisConsensusdataReplicationFactor: 2dataRegionConsensusProtocolClass: org.apache.iotdb.consensus.iot.IoTConsensus

10、从私有仓库拉取镜像,创建secret 使k8s可访问iotdb-helm的私有仓库

# 注意 单引号
kubectl create secret docker-registry timecho-nexus \--docker-server='nexus.infra.timecho.com:8143' \--docker-username='xxxxxx' \--docker-password='xxxxxx' \--docker-email='xxxxxx' \-n iotdb-ns# 查看secret
kubectl get secret timecho-nexus -n iotdb-ns
# 查看并输出为yaml
kubectl get secret timecho-nexus --output=yaml -n iotdb-ns
# 查看并解密
kubectl get secret timecho-nexus --output="jsonpath={.data.\.dockerconfigjson}" -n iotdb-ns | base64 --decode

11、安装 IoTDB

# 进入文件夹
cd iotdb-cluster-k8s/helm# 安装iotdb
helm install iotdb ./ -n iotdb-ns

12、查看 Helm 安装列表

# helm list
helm list -n iotdb-ns

13、查看 Pods

# 查看 iotdb的pods
kubectl get pods -n iotdb-ns -o wide

14、发现故障的排除方式

# 查看k8s的创建log
kubectl get events -n iotdb-ns 
watch kubectl get events -n iotdb-ns# 获取详细信息
kubectl describe pod confignode-0 -n iotdb-ns
kubectl describe pod datanode-0 -n iotdb-ns# 查看confignode日志
kubectl logs -n iotdb-ns confignode-0 -f

15、激活 IoTDB,进入confignode的容器中激活

kubectl exec -it -n iotdb-ns confignode-0 -- /bin/bash
cd /iotdb/sbin
/bin/bash start-activate.sh
# 拿到机器码后进行激活
# 退出容器

16、验证 IoTDB(查看iotdb-ns命名空间内的IP、状态等信息,确定全部运行正常)

kubectl get pods -n iotdb-ns -o wide# 结果示例:
# NAME           READY   STATUS    RESTARTS         AGE   IP             NODE   NOMINATED NODE   READINESS GATES
# confignode-0   1/1     Running   0                75m   10.20.187.14   a87    <none>           <none>
# confignode-1   1/1     Running   0                75m   10.20.191.75   a88    <none>           <none>
# confignode-2   1/1     Running   0                75m   10.20.187.16   a87    <none>           <none>
# datanode-0     1/1     Running   10 (5m54s ago)   75m   10.20.191.74   a88    <none>           <none>
# datanode-1     1/1     Running   10 (5m42s ago)   75m   10.20.187.15   a87    <none>           <none>
# datanode-2     1/1     Running   10 (5m55s ago)   75m   10.20.191.76   a88    <none>           <none>

17、查看命名空间内的端口映射情况

kubectl get svc -n iotdb-ns# 结果示例:
# NAME             TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
# confignode-svc   NodePort       10.10.226.151   <none>        80:31026/TCP     7d8h
# datanode-svc     NodePort       10.10.194.225   <none>        6667:31563/TCP   7d8h
# jdbc-balancer    LoadBalancer   10.10.191.209   <pending>     6667:31895/TCP   7d8h

18、在任意服务器启动 CLI 脚本验证 IoTDB 集群状态(端口即jdbc-balancer的端口,服务器为k8s任意节点的IP)

start-cli.sh -h 172.20.31.86 -p 31895
start-cli.sh -h 172.20.31.87 -p 31895
start-cli.sh -h 172.20.31.88 -p 31895

在这里插入图片描述

19、扩容,新增pv

在这里插入图片描述

20、扩容confignode:修改iotdb-cluster-k8s/helm的values.yaml文件,将confignode的3改成4

helm upgrade iotdb . -n iotdb-ns

在这里插入图片描述

21、扩容datanode(修改iotdb-cluster-k8s/helm的values.yaml文件,将datanode的3改成4)

helm upgrade iotdb . -n iotdb-ns

22、验证IoTDB状态

kubectl get pods -n iotdb-ns -o wide# NAME           READY   STATUS    RESTARTS         AGE   IP             NODE   NOMINATED NODE   READINESS GATES
# confignode-0   1/1     Running   0                75m   10.20.187.14   a87    <none>           <none>
# confignode-1   1/1     Running   0                75m   10.20.191.75   a88    <none>           <none>
# confignode-2   1/1     Running   0                75m   10.20.187.16   a87    <none>           <none>
# datanode-0     1/1     Running   10 (5m54s ago)   75m   10.20.191.74   a88    <none>           <none>
# datanode-1     1/1     Running   10 (5m42s ago)   75m   10.20.187.15   a87    <none>           <none>
# datanode-2     1/1     Running   10 (5m55s ago)   75m   10.20.191.76   a88    <none>           <none>
# datanode-3     1/1     Running   10 (5m55s ago)   75m   10.20.191.76   a88    <none>           <none>

Apache IoTDB CRUD 操作

创建时间序列(Schema)
-- 创建存储组(逻辑分区)
CREATE STORAGE GROUP root.device;-- 创建时间序列(带数据类型和编码)
CREATE TIMESERIES root.device.temperature WITH DATATYPE=FLOAT, ENCODING=RLE;
CREATE TIMESERIES root.device.humidity WITH DATATYPE=INT32, ENCODING=PLAIN;
写入数据(增)
INSERT INTO root.device(timestamp, temperature) VALUES(1690000000000, 25.5);
查询数据(查)
SELECT temperature FROM root.device WHERE time >= 1690000000000;
修改数据(改)
INSERT INTO root.device(timestamp, temperature) VALUES(1690000000000, 26.0); -- 覆盖原有值
删除数据(删)
DELETE FROM root.device.temperature WHERE time < 1690000001000;

Timer 深度时序分析通用基础模型

在这里插入图片描述

Timer 深度时序分析通用基础模型是由清华大学软件学院研发的新一代时序分析框架,专为解决物联网、工业互联网等场景下的复杂时序数据深度解析需求而设计。其核心价值在于通过生成式预训练与统一任务建模,实现了时序数据从存储到分析的端到端智能化

少样本强适配:无需大量标注数据,通过预训练习得通用时序规律,少量领域样本即可快速适配新场景,泛化能力突出

全任务一体化:统一时序预测、缺失值填补、异常检测等多任务为生成式框架,灵活应对各类时序分析需求,无需单独建模

高扩展易升级:随参数量增加和训练数据扩容,模型对复杂时序模式的捕捉能力持续增强,适配数据规模与场景复杂度增长

总结

在这里插入图片描述

Apache IoTDB 是物联网时序数据管理的高效利器,高吞吐写入、极致压缩率与类 SQL 查询能力,能轻松应对传感器高频数据的存储与分析需求,通过 Kubernetes 部署全流程,提供可直接复用的操作手册,配合 CRUD 语法示例快速上手数据操作,结合 Timer 深度时序分析模型的少样本适配与全任务统一能力,开发者可快速搭建从底层存储到上层智能分析的完整链路,无需重复开发时序处理模块,无论是边缘设备轻量化部署,还是云端分布式集群扩展,这套方案都能降低物联网数据管理的技术门槛,让开发者专注于业务逻辑实现而非底层存储细节。

👉Apache IoTDB 下载地址👈(点击下载

http://www.dtcms.com/a/285313.html

相关文章:

  • 固件OTA升级常见问题
  • 9. isaacsim4.2教程-ROS加相机/CLOCK
  • Onload 用户指南 (UG1586)-笔记
  • (数据结构)线性表(上):SeqList 顺序表
  • Mysql数据库——增删改查CRUD
  • k8s:利用kubectl部署postgis:17-3.5
  • Java面向对象核心揭秘:从构造到多态的实战指南
  • Java List 集合详解:从基础到实战,掌握 Java 列表操作全貌
  • 代码随想录算法训练营65期第22天
  • 五分钟学会大数定律【笔记】
  • day055-Dockerfile与常用指令
  • 上网行为管理之内容审计实验
  • 数据结构-2(链表)
  • 基于强化学习的人机协同教学角色分配优化与课堂参与度建模研究
  • C++拷贝构造
  • 鸿蒙UI自动化测试框架Hypium的使用指南
  • Netty入门学习
  • java-字符串和集合
  • (自用)补充说明2
  • 《python语言程序设计》2018版第8章8题编写函数实现二进制转十进制(字符串变整数)!!整数没法进行下标
  • 基于MATLAB的极限学习机ELM的数据回归预测方法应用
  • 用python可视化分析二次元经济的爆发
  • python网络爬虫(第一步:网络爬虫库、robots.txt规则(防止犯法)、查看获取网页源代码)
  • 2025年6月GESP(C++一级):假期阅读
  • Baumer工业相机堡盟工业相机如何通过YoloV8模型实现人物识别(C#)
  • 2025年6月GESP(C++一级):值日
  • VOTE:基于轨迹集成投票的视觉-语言-动作模型优化
  • 掌握工程化固件烧录,开启你的技术进阶之路-STM32系列
  • C#将类属性保存到Ini文件方法(利用拓展方法,反射方式获取到分组名和属性名称属性值)
  • vue-cli 模式下安装 uni-ui