ThingsBoard容器编排:Docker Compose到Kubernetes迁移
引言
随着物联网项目规模的扩大,ThingsBoard的部署架构需要从简单的Docker Compose转向更强大的Kubernetes(K8s)编排系统。本文将详细介绍迁移过程,包括架构分析、资源配置转换和验证步骤,帮助运营人员平滑过渡到K8s环境。
现有Docker Compose架构分析
服务组成
当前Docker Compose配置包含多个核心服务,分布在docker/docker-compose.yml中:
- 核心服务:tb-core1、tb-core2(负载均衡部署)
- 规则引擎:tb-rule-engine1、tb-rule-engine2
- 传输服务:MQTT、HTTP、CoAP、LwM2M、SNMP等协议支持
- 辅助服务:ZooKeeper(服务发现)、tb-js-executor(JavaScript脚本执行)、tb-vc-executor(版本控制执行器)
- 负载均衡:HAProxy作为入口流量分发
关键配置示例
ZooKeeper配置确保服务发现功能:
ZOOKEEPER_ENABLED=true
ZOOKEEPER_URL=zookeeper:2181
MQTT传输服务配置:
MQTT_BIND_ADDRESS=0.0.0.0
MQTT_BIND_PORT=1883
MQTT_TIMEOUT=10000
来源:docker/tb-mqtt-transport.env
迁移准备:Kubernetes资源规划
命名空间规划
创建专用命名空间隔离ThingsBoard资源:
apiVersion: v1
kind: Namespace
metadata:
name: thingsboard
核心资源类型映射
| Docker Compose概念 | Kubernetes对应资源 | 配置文件示例 |
|---|---|---|
| 服务(Service) | Deployment | tb-core-deployment.yaml |
| 环境变量 | ConfigMap/Secret | tb-configmap.yaml |
| 端口映射 | Service (NodePort/LoadBalancer) | tb-service.yaml |
| 数据卷 | PersistentVolumeClaim | tb-pvc.yaml |
| 负载均衡 | Ingress | tb-ingress.yaml |
核心服务迁移步骤
1. 配置文件转换
将环境变量文件转换为K8s ConfigMap:
Docker Compose环境变量 → K8s ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: tb-node-config
namespace: thingsboard
data:
ZOOKEEPER_ENABLED: "true"
ZOOKEEPER_URL: "zk-service:2181"
JS_EVALUATOR: "remote"
TRANSPORT_TYPE: "remote"
2. 部署核心服务
创建tb-core Deployment(示例):
apiVersion: apps/v1
kind: Deployment
metadata:
name: tb-core
namespace: thingsboard
spec:
replicas: 2
selector:
matchLabels:
app: tb-core
template:
metadata:
labels:
app: tb-core
spec:
containers:
- name: tb-core
image: thingsboard/tb-node:latest
ports:
- containerPort: 8080
- containerPort: 7070
envFrom:
- configMapRef:
name: tb-node-config
volumeMounts:
- name: tb-config
mountPath: /config
- name: tb-logs
mountPath: /var/log/thingsboard
volumes:
- name: tb-config
configMap:
name: tb-node-config-files
- name: tb-logs
persistentVolumeClaim:
claimName: tb-logs-pvc
3. 服务暴露与负载均衡
替换HAProxy配置为K8s Service和Ingress:
HAProxy MQTT转发配置 → K8s Service:
apiVersion: v1
kind: Service
metadata:
name: tb-mqtt-transport
namespace: thingsboard
spec:
selector:
app: tb-mqtt-transport
ports:
- port: 1883
targetPort: 1883
protocol: TCP
type: LoadBalancer
对应docker/haproxy/config/haproxy.cfg中MQTT监听配置
数据持久化方案
持久卷配置
为核心服务日志和配置创建PersistentVolumeClaim:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: tb-logs-pvc
namespace: thingsboard
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
迁移验证与测试
服务健康检查
部署后验证所有Pod状态:
kubectl get pods -n thingsboard
功能验证清单
- 服务发现:验证ZooKeeper集群连接状态
- 协议连接:测试MQTT客户端连接(端口1883)
- 数据流程:发送测试遥测数据并验证规则引擎处理
- Web访问:通过Ingress访问ThingsBoard UI
常见问题与解决方案
服务间通信问题
症状:核心服务无法连接到ZooKeeper
解决方案:确保Service名称解析正确,检查docker/tb-node.env中的ZOOKEEPER_URL配置是否更新为K8s Service名称
资源限制调整
根据实际负载调整Deployment资源请求:
resources:
requests:
memory: "2Gi"
cpu: "1"
limits:
memory: "4Gi"
cpu: "2"
总结与下一步
通过本文步骤,已完成从Docker Compose到Kubernetes的核心迁移。后续建议:
- 实施监控方案:部署Prometheus和Grafana监控集群状态
- 自动扩缩容:配置HPA(Horizontal Pod Autoscaler)应对负载变化
- 备份策略:定期备份数据库和配置数据
- CI/CD集成:实现Kubernetes资源的自动化部署
完整的Kubernetes迁移资源清单可参考项目docker/目录下的迁移指南和示例配置文件。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



