ThingsBoard容器化部署:Docker与Kubernetes配置全攻略
在物联网(IoT)项目开发中,平台的部署效率直接影响项目迭代速度。ThingsBoard作为开源IoT平台,提供了设备管理、数据采集、处理与可视化的完整解决方案。本文将详细介绍如何通过Docker Compose实现快速部署,以及基于Kubernetes的生产级配置方案,帮助运营人员和开发团队解决多服务协同、资源调度与监控告警等核心痛点。
环境准备与基础架构
系统要求与依赖组件
部署ThingsBoard容器化环境需提前安装Docker CE和Docker Compose。项目提供的自动化脚本已针对Linux环境优化,确保各服务间网络通畅与权限正确。核心依赖组件包括:
- 服务编排:Docker Compose (docker-compose.yml)
- 服务发现:ZooKeeper (docker-compose.yml#L18-L26)
- 负载均衡:HAProxy (docker/haproxy/config)
容器化架构概览
ThingsBoard微服务架构通过功能拆分实现高可用,主要包含以下模块:
- 核心服务:tb-core1/tb-core2(双节点冗余)
- 规则引擎:tb-rule-engine1/tb-rule-engine2(规则处理与数据流转)
- 传输协议:MQTT/HTTP/CoAP/LwM2M/SNMP多种协议接入
- 前端应用:tb-web-ui1/tb-web-ui2(负载均衡部署)
Docker Compose快速部署
目录结构与配置文件
项目的Docker配置集中在docker/目录,关键文件包括:
- 环境变量:tb-node.env、tb-mqtt-transport.env
- 启动脚本:docker-start-services.sh、docker-install-tb.sh
- 日志配置:tb-node/log(挂载宿主机目录实现持久化)
数据库与缓存配置
支持PostgreSQL(默认)和Cassandra两种数据库,通过修改.env文件切换:
# 切换数据库类型(postgres/hybrid)
DATABASE=postgres
# 缓存类型配置(valkey/valkey-cluster/valkey-sentinel)
CACHE=valkey
对应的配置文件:docker-compose.postgres.yml、docker-compose.valkey.yml
部署步骤
- 创建日志目录(需sudo权限):
./docker-create-log-folders.sh
- 初始化安装(含演示数据):
./docker-install-tb.sh --loadDemo
- 启动服务:
./docker-start-services.sh
服务启动后可通过http://localhost访问,默认管理员账号:sysadmin@thingsboard.org/sysadmin
高级配置与性能优化
服务扩缩容
通过修改docker-compose.yml中的replicas参数调整服务实例数量,例如JS执行器扩容:
tb-js-executor:
deploy:
replicas: 10 # 根据规则复杂度调整
资源限制与日志管理
为避免单服务资源抢占,建议配置容器资源限制:
tb-core1:
deploy:
resources:
limits:
cpus: '2'
memory: 4G
logging:
driver: "json-file"
options:
max-size: "200m"
max-file: "30"
监控集成
启用Prometheus+Grafana监控需设置MONITORING_ENABLED=true,相关配置:
- Prometheus配置:monitoring/prometheus/prometheus.yml
- Grafana面板:monitoring/grafana/provisioning/dashboards
Kubernetes生产环境部署
容器化改造要点
将Docker Compose配置迁移至K8s需注意:
- StatefulSet:替换Docker Compose的固定服务名,使用Headless Service实现稳定网络标识
- ConfigMap/Secret:管理环境变量与敏感配置(如数据库密码)
- PersistentVolume:替换宿主机挂载,实现数据持久化
示例配置片段
Deployment for tb-core:
apiVersion: apps/v1
kind: Deployment
metadata:
name: tb-core
spec:
replicas: 2
template:
spec:
containers:
- name: tb-core
image: thingsboard/tb-node:latest
env:
- name: TB_SERVICE_TYPE
value: "tb-core"
ports:
- containerPort: 8080
volumeMounts:
- name: config
mountPath: /config
volumes:
- name: config
configMap:
name: tb-node-config
服务暴露与Ingress配置
通过Ingress-NGINX实现HTTP/HTTPS路由,MQTT协议需使用NodePort或LoadBalancer:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: thingsboard-ingress
spec:
rules:
- host: iot.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: tb-web-ui
port:
number: 80
运维与监控
日志管理与问题排查
服务日志通过JSON格式输出,关键路径:
- 核心服务日志:docker/tb-node/log
- 传输服务日志:docker/tb-transports/mqtt/log
常用排查命令:
# 查看核心服务日志
docker-compose logs -f tb-core1 tb-core2
# 检查服务状态
docker-compose ps | grep tb-
监控指标与告警
启用Prometheus监控后,可通过http://localhost:9090访问指标,关键监控项:
jvm_memory_used_bytes{service="tb-core"}(JVM内存使用)mqtt_transport_connected_clients(MQTT连接数)rule_engine_processing_time_seconds(规则处理耗时)
Grafana预置面板位于docker/monitoring/grafana/provisioning/dashboards,默认账号admin/foobar。
升级与扩展
版本升级流程
通过项目提供的升级脚本实现平滑迁移:
./docker-stop-services.sh
./docker-upgrade-tb.sh --fromVersion=3.4.1
./docker-start-services.sh
升级前需备份数据库,配置文件变更可参考upgrade-tb.sh的差异对比逻辑。
边缘计算集成
ThingsBoard Edge支持边缘节点部署,通过tb-core.env中的EDGES_ENABLED=true启用,相关代码实现位于common/edge-api/。
总结与最佳实践
容器化部署使ThingsBoard实现"一键启动"的同时,保持企业级可靠性。生产环境建议:
- 资源规划:每个tb-core节点至少2核4G内存
- 数据备份:定期备份PostgreSQL/Cassandra数据卷
- 安全加固:通过HAProxy配置HTTPS,限制容器间网络访问
- 监控告警:配置JVM内存、数据库连接数等关键指标告警
完整部署文档可参考docker/README.md,社区贡献的Kubernetes配置示例位于msa/目录。通过容器化技术,ThingsBoard能够轻松应对从测试环境到大规模生产部署的全场景需求。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



